[{"data":1,"prerenderedAt":173105},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-12-04-qiang-hua-xue-xi\u002Fch3-dong-zuo-jia-zhi-han-shu":3,"wiki-doc-nav":136},{"id":4,"title":5,"body":6,"description":27,"extension":129,"meta":130,"navigation":131,"path":132,"seo":133,"stem":134,"__hash__":135},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":8,"toc":123},"minimark",[9,13,18,22,29,34,37,42,45,50,53,57,62,65,70,75,80,83,87,92,95,100,105,110,115,118],[10,11,5],"h1",{"id":12},"_3动作价值函数",[14,15,17],"h2",{"id":16},"_31dqn","3.1.DQN",[19,20,21],"p",{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,23,24],{},[25,26],"img",{"alt":27,"src":28},"","..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,30,31],{},[25,32],{"alt":27,"src":33},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,35,36],{},"DQN算法的描述：",[19,38,39],{},[25,40],{"alt":27,"src":41},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,43,44],{},"这里的Dense指的是全连接层",[19,46,47],{},[25,48],{"alt":27,"src":49},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,51,52],{},"当前观测的状态为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,54,56],{"id":55},"_32dqn的举例","3.2.DQN的举例",[19,58,59],{},[25,60],{"alt":27,"src":61},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,63,64],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,66,67],{},[25,68],{"alt":27,"src":69},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,71,72],{},[25,73],{"alt":27,"src":74},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,76,77],{},[25,78],{"alt":27,"src":79},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,81,82],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,84,86],{"id":85},"_33td算法","3.3.TD算法",[19,88,89],{},[25,90],{"alt":27,"src":91},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,93,94],{},"强化学习TD算法公式的粗略解释：",[19,96,97],{},[25,98],{"alt":27,"src":99},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,101,102],{},[25,103],{"alt":27,"src":104},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,106,107],{},[25,108],{"alt":27,"src":109},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,111,112],{},[25,113],{"alt":27,"src":114},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,116,117],{},"TD算法总结：",[19,119,120],{},[25,121],{"alt":27,"src":122},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":27,"searchDepth":124,"depth":124,"links":125},2,[126,127,128],{"id":16,"depth":124,"text":17},{"id":55,"depth":124,"text":56},{"id":85,"depth":124,"text":86},"md",{},true,"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":5,"description":27},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",[137,5252,6360,7780,10769,12120,13609,14698,23461,23474,24073,24099,24189,24430,24495,24513,24526,24573,24697,24866,25065,25245,25450,25586,25681,25718,25731,26041,26782,27490,27511,28531,30162,30313,30326,30338,30639,50451,50466,50483,50516,53388,76736,92881,92902,93015,93136,93906,94569,94930,94968,95074,95174,95217,95243,95304,96958,97059,97084,97575,98075,99155,99438,100180,100682,100694,102710,104374,105877,107575,109492,111411,113433,116903,117335,117798,118547,121491,121839,121861,122217,125524,125536,125939,125962,126109,126276,126481,126782,127339,127996,129927,131525,132174,133668,135099,136334,138028,139780,142190,142306,143241,143452,144337,145572,145800,145813,146968,149380,151748,155069,157546,159190,160967,162980,166032,168212,170739,172933],{"id":138,"title":139,"body":140,"description":27,"extension":129,"meta":5247,"navigation":131,"path":5248,"seo":5249,"stem":5250,"__hash__":5251},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":141,"toc":5219},[142,145,149,152,156,169,173,178,181,184,187,190,193,228,232,235,238,241,244,297,301,320,322,336,339,347,350,1213,1220,1237,1241,1332,1336,1342,1431,1435,1473,1477,1541,1545,1549,1555,1566,1570,1575,1579,1584,1588,1593,1597,1601,1606,1876,1881,2019,2024,2281,2284,2292,2296,2301,2404,2407,2713,2722,2823,2826,2829,2832,2835,3095,3100,3240,3243,3422,3425,3553,3556,3708,3712,3717,3720,3731,3739,3742,3849,3853,3857,3862,3912,3917,3922,3946,3951,4004,4007,4012,4189,4194,4479,4484,4881,4885,4890,4947,4952,4960,4963,5103,5106,5215],[10,143,139],{"id":144},"_1基础入门",[14,146,148],{"id":147},"_11注释","1.1注释",[19,150,151],{},"\u002F\u002F或者\u002F* *\u002F",[14,153,155],{"id":154},"_12命名","1.2命名",[157,158,159,163,166],"ol",{},[160,161,162],"li",{},"字母数字下划线",[160,164,165],{},"开头必须是字母或_",[160,167,168],{},"不能使用关键词",[14,170,172],{"id":171},"_13数据类型","1.3数据类型",[174,175,177],"h3",{"id":176},"_131整形","1.3.1整形",[19,179,180],{},"short 短整形 2",[19,182,183],{},"int 整形 4",[19,185,186],{},"long 长整形 win4 linux32位4 linux64位8",[19,188,189],{},"long long 长长整形 8",[19,191,192],{},"利用sizeof可以求数据类型占用的内存空间大小",[194,195,199],"pre",{"className":196,"code":197,"language":198,"meta":27,"style":27},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[200,201,202,221],"code",{"__ignoreMap":27},[203,204,207,211,215,218],"span",{"class":205,"line":206},"line",1,[203,208,210],{"class":209},"szBVR","sizeof",[203,212,214],{"class":213},"sVt8B","(",[203,216,217],{"class":209},"int",[203,219,220],{"class":213},")\n",[203,222,223,225],{"class":205,"line":124},[203,224,210],{"class":209},[203,226,227],{"class":213},"(num)\n",[174,229,231],{"id":230},"_132浮点型","1.3.2浮点型",[19,233,234],{},"float 单精度 4节 7位有效数字",[19,236,237],{},"double 双精度 8节 15-16有效数字",[19,239,240],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,242,243],{},"注意点：",[194,245,247],{"className":196,"code":246,"language":198,"meta":27,"style":27},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[200,248,249,274],{"__ignoreMap":27},[203,250,251,254,257,260,264,267,270],{"class":205,"line":206},[203,252,253],{"class":209},"float",[203,255,256],{"class":213}," f1",[203,258,259],{"class":209},"=",[203,261,263],{"class":262},"sj4cs","3.14",[203,265,266],{"class":209},"f",[203,268,269],{"class":213},";",[203,271,273],{"class":272},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[203,275,276,278,281,283,286,289,292,294],{"class":205,"line":124},[203,277,253],{"class":209},[203,279,280],{"class":213}," f2",[203,282,259],{"class":209},[203,284,285],{"class":262},"3",[203,287,288],{"class":209},"e",[203,290,291],{"class":262},"2",[203,293,269],{"class":213},[203,295,296],{"class":272}," \u002F\u002F科学记数法\n",[174,298,300],{"id":299},"_133字符型","1.3.3字符型",[194,302,304],{"className":196,"code":303,"language":198,"meta":27,"style":27},"char ch='a'\n",[200,305,306],{"__ignoreMap":27},[203,307,308,311,314,316],{"class":205,"line":206},[203,309,310],{"class":209},"char",[203,312,313],{"class":213}," ch",[203,315,259],{"class":209},[203,317,319],{"class":318},"sZZnC","'a'\n",[19,321,243],{},[157,323,324,327,330,333],{},[160,325,326],{},"在显示字符型变量时，只能单引号，双引号x",[160,328,329],{},"单引号内只能一个字符，不能字符串",[160,331,332],{},"c和c++字符型变量只占用一个字符",[160,334,335],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,337,338],{},"ASCII码大致由以下两部分组成：",[157,340,341,344],{},[160,342,343],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[160,345,346],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,348,349],{},"ASCII码表格：",[351,352,353,397],"table",{},[354,355,356],"thead",{},[357,358,359,367,372,376,381,385,389,393],"tr",{},[360,361,362,366],"th",{},[363,364,365],"strong",{},"ASCII","值",[360,368,369],{},[363,370,371],{},"控制字符",[360,373,374,366],{},[363,375,365],{},[360,377,378],{},[363,379,380],{},"字符",[360,382,383,366],{},[363,384,365],{},[360,386,387],{},[363,388,380],{},[360,390,391,366],{},[363,392,365],{},[360,394,395],{},[363,396,380],{},[398,399,400,427,453,478,503,529,554,579,605,630,656,682,708,733,759,785,811,835,860,885,910,935,960,985,1010,1035,1060,1086,1111,1136,1161,1187],"tbody",{},[357,401,402,406,409,412,415,418,421,424],{},[403,404,405],"td",{},"0",[403,407,408],{},"NUT",[403,410,411],{},"32",[403,413,414],{},"(space)",[403,416,417],{},"64",[403,419,420],{},"@",[403,422,423],{},"96",[403,425,426],{},"、",[357,428,429,432,435,438,441,444,447,450],{},[403,430,431],{},"1",[403,433,434],{},"SOH",[403,436,437],{},"33",[403,439,440],{},"!",[403,442,443],{},"65",[403,445,446],{},"A",[403,448,449],{},"97",[403,451,452],{},"a",[357,454,455,457,460,463,466,469,472,475],{},[403,456,291],{},[403,458,459],{},"STX",[403,461,462],{},"34",[403,464,465],{},"\"",[403,467,468],{},"66",[403,470,471],{},"B",[403,473,474],{},"98",[403,476,477],{},"b",[357,479,480,482,485,488,491,494,497,500],{},[403,481,285],{},[403,483,484],{},"ETX",[403,486,487],{},"35",[403,489,490],{},"#",[403,492,493],{},"67",[403,495,496],{},"C",[403,498,499],{},"99",[403,501,502],{},"c",[357,504,505,508,511,514,517,520,523,526],{},[403,506,507],{},"4",[403,509,510],{},"EOT",[403,512,513],{},"36",[403,515,516],{},"$",[403,518,519],{},"68",[403,521,522],{},"D",[403,524,525],{},"100",[403,527,528],{},"d",[357,530,531,534,537,540,543,546,549,552],{},[403,532,533],{},"5",[403,535,536],{},"ENQ",[403,538,539],{},"37",[403,541,542],{},"%",[403,544,545],{},"69",[403,547,548],{},"E",[403,550,551],{},"101",[403,553,288],{},[357,555,556,559,562,565,568,571,574,577],{},[403,557,558],{},"6",[403,560,561],{},"ACK",[403,563,564],{},"38",[403,566,567],{},"&",[403,569,570],{},"70",[403,572,573],{},"F",[403,575,576],{},"102",[403,578,266],{},[357,580,581,584,587,590,593,596,599,602],{},[403,582,583],{},"7",[403,585,586],{},"BEL",[403,588,589],{},"39",[403,591,592],{},",",[403,594,595],{},"71",[403,597,598],{},"G",[403,600,601],{},"103",[403,603,604],{},"g",[357,606,607,610,613,616,618,621,624,627],{},[403,608,609],{},"8",[403,611,612],{},"BS",[403,614,615],{},"40",[403,617,214],{},[403,619,620],{},"72",[403,622,623],{},"H",[403,625,626],{},"104",[403,628,629],{},"h",[357,631,632,635,638,641,644,647,650,653],{},[403,633,634],{},"9",[403,636,637],{},"HT",[403,639,640],{},"41",[403,642,643],{},")",[403,645,646],{},"73",[403,648,649],{},"I",[403,651,652],{},"105",[403,654,655],{},"i",[357,657,658,661,664,667,670,673,676,679],{},[403,659,660],{},"10",[403,662,663],{},"LF",[403,665,666],{},"42",[403,668,669],{},"*",[403,671,672],{},"74",[403,674,675],{},"J",[403,677,678],{},"106",[403,680,681],{},"j",[357,683,684,687,690,693,696,699,702,705],{},[403,685,686],{},"11",[403,688,689],{},"VT",[403,691,692],{},"43",[403,694,695],{},"+",[403,697,698],{},"75",[403,700,701],{},"K",[403,703,704],{},"107",[403,706,707],{},"k",[357,709,710,713,716,719,721,724,727,730],{},[403,711,712],{},"12",[403,714,715],{},"FF",[403,717,718],{},"44",[403,720,592],{},[403,722,723],{},"76",[403,725,726],{},"L",[403,728,729],{},"108",[403,731,732],{},"l",[357,734,735,738,741,744,747,750,753,756],{},[403,736,737],{},"13",[403,739,740],{},"CR",[403,742,743],{},"45",[403,745,746],{},"-",[403,748,749],{},"77",[403,751,752],{},"M",[403,754,755],{},"109",[403,757,758],{},"m",[357,760,761,764,767,770,773,776,779,782],{},[403,762,763],{},"14",[403,765,766],{},"SO",[403,768,769],{},"46",[403,771,772],{},".",[403,774,775],{},"78",[403,777,778],{},"N",[403,780,781],{},"110",[403,783,784],{},"n",[357,786,787,790,793,796,799,802,805,808],{},[403,788,789],{},"15",[403,791,792],{},"SI",[403,794,795],{},"47",[403,797,798],{},"\u002F",[403,800,801],{},"79",[403,803,804],{},"O",[403,806,807],{},"111",[403,809,810],{},"o",[357,812,813,816,819,822,824,827,830,833],{},[403,814,815],{},"16",[403,817,818],{},"DLE",[403,820,821],{},"48",[403,823,405],{},[403,825,826],{},"80",[403,828,829],{},"P",[403,831,832],{},"112",[403,834,19],{},[357,836,837,840,843,846,848,851,854,857],{},[403,838,839],{},"17",[403,841,842],{},"DCI",[403,844,845],{},"49",[403,847,431],{},[403,849,850],{},"81",[403,852,853],{},"Q",[403,855,856],{},"113",[403,858,859],{},"q",[357,861,862,865,868,871,873,876,879,882],{},[403,863,864],{},"18",[403,866,867],{},"DC2",[403,869,870],{},"50",[403,872,291],{},[403,874,875],{},"82",[403,877,878],{},"R",[403,880,881],{},"114",[403,883,884],{},"r",[357,886,887,890,893,896,898,901,904,907],{},[403,888,889],{},"19",[403,891,892],{},"DC3",[403,894,895],{},"51",[403,897,285],{},[403,899,900],{},"83",[403,902,903],{},"S",[403,905,906],{},"115",[403,908,909],{},"s",[357,911,912,915,918,921,923,926,929,932],{},[403,913,914],{},"20",[403,916,917],{},"DC4",[403,919,920],{},"52",[403,922,507],{},[403,924,925],{},"84",[403,927,928],{},"T",[403,930,931],{},"116",[403,933,934],{},"t",[357,936,937,940,943,946,948,951,954,957],{},[403,938,939],{},"21",[403,941,942],{},"NAK",[403,944,945],{},"53",[403,947,533],{},[403,949,950],{},"85",[403,952,953],{},"U",[403,955,956],{},"117",[403,958,959],{},"u",[357,961,962,965,968,971,973,976,979,982],{},[403,963,964],{},"22",[403,966,967],{},"SYN",[403,969,970],{},"54",[403,972,558],{},[403,974,975],{},"86",[403,977,978],{},"V",[403,980,981],{},"118",[403,983,984],{},"v",[357,986,987,990,993,996,998,1001,1004,1007],{},[403,988,989],{},"23",[403,991,992],{},"TB",[403,994,995],{},"55",[403,997,583],{},[403,999,1000],{},"87",[403,1002,1003],{},"W",[403,1005,1006],{},"119",[403,1008,1009],{},"w",[357,1011,1012,1015,1018,1021,1023,1026,1029,1032],{},[403,1013,1014],{},"24",[403,1016,1017],{},"CAN",[403,1019,1020],{},"56",[403,1022,609],{},[403,1024,1025],{},"88",[403,1027,1028],{},"X",[403,1030,1031],{},"120",[403,1033,1034],{},"x",[357,1036,1037,1040,1043,1046,1048,1051,1054,1057],{},[403,1038,1039],{},"25",[403,1041,1042],{},"EM",[403,1044,1045],{},"57",[403,1047,634],{},[403,1049,1050],{},"89",[403,1052,1053],{},"Y",[403,1055,1056],{},"121",[403,1058,1059],{},"y",[357,1061,1062,1065,1068,1071,1074,1077,1080,1083],{},[403,1063,1064],{},"26",[403,1066,1067],{},"SUB",[403,1069,1070],{},"58",[403,1072,1073],{},":",[403,1075,1076],{},"90",[403,1078,1079],{},"Z",[403,1081,1082],{},"122",[403,1084,1085],{},"z",[357,1087,1088,1091,1094,1097,1099,1102,1105,1108],{},[403,1089,1090],{},"27",[403,1092,1093],{},"ESC",[403,1095,1096],{},"59",[403,1098,269],{},[403,1100,1101],{},"91",[403,1103,1104],{},"[",[403,1106,1107],{},"123",[403,1109,1110],{},"{",[357,1112,1113,1116,1119,1122,1125,1128,1130,1133],{},[403,1114,1115],{},"28",[403,1117,1118],{},"FS",[403,1120,1121],{},"60",[403,1123,1124],{},"\u003C",[403,1126,1127],{},"92",[403,1129,798],{},[403,1131,1132],{},"124",[403,1134,1135],{},"|",[357,1137,1138,1141,1144,1147,1149,1152,1155,1158],{},[403,1139,1140],{},"29",[403,1142,1143],{},"GS",[403,1145,1146],{},"61",[403,1148,259],{},[403,1150,1151],{},"93",[403,1153,1154],{},"]",[403,1156,1157],{},"125",[403,1159,1160],{},"}",[357,1162,1163,1166,1169,1172,1175,1178,1181,1184],{},[403,1164,1165],{},"30",[403,1167,1168],{},"RS",[403,1170,1171],{},"62",[403,1173,1174],{},">",[403,1176,1177],{},"94",[403,1179,1180],{},"^",[403,1182,1183],{},"126",[403,1185,1186],{},"`",[357,1188,1189,1192,1195,1198,1201,1204,1207,1210],{},[403,1190,1191],{},"31",[403,1193,1194],{},"US",[403,1196,1197],{},"63",[403,1199,1200],{},"?",[403,1202,1203],{},"95",[403,1205,1206],{},"_",[403,1208,1209],{},"127",[403,1211,1212],{},"DEL",[19,1214,1215,1216,1219],{},"ASCII 码大致由以下",[363,1217,1218],{},"两部分组","成：",[1221,1222,1223,1230],"ul",{},[160,1224,1225,1226,1229],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[363,1227,1228],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[160,1231,1232,1233,1236],{},"ASCII 打印字符：数字 ",[363,1234,1235],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[174,1238,1240],{"id":1239},"_134转义字符","1.3.4转义字符",[194,1242,1244],{"className":196,"code":1243,"language":198,"meta":27,"style":27},"\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",[200,1245,1246,1251,1267,1282,1288,1302,1308],{"__ignoreMap":27},[203,1247,1248],{"class":205,"line":206},[203,1249,1250],{"class":272},"\u002F\u002F换行符\n",[203,1252,1253,1256,1259,1262,1264],{"class":205,"line":124},[203,1254,1255],{"class":213},"cout ",[203,1257,1258],{"class":209},"\u003C\u003C",[203,1260,1261],{"class":318},"\"hello world\u002Fn\"",[203,1263,269],{"class":213},[203,1265,1266],{"class":272}," \u002F\u002F就等同于如下：\n",[203,1268,1270,1272,1274,1277,1279],{"class":205,"line":1269},3,[203,1271,1255],{"class":213},[203,1273,1258],{"class":209},[203,1275,1276],{"class":318},"\"hello world\"",[203,1278,1258],{"class":209},[203,1280,1281],{"class":213},"endl;\n",[203,1283,1285],{"class":205,"line":1284},4,[203,1286,1287],{"class":272},"\u002F\u002F反斜杠\n",[203,1289,1291,1293,1295,1298,1300],{"class":205,"line":1290},5,[203,1292,1255],{"class":213},[203,1294,1258],{"class":209},[203,1296,1297],{"class":318},"\"\u002F\u002F\"",[203,1299,1258],{"class":209},[203,1301,1281],{"class":213},[203,1303,1305],{"class":205,"line":1304},6,[203,1306,1307],{"class":272},"\u002F\u002F水平制表符\n",[203,1309,1311,1313,1315,1318,1321,1324,1326,1329],{"class":205,"line":1310},7,[203,1312,1255],{"class":213},[203,1314,1258],{"class":209},[203,1316,1317],{"class":318},"\"aaaa",[203,1319,1320],{"class":262},"\\t",[203,1322,1323],{"class":318},"helloworld\"",[203,1325,1258],{"class":209},[203,1327,1328],{"class":213},"endl;",[203,1330,1331],{"class":272}," \u002F\u002F输出窗口时有对齐效果\n",[174,1333,1335],{"id":1334},"_135字符串型","1.3.5字符串型",[19,1337,1338,1339,1341],{},"char 变量名",[203,1340],{},"=\"字符串值\"",[194,1343,1345],{"className":196,"code":1344,"language":198,"meta":27,"style":27},"\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",[200,1346,1347,1352,1357,1362,1367,1381,1394,1399,1405,1417],{"__ignoreMap":27},[203,1348,1349],{"class":205,"line":206},[203,1350,1351],{"class":272},"\u002F\u002Fc风格字符串\n",[203,1353,1354],{"class":205,"line":124},[203,1355,1356],{"class":272},"\u002F\u002F注意事项：\n",[203,1358,1359],{"class":205,"line":1269},[203,1360,1361],{"class":272},"\u002F\u002F1.char字符串名[]\n",[203,1363,1364],{"class":205,"line":1284},[203,1365,1366],{"class":272},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[203,1368,1369,1371,1374,1376,1378],{"class":205,"line":1290},[203,1370,310],{"class":209},[203,1372,1373],{"class":213}," str[]",[203,1375,259],{"class":209},[203,1377,1276],{"class":318},[203,1379,1380],{"class":213},";\n",[203,1382,1383,1385,1387,1390,1392],{"class":205,"line":1304},[203,1384,1255],{"class":213},[203,1386,1258],{"class":209},[203,1388,1389],{"class":213},"str",[203,1391,1258],{"class":209},[203,1393,1281],{"class":213},[203,1395,1396],{"class":205,"line":1310},[203,1397,1398],{"class":272},"\u002F\u002Fc++风格字符串\n",[203,1400,1402],{"class":205,"line":1401},8,[203,1403,1404],{"class":272},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[203,1406,1408,1411,1413,1415],{"class":205,"line":1407},9,[203,1409,1410],{"class":213},"string str2",[203,1412,259],{"class":209},[203,1414,1276],{"class":318},[203,1416,1380],{"class":213},[203,1418,1420,1422,1424,1427,1429],{"class":205,"line":1419},10,[203,1421,1255],{"class":213},[203,1423,1258],{"class":209},[203,1425,1426],{"class":213},"str2",[203,1428,1258],{"class":209},[203,1430,1281],{"class":213},[174,1432,1434],{"id":1433},"_136布尔类型bool","1.3.6布尔类型bool",[194,1436,1438],{"className":196,"code":1437,"language":198,"meta":27,"style":27},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[200,1439,1440,1455],{"__ignoreMap":27},[203,1441,1442,1445,1448,1450,1453],{"class":205,"line":206},[203,1443,1444],{"class":209},"bool",[203,1446,1447],{"class":213}," flag",[203,1449,259],{"class":209},[203,1451,1452],{"class":262},"true",[203,1454,1380],{"class":213},[203,1456,1457,1460,1463,1466,1468,1470],{"class":205,"line":124},[203,1458,1459],{"class":213},"cout",[203,1461,1462],{"class":209},"\u003C\u003Csizeof",[203,1464,1465],{"class":213},"(flag)",[203,1467,1258],{"class":209},[203,1469,1328],{"class":213},[203,1471,1472],{"class":272}," \u002F\u002F查看布尔占内存空间\n",[14,1474,1476],{"id":1475},"_14键盘输入cin","1.4键盘输入cin",[194,1478,1480],{"className":196,"code":1479,"language":198,"meta":27,"style":27},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[200,1481,1482,1495,1512,1523],{"__ignoreMap":27},[203,1483,1484,1486,1489,1491,1493],{"class":205,"line":206},[203,1485,217],{"class":209},[203,1487,1488],{"class":213}," a",[203,1490,259],{"class":209},[203,1492,405],{"class":262},[203,1494,1380],{"class":213},[203,1496,1497,1499,1501,1504,1506,1508,1510],{"class":205,"line":124},[203,1498,1459],{"class":213},[203,1500,1258],{"class":209},[203,1502,1503],{"class":318},"\"请给整型变量a赋值\"",[203,1505,1258],{"class":209},[203,1507,452],{"class":213},[203,1509,1258],{"class":209},[203,1511,1281],{"class":213},[203,1513,1514,1517,1520],{"class":205,"line":1269},[203,1515,1516],{"class":213},"cin ",[203,1518,1519],{"class":209},">>",[203,1521,1522],{"class":213}," a;\n",[203,1524,1525,1527,1529,1532,1535,1537,1539],{"class":205,"line":1284},[203,1526,1255],{"class":213},[203,1528,1258],{"class":209},[203,1530,1531],{"class":318}," \"整型变量a=\"",[203,1533,1534],{"class":209}," \u003C\u003C",[203,1536,452],{"class":213},[203,1538,1258],{"class":209},[203,1540,1281],{"class":213},[14,1542,1544],{"id":1543},"_15运算符","1.5运算符",[174,1546,1548],{"id":1547},"_151算术运算符","1.5.1算术运算符",[19,1550,1551,1554],{},[25,1552],{"alt":27,"src":1553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[157,1556,1557,1560,1563],{},[160,1558,1559],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[160,1561,1562],{},"两个小数不可以做取模运算",[160,1564,1565],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[174,1567,1569],{"id":1568},"_152赋值运算符","1.5.2赋值运算符",[19,1571,1572],{},[25,1573],{"alt":27,"src":1574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[174,1576,1578],{"id":1577},"_153比较运算符","1.5.3比较运算符",[19,1580,1581],{},[25,1582],{"alt":27,"src":1583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[174,1585,1587],{"id":1586},"_154逻辑运算符","1.5.4逻辑运算符",[19,1589,1590],{},[25,1591],{"alt":27,"src":1592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,1594,1596],{"id":1595},"_16程序流程结构","1.6程序流程结构",[174,1598,1600],{"id":1599},"_161选择结构","1.6.1选择结构",[157,1602,1603],{},[160,1604,1605],{},"if语句\n单行、多行、多条件if语句",[194,1607,1609],{"className":196,"code":1608,"language":198,"meta":27,"style":27},"\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",[200,1610,1611,1616,1631,1636,1650,1655,1660,1669,1682,1686,1699,1704,1710,1715,1729,1734,1740,1761,1766,1780,1785,1814,1819,1836,1841,1846,1851,1865,1870],{"__ignoreMap":27},[203,1612,1613],{"class":205,"line":206},[203,1614,1615],{"class":272},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[203,1617,1618,1621,1624,1626,1629],{"class":205,"line":124},[203,1619,1620],{"class":209},"if",[203,1622,1623],{"class":213},"(score",[203,1625,1174],{"class":209},[203,1627,1628],{"class":262},"600",[203,1630,220],{"class":213},[203,1632,1633],{"class":205,"line":1269},[203,1634,1635],{"class":213},"{\n",[203,1637,1638,1641,1643,1646,1648],{"class":205,"line":1284},[203,1639,1640],{"class":213},"    cout",[203,1642,1258],{"class":209},[203,1644,1645],{"class":318},"'这是单行if语句'",[203,1647,1258],{"class":209},[203,1649,1281],{"class":213},[203,1651,1652],{"class":205,"line":1290},[203,1653,1654],{"class":213},"}\n",[203,1656,1657],{"class":205,"line":1304},[203,1658,1659],{"class":272},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[203,1661,1662,1664,1666],{"class":205,"line":1310},[203,1663,1516],{"class":213},[203,1665,1519],{"class":209},[203,1667,1668],{"class":213}," score\n",[203,1670,1671,1673,1675,1678,1680],{"class":205,"line":1401},[203,1672,1620],{"class":209},[203,1674,1623],{"class":213},[203,1676,1677],{"class":209},"\u003C=",[203,1679,1628],{"class":262},[203,1681,220],{"class":213},[203,1683,1684],{"class":205,"line":1407},[203,1685,1635],{"class":213},[203,1687,1688,1690,1692,1695,1697],{"class":205,"line":1419},[203,1689,1640],{"class":213},[203,1691,1519],{"class":209},[203,1693,1694],{"class":318},"\"小于等于600\"",[203,1696,1258],{"class":209},[203,1698,1281],{"class":213},[203,1700,1702],{"class":205,"line":1701},11,[203,1703,1654],{"class":213},[203,1705,1707],{"class":205,"line":1706},12,[203,1708,1709],{"class":209},"else\n",[203,1711,1713],{"class":205,"line":1712},13,[203,1714,1635],{"class":213},[203,1716,1718,1720,1722,1725,1727],{"class":205,"line":1717},14,[203,1719,1640],{"class":213},[203,1721,1519],{"class":209},[203,1723,1724],{"class":318},"\"大于600\"",[203,1726,1519],{"class":209},[203,1728,1281],{"class":213},[203,1730,1732],{"class":205,"line":1731},15,[203,1733,1654],{"class":213},[203,1735,1737],{"class":205,"line":1736},16,[203,1738,1739],{"class":272},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[203,1741,1743,1745,1748,1750,1752,1755,1757,1759],{"class":205,"line":1742},17,[203,1744,1620],{"class":209},[203,1746,1747],{"class":213}," (",[203,1749,405],{"class":262},[203,1751,1124],{"class":209},[203,1753,1754],{"class":213},"num",[203,1756,1124],{"class":209},[203,1758,525],{"class":262},[203,1760,220],{"class":213},[203,1762,1764],{"class":205,"line":1763},18,[203,1765,1635],{"class":213},[203,1767,1769,1771,1773,1776,1778],{"class":205,"line":1768},19,[203,1770,1640],{"class":213},[203,1772,1258],{"class":209},[203,1774,1775],{"class":318},"\"小于100\"",[203,1777,1258],{"class":209},[203,1779,1281],{"class":213},[203,1781,1783],{"class":205,"line":1782},20,[203,1784,1654],{"class":213},[203,1786,1788,1791,1794,1797,1800,1802,1805,1807,1809,1812],{"class":205,"line":1787},21,[203,1789,1790],{"class":209},"else",[203,1792,1793],{"class":209}," if",[203,1795,1796],{"class":213}," (nmu",[203,1798,1799],{"class":209},">=",[203,1801,525],{"class":262},[203,1803,1804],{"class":209},"&&",[203,1806,1754],{"class":213},[203,1808,1124],{"class":209},[203,1810,1811],{"class":262},"200",[203,1813,220],{"class":213},[203,1815,1817],{"class":205,"line":1816},22,[203,1818,1635],{"class":213},[203,1820,1822,1824,1826,1829,1831,1833],{"class":205,"line":1821},23,[203,1823,1640],{"class":213},[203,1825,1258],{"class":209},[203,1827,1828],{"class":318},"\"不小于100且小于200\"",[203,1830,1258],{"class":209},[203,1832,1328],{"class":213},[203,1834,1835],{"class":272}," \u002F\u002F可以无限else if,python中是elif：\n",[203,1837,1839],{"class":205,"line":1838},24,[203,1840,1654],{"class":213},[203,1842,1844],{"class":205,"line":1843},25,[203,1845,1709],{"class":209},[203,1847,1849],{"class":205,"line":1848},26,[203,1850,1635],{"class":213},[203,1852,1854,1856,1858,1861,1863],{"class":205,"line":1853},27,[203,1855,1640],{"class":213},[203,1857,1258],{"class":209},[203,1859,1860],{"class":318},"\"不小于200\"",[203,1862,1258],{"class":209},[203,1864,1281],{"class":213},[203,1866,1868],{"class":205,"line":1867},28,[203,1869,1654],{"class":213},[203,1871,1873],{"class":205,"line":1872},29,[203,1874,1875],{"class":272},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[157,1877,1878],{"start":124},[160,1879,1880],{},"三目运算符",[194,1882,1884],{"className":196,"code":1883,"language":198,"meta":27,"style":27},"\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",[200,1885,1886,1891,1896,1922,1944,1961,1966,1989,2004],{"__ignoreMap":27},[203,1887,1888],{"class":205,"line":206},[203,1889,1890],{"class":272},"\u002F\u002F创建三个变量a,b,c\n",[203,1892,1893],{"class":205,"line":124},[203,1894,1895],{"class":272},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[203,1897,1898,1900,1902,1904,1906,1909,1911,1913,1916,1918,1920],{"class":205,"line":1269},[203,1899,217],{"class":209},[203,1901,1488],{"class":213},[203,1903,259],{"class":209},[203,1905,914],{"class":262},[203,1907,1908],{"class":213},",b",[203,1910,259],{"class":209},[203,1912,660],{"class":262},[203,1914,1915],{"class":213},",c",[203,1917,259],{"class":209},[203,1919,405],{"class":262},[203,1921,1380],{"class":213},[203,1923,1924,1926,1928,1931,1933,1935,1937,1939,1941],{"class":205,"line":1284},[203,1925,502],{"class":213},[203,1927,259],{"class":209},[203,1929,1930],{"class":213},"(a",[203,1932,1174],{"class":209},[203,1934,477],{"class":213},[203,1936,1200],{"class":209},[203,1938,452],{"class":213},[203,1940,1073],{"class":209},[203,1942,1943],{"class":213},"b)\n",[203,1945,1946,1948,1950,1953,1955,1957,1959],{"class":205,"line":1290},[203,1947,1459],{"class":213},[203,1949,1258],{"class":209},[203,1951,1952],{"class":318},"\"c=\"",[203,1954,1258],{"class":209},[203,1956,502],{"class":213},[203,1958,1258],{"class":209},[203,1960,1281],{"class":213},[203,1962,1963],{"class":205,"line":1304},[203,1964,1965],{"class":272},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[203,1967,1968,1970,1972,1974,1976,1978,1980,1983,1985,1987],{"class":205,"line":1310},[203,1969,1930],{"class":213},[203,1971,1174],{"class":209},[203,1973,477],{"class":213},[203,1975,1200],{"class":209},[203,1977,452],{"class":213},[203,1979,1073],{"class":209},[203,1981,1982],{"class":213},"b)",[203,1984,259],{"class":209},[203,1986,525],{"class":262},[203,1988,1380],{"class":213},[203,1990,1991,1993,1995,1997,1999,2001],{"class":205,"line":1401},[203,1992,1459],{"class":213},[203,1994,1258],{"class":209},[203,1996,452],{"class":213},[203,1998,1258],{"class":209},[203,2000,1328],{"class":213},[203,2002,2003],{"class":272}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[203,2005,2006,2008,2010,2012,2014,2016],{"class":205,"line":1407},[203,2007,1459],{"class":213},[203,2009,1258],{"class":209},[203,2011,477],{"class":213},[203,2013,1258],{"class":209},[203,2015,1328],{"class":213},[203,2017,2018],{"class":272}," \u002F\u002F10   a>b,b还是原值\n",[157,2020,2021],{"start":1269},[160,2022,2023],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[194,2025,2027],{"className":196,"code":2026,"language":198,"meta":27,"style":27},"\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",[200,2028,2029,2034,2042,2056,2066,2070,2084,2097,2107,2115,2120,2145,2166,2188,2209,2231,2252,2272,2277],{"__ignoreMap":27},[203,2030,2031],{"class":205,"line":206},[203,2032,2033],{"class":272},"\u002F\u002F案例-电影打分\n",[203,2035,2036,2039],{"class":205,"line":124},[203,2037,2038],{"class":209},"#include",[203,2040,2041],{"class":318},"\u003Ciostream>\n",[203,2043,2044,2047,2050,2054],{"class":205,"line":1269},[203,2045,2046],{"class":209},"using",[203,2048,2049],{"class":209}," namespace",[203,2051,2053],{"class":2052},"sScJk"," std",[203,2055,1380],{"class":213},[203,2057,2058,2060,2063],{"class":205,"line":1284},[203,2059,217],{"class":209},[203,2061,2062],{"class":2052}," main",[203,2064,2065],{"class":213},"()\n",[203,2067,2068],{"class":205,"line":1290},[203,2069,1635],{"class":213},[203,2071,2072,2075,2078,2080,2082],{"class":205,"line":1304},[203,2073,2074],{"class":209},"    int",[203,2076,2077],{"class":213}," score",[203,2079,259],{"class":209},[203,2081,405],{"class":262},[203,2083,1380],{"class":213},[203,2085,2086,2088,2090,2093,2095],{"class":205,"line":1310},[203,2087,1640],{"class":213},[203,2089,1258],{"class":209},[203,2091,2092],{"class":318},"\"电影打分：\"",[203,2094,1258],{"class":209},[203,2096,1281],{"class":213},[203,2098,2099,2102,2104],{"class":205,"line":1401},[203,2100,2101],{"class":213},"    cin",[203,2103,1519],{"class":209},[203,2105,2106],{"class":213},"score;\n",[203,2108,2109,2112],{"class":205,"line":1407},[203,2110,2111],{"class":209},"    switch",[203,2113,2114],{"class":213},"(score)\n",[203,2116,2117],{"class":205,"line":1419},[203,2118,2119],{"class":213},"    {\n",[203,2121,2122,2125,2128,2131,2133,2136,2138,2140,2143],{"class":205,"line":1701},[203,2123,2124],{"class":209},"        case",[203,2126,2127],{"class":262}," 10",[203,2129,2130],{"class":213},":cout",[203,2132,1258],{"class":209},[203,2134,2135],{"class":318},"\"经典\"",[203,2137,1258],{"class":209},[203,2139,1328],{"class":213},[203,2141,2142],{"class":209},"break",[203,2144,1380],{"class":213},[203,2146,2147,2149,2152,2154,2156,2158,2160,2162,2164],{"class":205,"line":1706},[203,2148,2124],{"class":209},[203,2150,2151],{"class":262}," 9",[203,2153,2130],{"class":213},[203,2155,1258],{"class":209},[203,2157,2135],{"class":318},[203,2159,1258],{"class":209},[203,2161,1328],{"class":213},[203,2163,2142],{"class":209},[203,2165,1380],{"class":213},[203,2167,2168,2170,2173,2175,2177,2180,2182,2184,2186],{"class":205,"line":1712},[203,2169,2124],{"class":209},[203,2171,2172],{"class":262}," 8",[203,2174,2130],{"class":213},[203,2176,1258],{"class":209},[203,2178,2179],{"class":318},"\"非常好\"",[203,2181,1258],{"class":209},[203,2183,1328],{"class":213},[203,2185,2142],{"class":209},[203,2187,1380],{"class":213},[203,2189,2190,2192,2195,2197,2199,2201,2203,2205,2207],{"class":205,"line":1717},[203,2191,2124],{"class":209},[203,2193,2194],{"class":262}," 7",[203,2196,2130],{"class":213},[203,2198,1258],{"class":209},[203,2200,2179],{"class":318},[203,2202,1258],{"class":209},[203,2204,1328],{"class":213},[203,2206,2142],{"class":209},[203,2208,1380],{"class":213},[203,2210,2211,2213,2216,2218,2220,2223,2225,2227,2229],{"class":205,"line":1731},[203,2212,2124],{"class":209},[203,2214,2215],{"class":262}," 6",[203,2217,2130],{"class":213},[203,2219,1258],{"class":209},[203,2221,2222],{"class":318},"\"一般\"",[203,2224,1258],{"class":209},[203,2226,1328],{"class":213},[203,2228,2142],{"class":209},[203,2230,1380],{"class":213},[203,2232,2233,2235,2238,2240,2242,2244,2246,2248,2250],{"class":205,"line":1736},[203,2234,2124],{"class":209},[203,2236,2237],{"class":262}," 5",[203,2239,2130],{"class":213},[203,2241,1258],{"class":209},[203,2243,2222],{"class":318},[203,2245,1258],{"class":209},[203,2247,1328],{"class":213},[203,2249,2142],{"class":209},[203,2251,1380],{"class":213},[203,2253,2254,2257,2259,2261,2264,2266,2268,2270],{"class":205,"line":1742},[203,2255,2256],{"class":209},"        default",[203,2258,2130],{"class":213},[203,2260,1258],{"class":209},[203,2262,2263],{"class":318},"\"烂片\"",[203,2265,1258],{"class":209},[203,2267,1328],{"class":213},[203,2269,2142],{"class":209},[203,2271,1380],{"class":213},[203,2273,2274],{"class":205,"line":1763},[203,2275,2276],{"class":213},"    }\n",[203,2278,2279],{"class":205,"line":1768},[203,2280,1654],{"class":213},[19,2282,2283],{},"if和switch区别：",[1221,2285,2286,2289],{},[160,2287,2288],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[160,2290,2291],{},"switch优点：结构清晰，执行效率高",[174,2293,2295],{"id":2294},"_162循环结构","1.6.2循环结构",[157,2297,2298],{},[160,2299,2300],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[194,2302,2304],{"className":196,"code":2303,"language":198,"meta":27,"style":27},"\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",[200,2305,2306,2311,2319,2323,2336,2350,2354,2374,2384,2388,2400],{"__ignoreMap":27},[203,2307,2308],{"class":205,"line":206},[203,2309,2310],{"class":272},"\u002F\u002F打印0-9数字\n",[203,2312,2313,2315,2317],{"class":205,"line":124},[203,2314,217],{"class":209},[203,2316,2062],{"class":2052},[203,2318,2065],{"class":213},[203,2320,2321],{"class":205,"line":1269},[203,2322,1635],{"class":213},[203,2324,2325,2327,2330,2332,2334],{"class":205,"line":1284},[203,2326,2074],{"class":209},[203,2328,2329],{"class":213}," num",[203,2331,259],{"class":209},[203,2333,405],{"class":262},[203,2335,1380],{"class":213},[203,2337,2338,2341,2344,2346,2348],{"class":205,"line":1290},[203,2339,2340],{"class":209},"    while",[203,2342,2343],{"class":213},"(num",[203,2345,1124],{"class":209},[203,2347,660],{"class":262},[203,2349,220],{"class":213},[203,2351,2352],{"class":205,"line":1304},[203,2353,2119],{"class":213},[203,2355,2356,2359,2362,2364,2366,2368,2371],{"class":205,"line":1310},[203,2357,2358],{"class":2052},"       std",[203,2360,2361],{"class":213},"::cout",[203,2363,1258],{"class":209},[203,2365,1754],{"class":213},[203,2367,1258],{"class":209},[203,2369,2370],{"class":2052},"std",[203,2372,2373],{"class":213},"::endl;\n",[203,2375,2376,2379,2382],{"class":205,"line":1401},[203,2377,2378],{"class":213},"        num",[203,2380,2381],{"class":209},"++",[203,2383,1380],{"class":213},[203,2385,2386],{"class":205,"line":1407},[203,2387,2276],{"class":213},[203,2389,2390,2393,2395,2398],{"class":205,"line":1419},[203,2391,2392],{"class":2052},"    system",[203,2394,214],{"class":213},[203,2396,2397],{"class":318},"\"pause\"",[203,2399,220],{"class":213},[203,2401,2402],{"class":205,"line":1701},[203,2403,1654],{"class":213},[19,2405,2406],{},"注意：写好循环条件，避免死循环情况",[194,2408,2410],{"className":196,"code":2409,"language":198,"meta":27,"style":27},"\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",[200,2411,2412,2417,2424,2431,2441,2449,2453,2458,2485,2490,2495,2503,2530,2535,2540,2553,2563,2567,2577,2582,2595,2600,2614,2619,2634,2638,2651,2655,2660,2664,2678,2686,2691,2697,2703,2708],{"__ignoreMap":27},[203,2413,2414],{"class":205,"line":206},[203,2415,2416],{"class":272},"\u002F\u002F循环结构-猜数字\n",[203,2418,2419,2421],{"class":205,"line":124},[203,2420,2038],{"class":209},[203,2422,2423],{"class":318}," \u003Ciostream>\n",[203,2425,2426,2428],{"class":205,"line":1269},[203,2427,2038],{"class":209},[203,2429,2430],{"class":318}," \u003Cctime>\n",[203,2432,2433,2435,2437,2439],{"class":205,"line":1284},[203,2434,2046],{"class":209},[203,2436,2049],{"class":209},[203,2438,2053],{"class":2052},[203,2440,1380],{"class":213},[203,2442,2443,2445,2447],{"class":205,"line":1290},[203,2444,217],{"class":209},[203,2446,2062],{"class":2052},[203,2448,2065],{"class":213},[203,2450,2451],{"class":205,"line":1304},[203,2452,1635],{"class":213},[203,2454,2455],{"class":205,"line":1310},[203,2456,2457],{"class":272},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[203,2459,2460,2463,2466,2469,2472,2474,2477,2479,2482],{"class":205,"line":1401},[203,2461,2462],{"class":2052},"    srand",[203,2464,2465],{"class":213},"((",[203,2467,2468],{"class":209},"unsigned",[203,2470,2471],{"class":209}," int",[203,2473,643],{"class":213},[203,2475,2476],{"class":2052},"time",[203,2478,214],{"class":213},[203,2480,2481],{"class":262},"NULL",[203,2483,2484],{"class":213},"));\n",[203,2486,2487],{"class":205,"line":1407},[203,2488,2489],{"emptyLinePlaceholder":131},"\n",[203,2491,2492],{"class":205,"line":1419},[203,2493,2494],{"class":272},"    \u002F\u002F1.系统生成随机数\n",[203,2496,2497,2500],{"class":205,"line":1701},[203,2498,2499],{"class":272},"    \u002F\u002Frand()%100",[203,2501,2502],{"class":272}," \u002F\u002F生成0-99的随机数\n",[203,2504,2505,2507,2509,2511,2514,2517,2519,2521,2523,2525,2527],{"class":205,"line":1706},[203,2506,2074],{"class":209},[203,2508,2329],{"class":213},[203,2510,259],{"class":209},[203,2512,2513],{"class":2052},"rand",[203,2515,2516],{"class":213},"()",[203,2518,542],{"class":209},[203,2520,525],{"class":262},[203,2522,695],{"class":209},[203,2524,431],{"class":262},[203,2526,269],{"class":213},[203,2528,2529],{"class":272}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[203,2531,2532],{"class":205,"line":1712},[203,2533,2534],{"class":272},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[203,2536,2537],{"class":205,"line":1717},[203,2538,2539],{"class":272},"    \u002F\u002F2.玩家猜测\n",[203,2541,2542,2544,2547,2549,2551],{"class":205,"line":1731},[203,2543,2074],{"class":209},[203,2545,2546],{"class":213}," val",[203,2548,259],{"class":209},[203,2550,405],{"class":262},[203,2552,1380],{"class":213},[203,2554,2555,2557,2559,2561],{"class":205,"line":1736},[203,2556,2340],{"class":209},[203,2558,1747],{"class":213},[203,2560,431],{"class":262},[203,2562,220],{"class":213},[203,2564,2565],{"class":205,"line":1742},[203,2566,2119],{"class":213},[203,2568,2569,2572,2574],{"class":205,"line":1763},[203,2570,2571],{"class":213},"        cin",[203,2573,1519],{"class":209},[203,2575,2576],{"class":213},"val;\n",[203,2578,2579],{"class":205,"line":1768},[203,2580,2581],{"class":272},"        \u002F\u002F3.判断玩家猜测\n",[203,2583,2584,2587,2590,2592],{"class":205,"line":1782},[203,2585,2586],{"class":209},"        if",[203,2588,2589],{"class":213},"(val",[203,2591,1124],{"class":209},[203,2593,2594],{"class":213},"num) \n",[203,2596,2597],{"class":205,"line":1787},[203,2598,2599],{"class":213},"        {\n",[203,2601,2602,2605,2607,2610,2612],{"class":205,"line":1816},[203,2603,2604],{"class":213},"            cout",[203,2606,1258],{"class":209},[203,2608,2609],{"class":318},"\"猜小了！\"",[203,2611,1258],{"class":209},[203,2613,1281],{"class":213},[203,2615,2616],{"class":205,"line":1821},[203,2617,2618],{"class":213},"        }\n",[203,2620,2621,2624,2626,2629,2631],{"class":205,"line":1838},[203,2622,2623],{"class":209},"        else",[203,2625,1793],{"class":209},[203,2627,2628],{"class":213}," (val",[203,2630,1174],{"class":209},[203,2632,2633],{"class":213},"num)\n",[203,2635,2636],{"class":205,"line":1843},[203,2637,2599],{"class":213},[203,2639,2640,2642,2644,2647,2649],{"class":205,"line":1848},[203,2641,2604],{"class":213},[203,2643,1258],{"class":209},[203,2645,2646],{"class":318},"\"猜大了！\"",[203,2648,1258],{"class":209},[203,2650,1281],{"class":213},[203,2652,2653],{"class":205,"line":1853},[203,2654,2618],{"class":213},[203,2656,2657],{"class":205,"line":1867},[203,2658,2659],{"class":209},"        else\n",[203,2661,2662],{"class":205,"line":1872},[203,2663,2599],{"class":213},[203,2665,2667,2669,2671,2674,2676],{"class":205,"line":2666},30,[203,2668,2604],{"class":213},[203,2670,1258],{"class":209},[203,2672,2673],{"class":318},"\"猜对了！\"",[203,2675,1258],{"class":209},[203,2677,1281],{"class":213},[203,2679,2681,2684],{"class":205,"line":2680},31,[203,2682,2683],{"class":209},"            break",[203,2685,1380],{"class":213},[203,2687,2689],{"class":205,"line":2688},32,[203,2690,2618],{"class":213},[203,2692,2694],{"class":205,"line":2693},33,[203,2695,2696],{"class":272},"        \u002F\u002F猜对 退出游戏\n",[203,2698,2700],{"class":205,"line":2699},34,[203,2701,2702],{"class":272},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[203,2704,2706],{"class":205,"line":2705},35,[203,2707,2276],{"class":213},[203,2709,2711],{"class":205,"line":2710},36,[203,2712,1654],{"class":213},[157,2714,2715],{"start":124},[160,2716,2717,2718,2721],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[363,2719,2720],{},"do...while会先执行一次循环语句","，在判断循环语句",[194,2723,2725],{"className":196,"code":2724,"language":198,"meta":27,"style":27},"\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",[200,2726,2727,2732,2740,2744,2756,2764,2768,2785,2792,2796,2809,2819],{"__ignoreMap":27},[203,2728,2729],{"class":205,"line":206},[203,2730,2731],{"class":272},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[203,2733,2734,2736,2738],{"class":205,"line":124},[203,2735,217],{"class":209},[203,2737,2062],{"class":2052},[203,2739,2065],{"class":213},[203,2741,2742],{"class":205,"line":1269},[203,2743,1635],{"class":213},[203,2745,2746,2748,2750,2752,2754],{"class":205,"line":1284},[203,2747,2074],{"class":209},[203,2749,2329],{"class":213},[203,2751,259],{"class":209},[203,2753,405],{"class":262},[203,2755,1380],{"class":213},[203,2757,2758,2761],{"class":205,"line":1290},[203,2759,2760],{"class":209},"    do",[203,2762,2763],{"class":213}," \n",[203,2765,2766],{"class":205,"line":1304},[203,2767,2119],{"class":213},[203,2769,2770,2773,2775,2777,2779,2781,2783],{"class":205,"line":1310},[203,2771,2772],{"class":2052},"        std",[203,2774,2361],{"class":213},[203,2776,1258],{"class":209},[203,2778,1754],{"class":213},[203,2780,1258],{"class":209},[203,2782,2370],{"class":2052},[203,2784,2373],{"class":213},[203,2786,2787,2789],{"class":205,"line":1401},[203,2788,2378],{"class":213},[203,2790,2791],{"class":209},"++\n",[203,2793,2794],{"class":205,"line":1407},[203,2795,2276],{"class":213},[203,2797,2798,2800,2802,2804,2806],{"class":205,"line":1419},[203,2799,2340],{"class":209},[203,2801,2343],{"class":213},[203,2803,1124],{"class":209},[203,2805,660],{"class":262},[203,2807,2808],{"class":213},");\n",[203,2810,2811,2813,2815,2817],{"class":205,"line":1701},[203,2812,2392],{"class":2052},[203,2814,214],{"class":213},[203,2816,2397],{"class":318},[203,2818,2808],{"class":213},[203,2820,2821],{"class":205,"line":1706},[203,2822,1654],{"class":213},[19,2824,2825],{},"案例-水仙花数",[19,2827,2828],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,2830,2831],{},"例如：1^3+5^3+3^3=153",[19,2833,2834],{},"请用do...while语句，求出所有3位数的水仙花数",[194,2836,2838],{"className":196,"code":2837,"language":198,"meta":27,"style":27},"#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",[200,2839,2840,2846,2856,2864,2868,2873,2885,2891,2895,2900,2916,2932,2948,2963,2982,2997,3045,3049,3061,3065,3073,3077,3091],{"__ignoreMap":27},[203,2841,2842,2844],{"class":205,"line":206},[203,2843,2038],{"class":209},[203,2845,2423],{"class":318},[203,2847,2848,2850,2852,2854],{"class":205,"line":124},[203,2849,2046],{"class":209},[203,2851,2049],{"class":209},[203,2853,2053],{"class":2052},[203,2855,1380],{"class":213},[203,2857,2858,2860,2862],{"class":205,"line":1269},[203,2859,217],{"class":209},[203,2861,2062],{"class":2052},[203,2863,2065],{"class":213},[203,2865,2866],{"class":205,"line":1284},[203,2867,1635],{"class":213},[203,2869,2870],{"class":205,"line":1290},[203,2871,2872],{"class":272},"    \u002F\u002F1.先打印所有三位数字\n",[203,2874,2875,2877,2879,2881,2883],{"class":205,"line":1304},[203,2876,2074],{"class":209},[203,2878,2329],{"class":213},[203,2880,259],{"class":209},[203,2882,525],{"class":262},[203,2884,1380],{"class":213},[203,2886,2887,2889],{"class":205,"line":1310},[203,2888,2760],{"class":209},[203,2890,2763],{"class":213},[203,2892,2893],{"class":205,"line":1401},[203,2894,2119],{"class":213},[203,2896,2897],{"class":205,"line":1407},[203,2898,2899],{"class":272},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[203,2901,2902,2905,2907,2909,2911,2913],{"class":205,"line":1419},[203,2903,2904],{"class":209},"        int",[203,2906,1488],{"class":213},[203,2908,259],{"class":209},[203,2910,405],{"class":262},[203,2912,269],{"class":213},[203,2914,2915],{"class":272}," \u002F\u002F个位\n",[203,2917,2918,2920,2923,2925,2927,2929],{"class":205,"line":1701},[203,2919,2904],{"class":209},[203,2921,2922],{"class":213}," b",[203,2924,259],{"class":209},[203,2926,405],{"class":262},[203,2928,269],{"class":213},[203,2930,2931],{"class":272}," \u002F\u002F十位\n",[203,2933,2934,2936,2939,2941,2943,2945],{"class":205,"line":1706},[203,2935,2904],{"class":209},[203,2937,2938],{"class":213}," c",[203,2940,259],{"class":209},[203,2942,405],{"class":262},[203,2944,269],{"class":213},[203,2946,2947],{"class":272}," \u002F\u002F百位\n",[203,2949,2950,2953,2955,2957,2959,2961],{"class":205,"line":1712},[203,2951,2952],{"class":213},"        a",[203,2954,259],{"class":209},[203,2956,1754],{"class":213},[203,2958,542],{"class":209},[203,2960,660],{"class":262},[203,2962,1380],{"class":213},[203,2964,2965,2968,2970,2972,2974,2976,2978,2980],{"class":205,"line":1717},[203,2966,2967],{"class":213},"        b",[203,2969,259],{"class":209},[203,2971,1754],{"class":213},[203,2973,798],{"class":209},[203,2975,660],{"class":262},[203,2977,542],{"class":209},[203,2979,660],{"class":262},[203,2981,1380],{"class":213},[203,2983,2984,2987,2989,2991,2993,2995],{"class":205,"line":1731},[203,2985,2986],{"class":213},"        c",[203,2988,259],{"class":209},[203,2990,1754],{"class":213},[203,2992,798],{"class":209},[203,2994,525],{"class":262},[203,2996,1380],{"class":213},[203,2998,2999,3001,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3036,3039,3042],{"class":205,"line":1736},[203,3000,2586],{"class":209},[203,3002,1930],{"class":213},[203,3004,669],{"class":209},[203,3006,452],{"class":213},[203,3008,669],{"class":209},[203,3010,452],{"class":213},[203,3012,695],{"class":209},[203,3014,477],{"class":213},[203,3016,669],{"class":209},[203,3018,477],{"class":213},[203,3020,669],{"class":209},[203,3022,477],{"class":213},[203,3024,695],{"class":209},[203,3026,502],{"class":213},[203,3028,669],{"class":209},[203,3030,502],{"class":213},[203,3032,669],{"class":209},[203,3034,3035],{"class":213},"c ",[203,3037,3038],{"class":209},"==",[203,3040,3041],{"class":213}," num)",[203,3043,3044],{"class":272}," \u002F\u002F如果是水仙花数，才打印\n",[203,3046,3047],{"class":205,"line":1742},[203,3048,2599],{"class":213},[203,3050,3051,3053,3055,3057,3059],{"class":205,"line":1763},[203,3052,2604],{"class":213},[203,3054,1258],{"class":209},[203,3056,1754],{"class":213},[203,3058,1258],{"class":209},[203,3060,1281],{"class":213},[203,3062,3063],{"class":205,"line":1768},[203,3064,2618],{"class":213},[203,3066,3067,3069,3071],{"class":205,"line":1782},[203,3068,2378],{"class":213},[203,3070,2381],{"class":209},[203,3072,1380],{"class":213},[203,3074,3075],{"class":205,"line":1787},[203,3076,2276],{"class":213},[203,3078,3079,3081,3084,3086,3089],{"class":205,"line":1816},[203,3080,2340],{"class":209},[203,3082,3083],{"class":213}," (num ",[203,3085,1124],{"class":209},[203,3087,3088],{"class":262}," 1000",[203,3090,2808],{"class":213},[203,3092,3093],{"class":205,"line":1821},[203,3094,1654],{"class":213},[157,3096,3097],{"start":1269},[160,3098,3099],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[194,3101,3103],{"className":196,"code":3102,"language":198,"meta":27,"style":27},"\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",[200,3104,3105,3110,3139,3143,3155,3159,3164,3175,3182,3186,3200,3204,3211,3215,3227,3236],{"__ignoreMap":27},[203,3106,3107],{"class":205,"line":206},[203,3108,3109],{"class":272},"\u002F\u002F从数字0-9打印\n",[203,3111,3112,3115,3117,3119,3122,3124,3126,3129,3131,3133,3135,3137],{"class":205,"line":124},[203,3113,3114],{"class":209},"for",[203,3116,214],{"class":213},[203,3118,217],{"class":209},[203,3120,3121],{"class":213}," i",[203,3123,259],{"class":209},[203,3125,405],{"class":262},[203,3127,3128],{"class":213},";i",[203,3130,1124],{"class":209},[203,3132,660],{"class":262},[203,3134,3128],{"class":213},[203,3136,2381],{"class":209},[203,3138,220],{"class":213},[203,3140,3141],{"class":205,"line":1269},[203,3142,1635],{"class":213},[203,3144,3145,3147,3149,3151,3153],{"class":205,"line":1284},[203,3146,1640],{"class":213},[203,3148,1258],{"class":209},[203,3150,655],{"class":213},[203,3152,1258],{"class":209},[203,3154,1281],{"class":213},[203,3156,3157],{"class":205,"line":1290},[203,3158,1654],{"class":213},[203,3160,3161],{"class":205,"line":1304},[203,3162,3163],{"class":272},"\u002F\u002F上式可以进行拆分\n",[203,3165,3166,3168,3170,3172],{"class":205,"line":1310},[203,3167,217],{"class":209},[203,3169,3121],{"class":213},[203,3171,259],{"class":209},[203,3173,3174],{"class":262},"0\n",[203,3176,3177,3179],{"class":205,"line":1401},[203,3178,3114],{"class":209},[203,3180,3181],{"class":213},"(;;;)\n",[203,3183,3184],{"class":205,"line":1407},[203,3185,1635],{"class":213},[203,3187,3188,3191,3194,3196,3198],{"class":205,"line":1419},[203,3189,3190],{"class":209},"    if",[203,3192,3193],{"class":213},"(i",[203,3195,1799],{"class":209},[203,3197,660],{"class":262},[203,3199,220],{"class":213},[203,3201,3202],{"class":205,"line":1701},[203,3203,2119],{"class":213},[203,3205,3206,3209],{"class":205,"line":1706},[203,3207,3208],{"class":209},"        break",[203,3210,1380],{"class":213},[203,3212,3213],{"class":205,"line":1712},[203,3214,2276],{"class":213},[203,3216,3217,3219,3221,3223,3225],{"class":205,"line":1717},[203,3218,1640],{"class":213},[203,3220,1258],{"class":209},[203,3222,655],{"class":213},[203,3224,1258],{"class":209},[203,3226,1281],{"class":213},[203,3228,3229,3232,3234],{"class":205,"line":1731},[203,3230,3231],{"class":213},"    i",[203,3233,2381],{"class":209},[203,3235,1380],{"class":213},[203,3237,3238],{"class":205,"line":1736},[203,3239,1654],{"class":213},[19,3241,3242],{},"小练习",[194,3244,3246],{"className":196,"code":3245,"language":198,"meta":27,"style":27},"#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",[200,3247,3248,3254,3264,3272,3276,3281,3286,3314,3318,3323,3328,3369,3373,3386,3390,3394,3398,3410,3414,3418],{"__ignoreMap":27},[203,3249,3250,3252],{"class":205,"line":206},[203,3251,2038],{"class":209},[203,3253,2041],{"class":318},[203,3255,3256,3258,3260,3262],{"class":205,"line":124},[203,3257,2046],{"class":209},[203,3259,2049],{"class":209},[203,3261,2053],{"class":2052},[203,3263,1380],{"class":213},[203,3265,3266,3268,3270],{"class":205,"line":1269},[203,3267,217],{"class":209},[203,3269,2062],{"class":2052},[203,3271,2065],{"class":213},[203,3273,3274],{"class":205,"line":1284},[203,3275,1635],{"class":213},[203,3277,3278],{"class":205,"line":1290},[203,3279,3280],{"class":272},"    \u002F\u002F敲桌子案例\n",[203,3282,3283],{"class":205,"line":1304},[203,3284,3285],{"class":272},"    \u002F\u002F1.先输出1-100的数字\n",[203,3287,3288,3291,3293,3295,3297,3299,3301,3304,3306,3308,3310,3312],{"class":205,"line":1310},[203,3289,3290],{"class":209},"    for",[203,3292,214],{"class":213},[203,3294,217],{"class":209},[203,3296,3121],{"class":213},[203,3298,259],{"class":209},[203,3300,431],{"class":262},[203,3302,3303],{"class":213},"; i",[203,3305,1677],{"class":209},[203,3307,525],{"class":262},[203,3309,3303],{"class":213},[203,3311,2381],{"class":209},[203,3313,220],{"class":213},[203,3315,3316],{"class":205,"line":1401},[203,3317,2119],{"class":213},[203,3319,3320],{"class":205,"line":1407},[203,3321,3322],{"class":272},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[203,3324,3325],{"class":205,"line":1419},[203,3326,3327],{"class":272},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[203,3329,3330,3332,3334,3336,3338,3340,3342,3345,3347,3349,3351,3353,3355,3357,3359,3361,3363,3365,3367],{"class":205,"line":1701},[203,3331,2586],{"class":209},[203,3333,3193],{"class":213},[203,3335,542],{"class":209},[203,3337,583],{"class":262},[203,3339,3038],{"class":209},[203,3341,405],{"class":262},[203,3343,3344],{"class":209}," ||",[203,3346,3121],{"class":213},[203,3348,542],{"class":209},[203,3350,660],{"class":262},[203,3352,3038],{"class":209},[203,3354,583],{"class":262},[203,3356,3344],{"class":209},[203,3358,3121],{"class":213},[203,3360,798],{"class":209},[203,3362,660],{"class":262},[203,3364,3038],{"class":209},[203,3366,583],{"class":262},[203,3368,220],{"class":213},[203,3370,3371],{"class":205,"line":1706},[203,3372,2599],{"class":213},[203,3374,3375,3377,3379,3382,3384],{"class":205,"line":1712},[203,3376,2604],{"class":213},[203,3378,1258],{"class":209},[203,3380,3381],{"class":318},"\"敲桌子\"",[203,3383,1258],{"class":209},[203,3385,1281],{"class":213},[203,3387,3388],{"class":205,"line":1717},[203,3389,2618],{"class":213},[203,3391,3392],{"class":205,"line":1731},[203,3393,2659],{"class":209},[203,3395,3396],{"class":205,"line":1736},[203,3397,2599],{"class":213},[203,3399,3400,3402,3404,3406,3408],{"class":205,"line":1742},[203,3401,2604],{"class":213},[203,3403,1258],{"class":209},[203,3405,655],{"class":213},[203,3407,1258],{"class":209},[203,3409,1281],{"class":213},[203,3411,3412],{"class":205,"line":1763},[203,3413,2618],{"class":213},[203,3415,3416],{"class":205,"line":1768},[203,3417,2276],{"class":213},[203,3419,3420],{"class":205,"line":1782},[203,3421,1654],{"class":213},[19,3423,3424],{},"嵌套实现星图",[194,3426,3428],{"className":196,"code":3427,"language":198,"meta":27,"style":27},"#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",[200,3429,3430,3436,3446,3454,3458,3484,3488,3517,3521,3532,3536,3545,3549],{"__ignoreMap":27},[203,3431,3432,3434],{"class":205,"line":206},[203,3433,2038],{"class":209},[203,3435,2041],{"class":318},[203,3437,3438,3440,3442,3444],{"class":205,"line":124},[203,3439,2046],{"class":209},[203,3441,2049],{"class":209},[203,3443,2053],{"class":2052},[203,3445,1380],{"class":213},[203,3447,3448,3450,3452],{"class":205,"line":1269},[203,3449,217],{"class":209},[203,3451,2062],{"class":2052},[203,3453,2065],{"class":213},[203,3455,3456],{"class":205,"line":1284},[203,3457,1635],{"class":213},[203,3459,3460,3462,3464,3466,3468,3470,3472,3474,3476,3478,3480,3482],{"class":205,"line":1290},[203,3461,3290],{"class":209},[203,3463,1747],{"class":213},[203,3465,217],{"class":209},[203,3467,3121],{"class":213},[203,3469,259],{"class":209},[203,3471,405],{"class":262},[203,3473,3128],{"class":213},[203,3475,1124],{"class":209},[203,3477,660],{"class":262},[203,3479,3128],{"class":213},[203,3481,2381],{"class":209},[203,3483,220],{"class":213},[203,3485,3486],{"class":205,"line":1304},[203,3487,2119],{"class":213},[203,3489,3490,3493,3495,3497,3500,3502,3504,3507,3509,3511,3513,3515],{"class":205,"line":1310},[203,3491,3492],{"class":209},"        for",[203,3494,1747],{"class":213},[203,3496,217],{"class":209},[203,3498,3499],{"class":213}," j",[203,3501,259],{"class":209},[203,3503,405],{"class":262},[203,3505,3506],{"class":213},";j",[203,3508,1124],{"class":209},[203,3510,660],{"class":262},[203,3512,3506],{"class":213},[203,3514,2381],{"class":209},[203,3516,220],{"class":213},[203,3518,3519],{"class":205,"line":1401},[203,3520,2599],{"class":213},[203,3522,3523,3525,3527,3530],{"class":205,"line":1407},[203,3524,2604],{"class":213},[203,3526,1258],{"class":209},[203,3528,3529],{"class":318},"\"*\"",[203,3531,1380],{"class":213},[203,3533,3534],{"class":205,"line":1419},[203,3535,2618],{"class":213},[203,3537,3538,3541,3543],{"class":205,"line":1701},[203,3539,3540],{"class":213},"        cout",[203,3542,1258],{"class":209},[203,3544,1281],{"class":213},[203,3546,3547],{"class":205,"line":1706},[203,3548,2276],{"class":213},[203,3550,3551],{"class":205,"line":1712},[203,3552,1654],{"class":213},[19,3554,3555],{},"乘法口诀表",[194,3557,3559],{"className":196,"code":3558,"language":198,"meta":27,"style":27},"#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",[200,3560,3561,3567,3577,3585,3589,3615,3619,3644,3648,3688,3692,3700,3704],{"__ignoreMap":27},[203,3562,3563,3565],{"class":205,"line":206},[203,3564,2038],{"class":209},[203,3566,2423],{"class":318},[203,3568,3569,3571,3573,3575],{"class":205,"line":124},[203,3570,2046],{"class":209},[203,3572,2049],{"class":209},[203,3574,2053],{"class":2052},[203,3576,1380],{"class":213},[203,3578,3579,3581,3583],{"class":205,"line":1269},[203,3580,217],{"class":209},[203,3582,2062],{"class":2052},[203,3584,2065],{"class":213},[203,3586,3587],{"class":205,"line":1284},[203,3588,1635],{"class":213},[203,3590,3591,3593,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613],{"class":205,"line":1290},[203,3592,3290],{"class":209},[203,3594,214],{"class":213},[203,3596,217],{"class":209},[203,3598,3121],{"class":213},[203,3600,259],{"class":209},[203,3602,431],{"class":262},[203,3604,3128],{"class":213},[203,3606,1124],{"class":209},[203,3608,660],{"class":262},[203,3610,3128],{"class":213},[203,3612,2381],{"class":209},[203,3614,220],{"class":213},[203,3616,3617],{"class":205,"line":1304},[203,3618,2119],{"class":213},[203,3620,3621,3623,3625,3627,3629,3631,3633,3635,3637,3640,3642],{"class":205,"line":1310},[203,3622,3492],{"class":209},[203,3624,214],{"class":213},[203,3626,217],{"class":209},[203,3628,3499],{"class":213},[203,3630,259],{"class":209},[203,3632,431],{"class":262},[203,3634,3506],{"class":213},[203,3636,1677],{"class":209},[203,3638,3639],{"class":213},"i;j",[203,3641,2381],{"class":209},[203,3643,220],{"class":213},[203,3645,3646],{"class":205,"line":1401},[203,3647,2599],{"class":213},[203,3649,3650,3652,3654,3656,3658,3660,3662,3664,3666,3669,3671,3673,3675,3677,3679,3682,3684,3686],{"class":205,"line":1407},[203,3651,2604],{"class":213},[203,3653,1258],{"class":209},[203,3655,681],{"class":213},[203,3657,1258],{"class":209},[203,3659,3529],{"class":318},[203,3661,1258],{"class":209},[203,3663,655],{"class":213},[203,3665,1258],{"class":209},[203,3667,3668],{"class":318},"\"=\"",[203,3670,1258],{"class":209},[203,3672,655],{"class":213},[203,3674,669],{"class":209},[203,3676,681],{"class":213},[203,3678,1258],{"class":209},[203,3680,3681],{"class":318},"'",[203,3683,1320],{"class":262},[203,3685,3681],{"class":318},[203,3687,1380],{"class":213},[203,3689,3690],{"class":205,"line":1419},[203,3691,2618],{"class":213},[203,3693,3694,3696,3698],{"class":205,"line":1701},[203,3695,3540],{"class":213},[203,3697,1258],{"class":209},[203,3699,1281],{"class":213},[203,3701,3702],{"class":205,"line":1706},[203,3703,2276],{"class":213},[203,3705,3706],{"class":205,"line":1712},[203,3707,1654],{"class":213},[174,3709,3711],{"id":3710},"_163跳出语句","1.6.3跳出语句",[157,3713,3714],{},[160,3715,3716],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,3718,3719],{},"break使用时机：",[1221,3721,3722,3725,3728],{},[160,3723,3724],{},"出现在switch条件语句中，作用是终止case并跳出switch",[160,3726,3727],{},"出现在循环结构中，作用是跳出当前的循环结构",[160,3729,3730],{},"出现在嵌套循环中，跳出最近的内层循环语句",[157,3732,3733,3736],{"start":124},[160,3734,3735],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[160,3737,3738],{},"goto语句\n语法：goto 标记;",[19,3740,3741],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[194,3743,3745],{"className":196,"code":3744,"language":198,"meta":27,"style":27},"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",[200,3746,3747,3755,3759,3772,3782,3795,3808,3821,3829,3845],{"__ignoreMap":27},[203,3748,3749,3751,3753],{"class":205,"line":206},[203,3750,217],{"class":209},[203,3752,2062],{"class":2052},[203,3754,2065],{"class":213},[203,3756,3757],{"class":205,"line":124},[203,3758,1635],{"class":213},[203,3760,3761,3763,3765,3768,3770],{"class":205,"line":1269},[203,3762,1640],{"class":213},[203,3764,1258],{"class":209},[203,3766,3767],{"class":318},"\"1\"",[203,3769,1258],{"class":209},[203,3771,1281],{"class":213},[203,3773,3774,3777,3780],{"class":205,"line":1284},[203,3775,3776],{"class":209},"    goto",[203,3778,3779],{"class":2052}," FLAG",[203,3781,1380],{"class":213},[203,3783,3784,3786,3788,3791,3793],{"class":205,"line":1290},[203,3785,1640],{"class":213},[203,3787,1258],{"class":209},[203,3789,3790],{"class":318},"\"2\"",[203,3792,1258],{"class":209},[203,3794,1281],{"class":213},[203,3796,3797,3799,3801,3804,3806],{"class":205,"line":1304},[203,3798,1640],{"class":213},[203,3800,1258],{"class":209},[203,3802,3803],{"class":318},"\"3\"",[203,3805,1258],{"class":209},[203,3807,1281],{"class":213},[203,3809,3810,3812,3814,3817,3819],{"class":205,"line":1310},[203,3811,1640],{"class":213},[203,3813,1258],{"class":209},[203,3815,3816],{"class":318},"\"4\"",[203,3818,1258],{"class":209},[203,3820,1281],{"class":213},[203,3822,3823,3826],{"class":205,"line":1401},[203,3824,3825],{"class":2052},"    FLAG",[203,3827,3828],{"class":213},":\n",[203,3830,3831,3833,3835,3838,3840,3842],{"class":205,"line":1407},[203,3832,1640],{"class":213},[203,3834,1258],{"class":209},[203,3836,3837],{"class":318},"\"5\"",[203,3839,1258],{"class":209},[203,3841,1328],{"class":213},[203,3843,3844],{"class":272},"\u002F\u002F跳过了2,3,4,直接到5\n",[203,3846,3847],{"class":205,"line":1419},[203,3848,1654],{"class":213},[14,3850,3852],{"id":3851},"_17数组","1.7数组",[174,3854,3856],{"id":3855},"_171一维数组","1.7.1一维数组",[157,3858,3859],{},[160,3860,3861],{},"一维数组定义方式",[351,3863,3864,3874],{},[354,3865,3866],{},[357,3867,3868,3871],{},[360,3869,3870],{},"方式",[360,3872,3873],{},"注意事项",[398,3875,3876,3890,3900],{},[357,3877,3878,3884],{},[403,3879,3880,3881,269],{},"数据类型 数组名",[203,3882,3883],{},"数组长度",[403,3885,3886,3887,3889],{},"这种方式是先定义再arr",[203,3888,655],{},"赋值",[357,3891,3892,3897],{},[403,3893,3880,3894,3896],{},[203,3895,3883],{},"={值1,值2....};",[403,3898,3899],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[357,3901,3902,3906],{},[403,3903,3880,3904,3896],{},[203,3905],{},[403,3907,3908,3909,3911],{},"int arr",[203,3910],{},";这是不正确的，按照这样的方式定义必须有初始长度",[157,3913,3914],{"start":124},[160,3915,3916],{},"一维数组数组名\n用途：",[1221,3918,3919],{},[160,3920,3921],{},"1.可以统计整个数组在内存中的长度：",[194,3923,3925],{"className":196,"code":3924,"language":198,"meta":27,"style":27},"sizeof(arr);\nsizeof(arr[0]);\n",[200,3926,3927,3934],{"__ignoreMap":27},[203,3928,3929,3931],{"class":205,"line":206},[203,3930,210],{"class":209},[203,3932,3933],{"class":213},"(arr);\n",[203,3935,3936,3938,3941,3943],{"class":205,"line":124},[203,3937,210],{"class":209},[203,3939,3940],{"class":213},"(arr[",[203,3942,405],{"class":262},[203,3944,3945],{"class":213},"]);\n",[1221,3947,3948],{},[160,3949,3950],{},"2.可以获取数组在内存中的首地址:",[194,3952,3954],{"className":196,"code":3953,"language":198,"meta":27,"style":27},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[200,3955,3956,3961,3974,3979],{"__ignoreMap":27},[203,3957,3958],{"class":205,"line":206},[203,3959,3960],{"class":272},"\u002F\u002F查看16进制的首地址\n",[203,3962,3963,3965,3967,3970,3972],{"class":205,"line":124},[203,3964,1459],{"class":213},[203,3966,1258],{"class":209},[203,3968,3969],{"class":213},"arr",[203,3971,1258],{"class":209},[203,3973,1281],{"class":213},[203,3975,3976],{"class":205,"line":1269},[203,3977,3978],{"class":272},"\u002F\u002F看10进制数\n",[203,3980,3981,3983,3985,3987,3989,3991,3993,3996,3998,4000,4002],{"class":205,"line":1284},[203,3982,1459],{"class":213},[203,3984,1258],{"class":209},[203,3986,214],{"class":213},[203,3988,217],{"class":209},[203,3990,643],{"class":213},[203,3992,567],{"class":209},[203,3994,3995],{"class":213},"arr[",[203,3997,405],{"class":262},[203,3999,1154],{"class":213},[203,4001,1258],{"class":209},[203,4003,1281],{"class":213},[19,4005,4006],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1221,4008,4009],{},[160,4010,4011],{},"1️⃣五只小猪称体重",[194,4013,4015],{"className":196,"code":4014,"language":198,"meta":27,"style":27},"#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",[200,4016,4017,4023,4033,4041,4045,4085,4098,4124,4128,4140,4144,4154,4158,4162,4175,4185],{"__ignoreMap":27},[203,4018,4019,4021],{"class":205,"line":206},[203,4020,2038],{"class":209},[203,4022,2041],{"class":318},[203,4024,4025,4027,4029,4031],{"class":205,"line":124},[203,4026,2046],{"class":209},[203,4028,2049],{"class":209},[203,4030,2053],{"class":2052},[203,4032,1380],{"class":213},[203,4034,4035,4037,4039],{"class":205,"line":1269},[203,4036,217],{"class":209},[203,4038,2062],{"class":2052},[203,4040,2065],{"class":213},[203,4042,4043],{"class":205,"line":1284},[203,4044,1635],{"class":213},[203,4046,4047,4049,4052,4054,4056,4058,4060,4063,4065,4068,4070,4072,4074,4077,4079,4082],{"class":205,"line":1290},[203,4048,2074],{"class":209},[203,4050,4051],{"class":213}," arr[",[203,4053,533],{"class":262},[203,4055,1154],{"class":213},[203,4057,259],{"class":209},[203,4059,1110],{"class":213},[203,4061,4062],{"class":262},"300",[203,4064,592],{"class":213},[203,4066,4067],{"class":262},"350",[203,4069,592],{"class":213},[203,4071,1811],{"class":262},[203,4073,592],{"class":213},[203,4075,4076],{"class":262},"400",[203,4078,592],{"class":213},[203,4080,4081],{"class":262},"250",[203,4083,4084],{"class":213},"};\n",[203,4086,4087,4089,4092,4094,4096],{"class":205,"line":1304},[203,4088,2074],{"class":209},[203,4090,4091],{"class":213}," tmp",[203,4093,259],{"class":209},[203,4095,405],{"class":262},[203,4097,1380],{"class":213},[203,4099,4100,4102,4104,4106,4108,4110,4112,4114,4116,4118,4120,4122],{"class":205,"line":1310},[203,4101,3290],{"class":209},[203,4103,1747],{"class":213},[203,4105,217],{"class":209},[203,4107,3121],{"class":213},[203,4109,259],{"class":209},[203,4111,405],{"class":262},[203,4113,3128],{"class":213},[203,4115,1124],{"class":209},[203,4117,533],{"class":262},[203,4119,3128],{"class":213},[203,4121,2381],{"class":209},[203,4123,220],{"class":213},[203,4125,4126],{"class":205,"line":1401},[203,4127,2119],{"class":213},[203,4129,4130,4132,4135,4137],{"class":205,"line":1407},[203,4131,2586],{"class":209},[203,4133,4134],{"class":213},"(tmp",[203,4136,1124],{"class":209},[203,4138,4139],{"class":213},"arr[i])\n",[203,4141,4142],{"class":205,"line":1419},[203,4143,2599],{"class":213},[203,4145,4146,4149,4151],{"class":205,"line":1701},[203,4147,4148],{"class":213},"            tmp",[203,4150,259],{"class":209},[203,4152,4153],{"class":213},"arr[i];\n",[203,4155,4156],{"class":205,"line":1706},[203,4157,2618],{"class":213},[203,4159,4160],{"class":205,"line":1712},[203,4161,2276],{"class":213},[203,4163,4164,4166,4168,4171,4173],{"class":205,"line":1717},[203,4165,1640],{"class":213},[203,4167,1258],{"class":209},[203,4169,4170],{"class":213},"tmp",[203,4172,1258],{"class":209},[203,4174,1281],{"class":213},[203,4176,4177,4180,4183],{"class":205,"line":1731},[203,4178,4179],{"class":209},"    return",[203,4181,4182],{"class":262}," 0",[203,4184,1380],{"class":213},[203,4186,4187],{"class":205,"line":1736},[203,4188,1654],{"class":213},[1221,4190,4191],{},[160,4192,4193],{},"2️⃣数组元素逆置",[194,4195,4197],{"className":196,"code":4196,"language":198,"meta":27,"style":27},"\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",[200,4198,4199,4204,4210,4220,4228,4232,4267,4283,4315,4328,4333,4338,4350,4360,4370,4375,4384,4394,4399,4404,4431,4435,4451,4455,4466,4475],{"__ignoreMap":27},[203,4200,4201],{"class":205,"line":206},[203,4202,4203],{"class":272},"\u002F\u002F元素逆置\n",[203,4205,4206,4208],{"class":205,"line":124},[203,4207,2038],{"class":209},[203,4209,2041],{"class":318},[203,4211,4212,4214,4216,4218],{"class":205,"line":1269},[203,4213,2046],{"class":209},[203,4215,2049],{"class":209},[203,4217,2053],{"class":2052},[203,4219,1380],{"class":213},[203,4221,4222,4224,4226],{"class":205,"line":1284},[203,4223,217],{"class":209},[203,4225,2062],{"class":2052},[203,4227,2065],{"class":213},[203,4229,4230],{"class":205,"line":1290},[203,4231,1635],{"class":213},[203,4233,4234,4237,4239,4241,4243,4245,4247,4249,4251,4253,4255,4257,4259,4261,4263,4265],{"class":205,"line":1304},[203,4235,4236],{"class":209},"   int",[203,4238,4051],{"class":213},[203,4240,533],{"class":262},[203,4242,1154],{"class":213},[203,4244,259],{"class":209},[203,4246,1110],{"class":213},[203,4248,431],{"class":262},[203,4250,592],{"class":213},[203,4252,291],{"class":262},[203,4254,592],{"class":213},[203,4256,285],{"class":262},[203,4258,592],{"class":213},[203,4260,507],{"class":262},[203,4262,592],{"class":213},[203,4264,533],{"class":262},[203,4266,4084],{"class":213},[203,4268,4269,4271,4274,4276,4278,4280],{"class":205,"line":1310},[203,4270,4236],{"class":209},[203,4272,4273],{"class":213}," start",[203,4275,259],{"class":209},[203,4277,405],{"class":262},[203,4279,269],{"class":213},[203,4281,4282],{"class":272},"\u002F\u002F起始下标\n",[203,4284,4285,4287,4290,4293,4296,4299,4301,4303,4306,4308,4310,4312],{"class":205,"line":1401},[203,4286,4236],{"class":209},[203,4288,4289],{"class":213}," end",[203,4291,4292],{"class":209},"=sizeof",[203,4294,4295],{"class":213},"(arr)",[203,4297,4298],{"class":209},"\u002Fsizeof",[203,4300,3940],{"class":213},[203,4302,405],{"class":262},[203,4304,4305],{"class":213},"])",[203,4307,746],{"class":209},[203,4309,431],{"class":262},[203,4311,269],{"class":213},[203,4313,4314],{"class":272},"\u002F\u002F结束下标\n",[203,4316,4317,4320,4323,4325],{"class":205,"line":1407},[203,4318,4319],{"class":209},"   while",[203,4321,4322],{"class":213}," (start",[203,4324,1124],{"class":209},[203,4326,4327],{"class":213},"end)\n",[203,4329,4330],{"class":205,"line":1419},[203,4331,4332],{"class":213},"   {\n",[203,4334,4335],{"class":205,"line":1701},[203,4336,4337],{"class":272},"    \u002F\u002F实现元素互换代码\n",[203,4339,4340,4342,4345,4347],{"class":205,"line":1706},[203,4341,2074],{"class":209},[203,4343,4344],{"class":213}," temp",[203,4346,259],{"class":209},[203,4348,4349],{"class":213},"arr[start];\n",[203,4351,4352,4355,4357],{"class":205,"line":1712},[203,4353,4354],{"class":213},"    arr[start]",[203,4356,259],{"class":209},[203,4358,4359],{"class":213},"arr[end];\n",[203,4361,4362,4365,4367],{"class":205,"line":1717},[203,4363,4364],{"class":213},"    arr[end]",[203,4366,259],{"class":209},[203,4368,4369],{"class":213},"temp;\n",[203,4371,4372],{"class":205,"line":1731},[203,4373,4374],{"class":272},"    \u002F\u002F下标更新\n",[203,4376,4377,4380,4382],{"class":205,"line":1736},[203,4378,4379],{"class":213},"    start",[203,4381,2381],{"class":209},[203,4383,1380],{"class":213},[203,4385,4386,4389,4392],{"class":205,"line":1742},[203,4387,4388],{"class":213},"    end",[203,4390,4391],{"class":209},"--",[203,4393,1380],{"class":213},[203,4395,4396],{"class":205,"line":1763},[203,4397,4398],{"class":213},"   }\n",[203,4400,4401],{"class":205,"line":1768},[203,4402,4403],{"class":272},"   \u002F\u002F输出逆置后的数组\n",[203,4405,4406,4409,4411,4413,4415,4417,4419,4421,4423,4425,4427,4429],{"class":205,"line":1782},[203,4407,4408],{"class":209},"   for",[203,4410,1747],{"class":213},[203,4412,217],{"class":209},[203,4414,3121],{"class":213},[203,4416,259],{"class":209},[203,4418,405],{"class":262},[203,4420,3128],{"class":213},[203,4422,1124],{"class":209},[203,4424,533],{"class":262},[203,4426,3128],{"class":213},[203,4428,2381],{"class":209},[203,4430,220],{"class":213},[203,4432,4433],{"class":205,"line":1787},[203,4434,4332],{"class":213},[203,4436,4437,4439,4441,4444,4446,4449],{"class":205,"line":1816},[203,4438,1640],{"class":213},[203,4440,1258],{"class":209},[203,4442,4443],{"class":213},"arr[i]",[203,4445,1258],{"class":209},[203,4447,4448],{"class":318},"\" \"",[203,4450,1380],{"class":213},[203,4452,4453],{"class":205,"line":1821},[203,4454,4398],{"class":213},[203,4456,4457,4460,4462,4464],{"class":205,"line":1838},[203,4458,4459],{"class":2052},"   system",[203,4461,214],{"class":213},[203,4463,2397],{"class":318},[203,4465,2808],{"class":213},[203,4467,4468,4471,4473],{"class":205,"line":1843},[203,4469,4470],{"class":209},"   return",[203,4472,4182],{"class":262},[203,4474,1380],{"class":213},[203,4476,4477],{"class":205,"line":1848},[203,4478,1654],{"class":213},[1221,4480,4481],{},[160,4482,4483],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[194,4485,4487],{"className":196,"code":4486,"language":198,"meta":27,"style":27},"\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",[200,4488,4489,4494,4500,4510,4518,4522,4574,4587,4613,4617,4631,4635,4640,4645,4675,4679,4684,4718,4722,4727,4747,4752,4764,4780,4795,4800,4804,4808,4821,4847,4851,4865,4869,4877],{"__ignoreMap":27},[203,4490,4491],{"class":205,"line":206},[203,4492,4493],{"class":272},"\u002F\u002F冒泡排序,升序\n",[203,4495,4496,4498],{"class":205,"line":124},[203,4497,2038],{"class":209},[203,4499,2041],{"class":318},[203,4501,4502,4504,4506,4508],{"class":205,"line":1269},[203,4503,2046],{"class":209},[203,4505,2049],{"class":209},[203,4507,2053],{"class":2052},[203,4509,1380],{"class":213},[203,4511,4512,4514,4516],{"class":205,"line":1284},[203,4513,217],{"class":209},[203,4515,2062],{"class":2052},[203,4517,2065],{"class":213},[203,4519,4520],{"class":205,"line":1290},[203,4521,1635],{"class":213},[203,4523,4524,4526,4528,4530,4533,4535,4538,4540,4542,4544,4546,4548,4550,4552,4554,4556,4558,4560,4562,4564,4566,4568,4570,4572],{"class":205,"line":1304},[203,4525,2074],{"class":209},[203,4527,4051],{"class":213},[203,4529,634],{"class":262},[203,4531,4532],{"class":213},"] ",[203,4534,259],{"class":209},[203,4536,4537],{"class":213}," {",[203,4539,507],{"class":262},[203,4541,592],{"class":213},[203,4543,291],{"class":262},[203,4545,592],{"class":213},[203,4547,609],{"class":262},[203,4549,592],{"class":213},[203,4551,405],{"class":262},[203,4553,592],{"class":213},[203,4555,533],{"class":262},[203,4557,592],{"class":213},[203,4559,583],{"class":262},[203,4561,592],{"class":213},[203,4563,431],{"class":262},[203,4565,592],{"class":213},[203,4567,285],{"class":262},[203,4569,592],{"class":213},[203,4571,634],{"class":262},[203,4573,4084],{"class":213},[203,4575,4576,4578,4580,4583,4585],{"class":205,"line":1310},[203,4577,1640],{"class":213},[203,4579,1258],{"class":209},[203,4581,4582],{"class":318},"\"排序前：\"",[203,4584,1258],{"class":209},[203,4586,1281],{"class":213},[203,4588,4589,4591,4593,4595,4597,4599,4601,4603,4605,4607,4609,4611],{"class":205,"line":1401},[203,4590,3290],{"class":209},[203,4592,1747],{"class":213},[203,4594,217],{"class":209},[203,4596,3121],{"class":213},[203,4598,259],{"class":209},[203,4600,405],{"class":262},[203,4602,3128],{"class":213},[203,4604,1124],{"class":209},[203,4606,634],{"class":262},[203,4608,3128],{"class":213},[203,4610,2381],{"class":209},[203,4612,220],{"class":213},[203,4614,4615],{"class":205,"line":1407},[203,4616,2119],{"class":213},[203,4618,4619,4621,4623,4625,4627,4629],{"class":205,"line":1419},[203,4620,3540],{"class":213},[203,4622,1258],{"class":209},[203,4624,4443],{"class":213},[203,4626,1258],{"class":209},[203,4628,4448],{"class":318},[203,4630,1380],{"class":213},[203,4632,4633],{"class":205,"line":1701},[203,4634,2276],{"class":213},[203,4636,4637],{"class":205,"line":1706},[203,4638,4639],{"class":272},"    \u002F\u002F开始冒泡排序\n",[203,4641,4642],{"class":205,"line":1712},[203,4643,4644],{"class":272},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[203,4646,4647,4649,4651,4653,4655,4657,4659,4661,4663,4665,4667,4669,4671,4673],{"class":205,"line":1717},[203,4648,3290],{"class":209},[203,4650,1747],{"class":213},[203,4652,217],{"class":209},[203,4654,3121],{"class":213},[203,4656,259],{"class":209},[203,4658,405],{"class":262},[203,4660,3128],{"class":213},[203,4662,1124],{"class":209},[203,4664,634],{"class":262},[203,4666,746],{"class":209},[203,4668,431],{"class":262},[203,4670,3128],{"class":213},[203,4672,2381],{"class":209},[203,4674,220],{"class":213},[203,4676,4677],{"class":205,"line":1731},[203,4678,2119],{"class":213},[203,4680,4681],{"class":205,"line":1736},[203,4682,4683],{"class":272},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[203,4685,4686,4688,4690,4692,4694,4696,4698,4700,4702,4704,4706,4708,4710,4712,4714,4716],{"class":205,"line":1742},[203,4687,3492],{"class":209},[203,4689,1747],{"class":213},[203,4691,217],{"class":209},[203,4693,3499],{"class":213},[203,4695,259],{"class":209},[203,4697,405],{"class":262},[203,4699,3506],{"class":213},[203,4701,1124],{"class":209},[203,4703,634],{"class":262},[203,4705,746],{"class":209},[203,4707,655],{"class":213},[203,4709,746],{"class":209},[203,4711,431],{"class":262},[203,4713,3506],{"class":213},[203,4715,2381],{"class":209},[203,4717,220],{"class":213},[203,4719,4720],{"class":205,"line":1763},[203,4721,2599],{"class":213},[203,4723,4724],{"class":205,"line":1768},[203,4725,4726],{"class":272},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[203,4728,4729,4732,4735,4737,4740,4742,4744],{"class":205,"line":1782},[203,4730,4731],{"class":209},"            if",[203,4733,4734],{"class":213},"(arr[j]",[203,4736,1174],{"class":209},[203,4738,4739],{"class":213},"arr[j",[203,4741,695],{"class":209},[203,4743,431],{"class":262},[203,4745,4746],{"class":213},"])\n",[203,4748,4749],{"class":205,"line":1787},[203,4750,4751],{"class":213},"            {\n",[203,4753,4754,4757,4759,4761],{"class":205,"line":1816},[203,4755,4756],{"class":209},"                int",[203,4758,4344],{"class":213},[203,4760,259],{"class":209},[203,4762,4763],{"class":213},"arr[j];\n",[203,4765,4766,4769,4771,4773,4775,4777],{"class":205,"line":1821},[203,4767,4768],{"class":213},"                arr[j]",[203,4770,259],{"class":209},[203,4772,4739],{"class":213},[203,4774,695],{"class":209},[203,4776,431],{"class":262},[203,4778,4779],{"class":213},"];\n",[203,4781,4782,4785,4787,4789,4791,4793],{"class":205,"line":1838},[203,4783,4784],{"class":213},"                arr[j",[203,4786,695],{"class":209},[203,4788,431],{"class":262},[203,4790,1154],{"class":213},[203,4792,259],{"class":209},[203,4794,4369],{"class":213},[203,4796,4797],{"class":205,"line":1843},[203,4798,4799],{"class":213},"            }\n",[203,4801,4802],{"class":205,"line":1848},[203,4803,2618],{"class":213},[203,4805,4806],{"class":205,"line":1853},[203,4807,2276],{"class":213},[203,4809,4810,4812,4814,4817,4819],{"class":205,"line":1867},[203,4811,1640],{"class":213},[203,4813,1258],{"class":209},[203,4815,4816],{"class":318},"\"排序后：\"",[203,4818,1258],{"class":209},[203,4820,1281],{"class":213},[203,4822,4823,4825,4827,4829,4831,4833,4835,4837,4839,4841,4843,4845],{"class":205,"line":1872},[203,4824,3290],{"class":209},[203,4826,1747],{"class":213},[203,4828,217],{"class":209},[203,4830,3121],{"class":213},[203,4832,259],{"class":209},[203,4834,405],{"class":262},[203,4836,3128],{"class":213},[203,4838,1124],{"class":209},[203,4840,634],{"class":262},[203,4842,3128],{"class":213},[203,4844,2381],{"class":209},[203,4846,220],{"class":213},[203,4848,4849],{"class":205,"line":2666},[203,4850,2119],{"class":213},[203,4852,4853,4855,4857,4859,4861,4863],{"class":205,"line":2680},[203,4854,3540],{"class":213},[203,4856,1258],{"class":209},[203,4858,4443],{"class":213},[203,4860,1258],{"class":209},[203,4862,4448],{"class":318},[203,4864,1380],{"class":213},[203,4866,4867],{"class":205,"line":2688},[203,4868,2276],{"class":213},[203,4870,4871,4873,4875],{"class":205,"line":2693},[203,4872,4179],{"class":209},[203,4874,4182],{"class":262},[203,4876,1380],{"class":213},[203,4878,4879],{"class":205,"line":2699},[203,4880,1654],{"class":213},[174,4882,4884],{"id":4883},"_172二维数组","1.7.2二维数组",[157,4886,4887],{},[160,4888,4889],{},"二维数组的四种定义方式",[351,4891,4892,4901],{},[354,4893,4894],{},[357,4895,4896,4899],{},[360,4897,4898],{},"序号",[360,4900,3870],{},[398,4902,4903,4913,4922,4931,4940],{},[357,4904,4905,4907],{},[403,4906,431],{},[403,4908,4909,4910,269],{},"数据类型 数组名[行数]",[203,4911,4912],{},"列数",[357,4914,4915,4917],{},[403,4916,291],{},[403,4918,4909,4919,4921],{},[203,4920,4912],{},"={ {数据1,数据2}，{数据3，数据4}... }",[357,4923,4924,4926],{},[403,4925,285],{},[403,4927,4909,4928,4930],{},[203,4929,4912],{},"={数据1,数据2,数据3...}",[357,4932,4933,4935],{},[403,4934,507],{},[403,4936,4937,4938,4930],{},"数据类型 数组名[]",[203,4939,4912],{},[357,4941,4942,4945],{},[403,4943,4944],{},"注意：不能只省略列数",[403,4946],{},[157,4948,4949],{"start":124},[160,4950,4951],{},"二维数组数组名",[1221,4953,4954,4957],{},[160,4955,4956],{},"1.查看二维数组所占内存空间",[160,4958,4959],{},"2.获取二维数组首地址",[19,4961,4962],{},"已知二维数组，求二维数组的行数与列数",[194,4964,4966],{"className":196,"code":4965,"language":198,"meta":27,"style":27},"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",[200,4967,4968,4976,4980,4998,5002,5020,5036,5041,5066,5099],{"__ignoreMap":27},[203,4969,4970,4972,4974],{"class":205,"line":206},[203,4971,217],{"class":209},[203,4973,2062],{"class":2052},[203,4975,2065],{"class":213},[203,4977,4978],{"class":205,"line":124},[203,4979,1635],{"class":213},[203,4981,4982,4984,4986,4988,4991,4993,4995],{"class":205,"line":1269},[203,4983,2074],{"class":209},[203,4985,4051],{"class":213},[203,4987,291],{"class":262},[203,4989,4990],{"class":213},"][",[203,4992,285],{"class":262},[203,4994,1154],{"class":213},[203,4996,4997],{"class":209},"=\n",[203,4999,5000],{"class":205,"line":1284},[203,5001,2119],{"class":213},[203,5003,5004,5007,5009,5011,5013,5015,5017],{"class":205,"line":1290},[203,5005,5006],{"class":213},"        {",[203,5008,431],{"class":262},[203,5010,592],{"class":213},[203,5012,291],{"class":262},[203,5014,592],{"class":213},[203,5016,285],{"class":262},[203,5018,5019],{"class":213},"},\n",[203,5021,5022,5024,5026,5028,5030,5032,5034],{"class":205,"line":1304},[203,5023,5006],{"class":213},[203,5025,507],{"class":262},[203,5027,592],{"class":213},[203,5029,533],{"class":262},[203,5031,592],{"class":213},[203,5033,558],{"class":262},[203,5035,1654],{"class":213},[203,5037,5038],{"class":205,"line":1310},[203,5039,5040],{"class":213},"    };\n",[203,5042,5043,5045,5047,5050,5052,5054,5056,5058,5060,5062,5064],{"class":205,"line":1401},[203,5044,1640],{"class":213},[203,5046,1258],{"class":209},[203,5048,5049],{"class":318},"\"二维数组的行数\"",[203,5051,1462],{"class":209},[203,5053,4295],{"class":213},[203,5055,4298],{"class":209},[203,5057,3940],{"class":213},[203,5059,405],{"class":262},[203,5061,4305],{"class":213},[203,5063,1258],{"class":209},[203,5065,1281],{"class":213},[203,5067,5068,5070,5072,5075,5077,5079,5081,5083,5085,5087,5089,5091,5093,5095,5097],{"class":205,"line":1407},[203,5069,1640],{"class":213},[203,5071,1258],{"class":209},[203,5073,5074],{"class":318},"\"二维数组的列数\"",[203,5076,1462],{"class":209},[203,5078,3940],{"class":213},[203,5080,405],{"class":262},[203,5082,4305],{"class":213},[203,5084,4298],{"class":209},[203,5086,3940],{"class":213},[203,5088,405],{"class":262},[203,5090,4990],{"class":213},[203,5092,405],{"class":262},[203,5094,4305],{"class":213},[203,5096,1258],{"class":209},[203,5098,1281],{"class":213},[203,5100,5101],{"class":205,"line":1419},[203,5102,1654],{"class":213},[19,5104,5105],{},"查看二维数组首地址",[194,5107,5109],{"className":196,"code":5108,"language":198,"meta":27,"style":27},"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",[200,5110,5111,5128,5154,5179],{"__ignoreMap":27},[203,5112,5113,5115,5117,5120,5122,5124,5126],{"class":205,"line":206},[203,5114,1459],{"class":213},[203,5116,1258],{"class":209},[203,5118,5119],{"class":318},"\"二维数组首地址：\"",[203,5121,1258],{"class":209},[203,5123,3969],{"class":213},[203,5125,1258],{"class":209},[203,5127,1281],{"class":213},[203,5129,5130,5132,5134,5137,5139,5141,5143,5146,5148,5150,5152],{"class":205,"line":124},[203,5131,1459],{"class":213},[203,5133,1258],{"class":209},[203,5135,5136],{"class":318},"\"二维数组第一行的首地址：\"",[203,5138,1258],{"class":209},[203,5140,214],{"class":213},[203,5142,217],{"class":209},[203,5144,5145],{"class":213},")arr[",[203,5147,405],{"class":262},[203,5149,1154],{"class":213},[203,5151,1258],{"class":209},[203,5153,1281],{"class":213},[203,5155,5156,5158,5160,5163,5165,5167,5169,5171,5173,5175,5177],{"class":205,"line":1269},[203,5157,1459],{"class":213},[203,5159,1258],{"class":209},[203,5161,5162],{"class":318},"\"二维数组第二行的首地址：\"",[203,5164,1258],{"class":209},[203,5166,214],{"class":213},[203,5168,217],{"class":209},[203,5170,5145],{"class":213},[203,5172,431],{"class":262},[203,5174,1154],{"class":213},[203,5176,1258],{"class":209},[203,5178,1281],{"class":213},[203,5180,5181,5183,5185,5188,5190,5192,5194,5196,5198,5200,5202,5204,5206,5208,5210,5212],{"class":205,"line":1284},[203,5182,1459],{"class":213},[203,5184,1258],{"class":209},[203,5186,5187],{"class":318},"\"二维数组第一个元素的首地址:\"",[203,5189,1258],{"class":209},[203,5191,214],{"class":213},[203,5193,217],{"class":209},[203,5195,643],{"class":213},[203,5197,567],{"class":209},[203,5199,3995],{"class":213},[203,5201,405],{"class":262},[203,5203,4990],{"class":213},[203,5205,405],{"class":262},[203,5207,1154],{"class":213},[203,5209,1258],{"class":209},[203,5211,1328],{"class":213},[203,5213,5214],{"class":272},"\u002F\u002F对于数，要加取址符\n",[5216,5217,5218],"style",{},"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":27,"searchDepth":124,"depth":124,"links":5220},[5221,5222,5223,5231,5232,5238,5243],{"id":147,"depth":124,"text":148},{"id":154,"depth":124,"text":155},{"id":171,"depth":124,"text":172,"children":5224},[5225,5226,5227,5228,5229,5230],{"id":176,"depth":1269,"text":177},{"id":230,"depth":1269,"text":231},{"id":299,"depth":1269,"text":300},{"id":1239,"depth":1269,"text":1240},{"id":1334,"depth":1269,"text":1335},{"id":1433,"depth":1269,"text":1434},{"id":1475,"depth":124,"text":1476},{"id":1543,"depth":124,"text":1544,"children":5233},[5234,5235,5236,5237],{"id":1547,"depth":1269,"text":1548},{"id":1568,"depth":1269,"text":1569},{"id":1577,"depth":1269,"text":1578},{"id":1586,"depth":1269,"text":1587},{"id":1595,"depth":124,"text":1596,"children":5239},[5240,5241,5242],{"id":1599,"depth":1269,"text":1600},{"id":2294,"depth":1269,"text":2295},{"id":3710,"depth":1269,"text":3711},{"id":3851,"depth":124,"text":3852,"children":5244},[5245,5246],{"id":3855,"depth":1269,"text":3856},{"id":4883,"depth":1269,"text":4884},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":139,"description":27},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5253,"title":5254,"body":5255,"description":27,"extension":129,"meta":6355,"navigation":131,"path":6356,"seo":6357,"stem":6358,"__hash__":6359},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5256,"toc":6347},[5257,5260,5264,5272,5280,5283,5349,5353,5356,5432,5436,5439,5442,5445,5658,5662,5667,5731,5736,5803,5808,5899,5902,6007,6011,6014,6020,6164,6168,6171,6185,6188,6233,6236,6344],[10,5258,5254],{"id":5259},"_2函数",[14,5261,5263],{"id":5262},"_21函数概述","2.1函数概述",[157,5265,5266,5269],{},[160,5267,5268],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[160,5270,5271],{},"语法：",[194,5273,5278],{"className":5274,"code":5276,"language":5277,"meta":27},[5275],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[200,5279,5276],{"__ignoreMap":27},[19,5281,5282],{},"小案例",[194,5284,5286],{"className":196,"code":5285,"language":198,"meta":27,"style":27},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[200,5287,5288,5293,5317,5321,5338,5345],{"__ignoreMap":27},[203,5289,5290],{"class":205,"line":206},[203,5291,5292],{"class":272},"\u002F\u002Fnum1,num2形参\n",[203,5294,5295,5297,5300,5302,5304,5308,5310,5312,5315],{"class":205,"line":124},[203,5296,217],{"class":209},[203,5298,5299],{"class":2052}," add",[203,5301,214],{"class":213},[203,5303,217],{"class":209},[203,5305,5307],{"class":5306},"s4XuR"," num1",[203,5309,592],{"class":213},[203,5311,217],{"class":209},[203,5313,5314],{"class":5306}," num2",[203,5316,220],{"class":213},[203,5318,5319],{"class":205,"line":1269},[203,5320,1635],{"class":213},[203,5322,5323,5325,5328,5330,5333,5335],{"class":205,"line":1284},[203,5324,2074],{"class":209},[203,5326,5327],{"class":213}," sum",[203,5329,259],{"class":209},[203,5331,5332],{"class":213},"num1",[203,5334,695],{"class":209},[203,5336,5337],{"class":213},"num2;\n",[203,5339,5340,5342],{"class":205,"line":1290},[203,5341,4179],{"class":209},[203,5343,5344],{"class":213}," sum;\n",[203,5346,5347],{"class":205,"line":1304},[203,5348,1654],{"class":213},[14,5350,5352],{"id":5351},"_22函数调用","2.2函数调用",[19,5354,5355],{},"调用刚刚写的求和函数",[194,5357,5359],{"className":196,"code":5358,"language":198,"meta":27,"style":27},"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",[200,5360,5361,5369,5373,5378,5390,5402,5411,5416,5428],{"__ignoreMap":27},[203,5362,5363,5365,5367],{"class":205,"line":206},[203,5364,217],{"class":209},[203,5366,2062],{"class":2052},[203,5368,2065],{"class":213},[203,5370,5371],{"class":205,"line":124},[203,5372,1635],{"class":213},[203,5374,5375],{"class":205,"line":1269},[203,5376,5377],{"class":272},"    \u002F\u002Fa,b实参\n",[203,5379,5380,5382,5384,5386,5388],{"class":205,"line":1284},[203,5381,2074],{"class":209},[203,5383,1488],{"class":213},[203,5385,259],{"class":209},[203,5387,405],{"class":262},[203,5389,1380],{"class":213},[203,5391,5392,5394,5396,5398,5400],{"class":205,"line":1290},[203,5393,2074],{"class":209},[203,5395,2922],{"class":213},[203,5397,259],{"class":209},[203,5399,405],{"class":262},[203,5401,1380],{"class":213},[203,5403,5404,5406,5408],{"class":205,"line":1304},[203,5405,2101],{"class":213},[203,5407,1519],{"class":209},[203,5409,5410],{"class":213},"a,b;\n",[203,5412,5413],{"class":205,"line":1310},[203,5414,5415],{"class":272},"    \u002F\u002F调用函数时，实参值传给了形参\n",[203,5417,5418,5420,5422,5425],{"class":205,"line":1401},[203,5419,1640],{"class":213},[203,5421,1258],{"class":209},[203,5423,5424],{"class":2052},"add",[203,5426,5427],{"class":213},"(a,b);\n",[203,5429,5430],{"class":205,"line":1407},[203,5431,1654],{"class":213},[14,5433,5435],{"id":5434},"_23值传递","2.3值传递",[19,5437,5438],{},"值传递就是函数调用时实参将数值传给形参",[19,5440,5441],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,5443,5444],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[194,5446,5448],{"className":196,"code":5447,"language":198,"meta":27,"style":27},"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",[200,5449,5450,5472,5476,5489,5506,5524,5535,5544,5553,5566,5582,5598,5607,5611,5619,5623,5635,5647,5654],{"__ignoreMap":27},[203,5451,5452,5455,5458,5460,5462,5464,5466,5468,5470],{"class":205,"line":206},[203,5453,5454],{"class":209},"void",[203,5456,5457],{"class":2052}," swap",[203,5459,214],{"class":213},[203,5461,217],{"class":209},[203,5463,5307],{"class":5306},[203,5465,592],{"class":213},[203,5467,217],{"class":209},[203,5469,5314],{"class":5306},[203,5471,220],{"class":213},[203,5473,5474],{"class":205,"line":124},[203,5475,1635],{"class":213},[203,5477,5478,5480,5482,5485,5487],{"class":205,"line":1269},[203,5479,1640],{"class":213},[203,5481,1258],{"class":209},[203,5483,5484],{"class":318},"\"交换前：\"",[203,5486,1258],{"class":209},[203,5488,1281],{"class":213},[203,5490,5491,5493,5495,5498,5500,5502,5504],{"class":205,"line":1284},[203,5492,1640],{"class":213},[203,5494,1258],{"class":209},[203,5496,5497],{"class":318},"\"num1=\"",[203,5499,1258],{"class":209},[203,5501,5332],{"class":213},[203,5503,1258],{"class":209},[203,5505,1281],{"class":213},[203,5507,5508,5510,5512,5515,5517,5520,5522],{"class":205,"line":1290},[203,5509,1640],{"class":213},[203,5511,1258],{"class":209},[203,5513,5514],{"class":318},"\"num2=\"",[203,5516,1258],{"class":209},[203,5518,5519],{"class":213},"num2",[203,5521,1258],{"class":209},[203,5523,1281],{"class":213},[203,5525,5526,5528,5530,5532],{"class":205,"line":1304},[203,5527,2074],{"class":209},[203,5529,4344],{"class":213},[203,5531,259],{"class":209},[203,5533,5534],{"class":213},"num1;\n",[203,5536,5537,5540,5542],{"class":205,"line":1310},[203,5538,5539],{"class":213},"    num1",[203,5541,259],{"class":209},[203,5543,5337],{"class":213},[203,5545,5546,5549,5551],{"class":205,"line":1401},[203,5547,5548],{"class":213},"    num2",[203,5550,259],{"class":209},[203,5552,4369],{"class":213},[203,5554,5555,5557,5559,5562,5564],{"class":205,"line":1407},[203,5556,1640],{"class":213},[203,5558,1258],{"class":209},[203,5560,5561],{"class":318},"\"交换后：\"",[203,5563,1258],{"class":209},[203,5565,1281],{"class":213},[203,5567,5568,5570,5572,5574,5576,5578,5580],{"class":205,"line":1419},[203,5569,1640],{"class":213},[203,5571,1258],{"class":209},[203,5573,5497],{"class":318},[203,5575,1258],{"class":209},[203,5577,5332],{"class":213},[203,5579,1258],{"class":209},[203,5581,1281],{"class":213},[203,5583,5584,5586,5588,5590,5592,5594,5596],{"class":205,"line":1701},[203,5585,1640],{"class":213},[203,5587,1258],{"class":209},[203,5589,5514],{"class":318},[203,5591,1258],{"class":209},[203,5593,5519],{"class":213},[203,5595,1258],{"class":209},[203,5597,1281],{"class":213},[203,5599,5600,5602,5604],{"class":205,"line":1706},[203,5601,4179],{"class":209},[203,5603,269],{"class":213},[203,5605,5606],{"class":272},"\u002F\u002F或者不写\n",[203,5608,5609],{"class":205,"line":1712},[203,5610,1654],{"class":213},[203,5612,5613,5615,5617],{"class":205,"line":1717},[203,5614,217],{"class":209},[203,5616,2062],{"class":2052},[203,5618,2065],{"class":213},[203,5620,5621],{"class":205,"line":1731},[203,5622,1635],{"class":213},[203,5624,5625,5627,5629,5631,5633],{"class":205,"line":1736},[203,5626,2074],{"class":209},[203,5628,1488],{"class":213},[203,5630,259],{"class":209},[203,5632,660],{"class":262},[203,5634,1380],{"class":213},[203,5636,5637,5639,5641,5643,5645],{"class":205,"line":1742},[203,5638,2074],{"class":209},[203,5640,2922],{"class":213},[203,5642,259],{"class":209},[203,5644,914],{"class":262},[203,5646,1380],{"class":213},[203,5648,5649,5652],{"class":205,"line":1763},[203,5650,5651],{"class":2052},"    swap",[203,5653,5427],{"class":213},[203,5655,5656],{"class":205,"line":1768},[203,5657,1654],{"class":213},[14,5659,5661],{"id":5660},"_24函数的常见形式","2.4函数的常见形式",[157,5663,5664],{},[160,5665,5666],{},"无参无返",[194,5668,5670],{"className":196,"code":5669,"language":198,"meta":27,"style":27},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[200,5671,5672,5681,5685,5698,5702,5710,5714,5719,5727],{"__ignoreMap":27},[203,5673,5674,5676,5679],{"class":205,"line":206},[203,5675,5454],{"class":209},[203,5677,5678],{"class":2052}," test01",[203,5680,2065],{"class":213},[203,5682,5683],{"class":205,"line":124},[203,5684,1635],{"class":213},[203,5686,5687,5689,5691,5694,5696],{"class":205,"line":1269},[203,5688,1640],{"class":213},[203,5690,1258],{"class":209},[203,5692,5693],{"class":318},"\"你好\"",[203,5695,1258],{"class":209},[203,5697,1281],{"class":213},[203,5699,5700],{"class":205,"line":1284},[203,5701,1654],{"class":213},[203,5703,5704,5706,5708],{"class":205,"line":1290},[203,5705,217],{"class":209},[203,5707,2062],{"class":2052},[203,5709,2065],{"class":213},[203,5711,5712],{"class":205,"line":1304},[203,5713,1635],{"class":213},[203,5715,5716],{"class":205,"line":1310},[203,5717,5718],{"class":272},"    \u002F\u002F函数调用\n",[203,5720,5721,5724],{"class":205,"line":1401},[203,5722,5723],{"class":2052},"    test01",[203,5725,5726],{"class":213},"();\n",[203,5728,5729],{"class":205,"line":1407},[203,5730,1654],{"class":213},[157,5732,5733],{"start":124},[160,5734,5735],{},"有参无返",[194,5737,5739],{"className":196,"code":5738,"language":198,"meta":27,"style":27},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[200,5740,5741,5756,5760,5772,5776,5784,5788,5799],{"__ignoreMap":27},[203,5742,5743,5745,5748,5750,5752,5754],{"class":205,"line":206},[203,5744,5454],{"class":209},[203,5746,5747],{"class":2052}," test02",[203,5749,214],{"class":213},[203,5751,217],{"class":209},[203,5753,1488],{"class":5306},[203,5755,220],{"class":213},[203,5757,5758],{"class":205,"line":124},[203,5759,1635],{"class":213},[203,5761,5762,5764,5766,5768,5770],{"class":205,"line":1269},[203,5763,1640],{"class":213},[203,5765,1258],{"class":209},[203,5767,5693],{"class":318},[203,5769,1258],{"class":209},[203,5771,1281],{"class":213},[203,5773,5774],{"class":205,"line":1284},[203,5775,1654],{"class":213},[203,5777,5778,5780,5782],{"class":205,"line":1290},[203,5779,217],{"class":209},[203,5781,2062],{"class":2052},[203,5783,2065],{"class":213},[203,5785,5786],{"class":205,"line":1304},[203,5787,1635],{"class":213},[203,5789,5790,5793,5795,5797],{"class":205,"line":1310},[203,5791,5792],{"class":2052},"    test02",[203,5794,214],{"class":213},[203,5796,525],{"class":262},[203,5798,2808],{"class":213},[203,5800,5801],{"class":205,"line":1401},[203,5802,1654],{"class":213},[157,5804,5805],{"start":1269},[160,5806,5807],{},"无参有返",[194,5809,5811],{"className":196,"code":5810,"language":198,"meta":27,"style":27},"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",[200,5812,5813,5822,5826,5838,5847,5851,5859,5863,5876,5895],{"__ignoreMap":27},[203,5814,5815,5817,5820],{"class":205,"line":206},[203,5816,217],{"class":209},[203,5818,5819],{"class":2052}," test03",[203,5821,2065],{"class":213},[203,5823,5824],{"class":205,"line":124},[203,5825,1635],{"class":213},[203,5827,5828,5830,5832,5834,5836],{"class":205,"line":1269},[203,5829,1640],{"class":213},[203,5831,1258],{"class":209},[203,5833,5693],{"class":318},[203,5835,1258],{"class":209},[203,5837,1281],{"class":213},[203,5839,5840,5842,5845],{"class":205,"line":1284},[203,5841,4179],{"class":209},[203,5843,5844],{"class":262}," 100",[203,5846,1380],{"class":213},[203,5848,5849],{"class":205,"line":1290},[203,5850,1654],{"class":213},[203,5852,5853,5855,5857],{"class":205,"line":1304},[203,5854,217],{"class":209},[203,5856,2062],{"class":2052},[203,5858,2065],{"class":213},[203,5860,5861],{"class":205,"line":1310},[203,5862,1635],{"class":213},[203,5864,5865,5867,5869,5871,5874],{"class":205,"line":1401},[203,5866,2074],{"class":209},[203,5868,5307],{"class":213},[203,5870,259],{"class":209},[203,5872,5873],{"class":2052},"test03",[203,5875,5726],{"class":213},[203,5877,5878,5880,5882,5884,5886,5888,5890,5892],{"class":205,"line":1407},[203,5879,1640],{"class":213},[203,5881,1258],{"class":209},[203,5883,5497],{"class":318},[203,5885,1258],{"class":209},[203,5887,5332],{"class":213},[203,5889,1258],{"class":209},[203,5891,1328],{"class":213},[203,5893,5894],{"class":272}," \u002F\u002F100\n",[203,5896,5897],{"class":205,"line":1419},[203,5898,1654],{"class":213},[19,5900,5901],{},"4.有参有返",[194,5903,5905],{"className":196,"code":5904,"language":198,"meta":27,"style":27},"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",[200,5906,5907,5922,5926,5939,5945,5949,5958,5962,5974,5988,6003],{"__ignoreMap":27},[203,5908,5909,5911,5914,5916,5918,5920],{"class":205,"line":206},[203,5910,217],{"class":209},[203,5912,5913],{"class":2052}," test04",[203,5915,214],{"class":213},[203,5917,217],{"class":209},[203,5919,1488],{"class":5306},[203,5921,220],{"class":213},[203,5923,5924],{"class":205,"line":124},[203,5925,1635],{"class":213},[203,5927,5928,5930,5932,5935,5937],{"class":205,"line":1269},[203,5929,1640],{"class":213},[203,5931,1258],{"class":209},[203,5933,5934],{"class":318},"\"hello\"",[203,5936,1258],{"class":209},[203,5938,1281],{"class":213},[203,5940,5941,5943],{"class":205,"line":1284},[203,5942,4179],{"class":209},[203,5944,1522],{"class":213},[203,5946,5947],{"class":205,"line":1290},[203,5948,1654],{"class":213},[203,5950,5951,5953,5956],{"class":205,"line":1304},[203,5952,217],{"class":209},[203,5954,5955],{"class":2052}," mian",[203,5957,2065],{"class":213},[203,5959,5960],{"class":205,"line":1310},[203,5961,1635],{"class":213},[203,5963,5964,5966,5968,5970,5972],{"class":205,"line":1401},[203,5965,2074],{"class":209},[203,5967,2922],{"class":213},[203,5969,259],{"class":209},[203,5971,431],{"class":262},[203,5973,1380],{"class":213},[203,5975,5976,5978,5980,5982,5985],{"class":205,"line":1407},[203,5977,2074],{"class":209},[203,5979,2938],{"class":213},[203,5981,259],{"class":209},[203,5983,5984],{"class":2052},"test04",[203,5986,5987],{"class":213},"(b);\n",[203,5989,5990,5992,5994,5996,5998,6000],{"class":205,"line":1419},[203,5991,1640],{"class":213},[203,5993,1258],{"class":209},[203,5995,502],{"class":213},[203,5997,1258],{"class":209},[203,5999,1328],{"class":213},[203,6001,6002],{"class":272}," \u002F\u002F1\n",[203,6004,6005],{"class":205,"line":1701},[203,6006,1654],{"class":213},[14,6008,6010],{"id":6009},"_25函数的声明","2.5函数的声明",[19,6012,6013],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6015,6016,6017],{},"函数的",[363,6018,6019],{},"声明可以多次，但是函数的定义只能有一次",[194,6021,6023],{"className":196,"code":6022,"language":198,"meta":27,"style":27},"\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",[200,6024,6025,6030,6035,6060,6069,6073,6085,6097,6113,6117,6137,6141,6160],{"__ignoreMap":27},[203,6026,6027],{"class":205,"line":206},[203,6028,6029],{"class":272},"\u002F\u002F函数声明\n",[203,6031,6032],{"class":205,"line":124},[203,6033,6034],{"class":272},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[203,6036,6037,6039,6042,6044,6046,6048,6050,6052,6054,6057],{"class":205,"line":1269},[203,6038,217],{"class":209},[203,6040,6041],{"class":2052}," max",[203,6043,214],{"class":213},[203,6045,217],{"class":209},[203,6047,1488],{"class":5306},[203,6049,592],{"class":213},[203,6051,217],{"class":209},[203,6053,2922],{"class":5306},[203,6055,6056],{"class":213},");",[203,6058,6059],{"class":272},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[203,6061,6062,6064,6066],{"class":205,"line":1284},[203,6063,217],{"class":209},[203,6065,2062],{"class":2052},[203,6067,6068],{"class":213},"() \n",[203,6070,6071],{"class":205,"line":1290},[203,6072,1635],{"class":213},[203,6074,6075,6077,6079,6081,6083],{"class":205,"line":1304},[203,6076,2074],{"class":209},[203,6078,1488],{"class":213},[203,6080,259],{"class":209},[203,6082,660],{"class":262},[203,6084,1380],{"class":213},[203,6086,6087,6089,6091,6093,6095],{"class":205,"line":1310},[203,6088,2074],{"class":209},[203,6090,2922],{"class":213},[203,6092,259],{"class":209},[203,6094,914],{"class":262},[203,6096,1380],{"class":213},[203,6098,6099,6101,6103,6106,6109,6111],{"class":205,"line":1401},[203,6100,1640],{"class":213},[203,6102,1258],{"class":209},[203,6104,6105],{"class":2052},"max",[203,6107,6108],{"class":213},"(a,b)",[203,6110,1258],{"class":209},[203,6112,1281],{"class":213},[203,6114,6115],{"class":205,"line":1407},[203,6116,1654],{"class":213},[203,6118,6119,6121,6123,6125,6127,6129,6131,6133,6135],{"class":205,"line":1419},[203,6120,217],{"class":209},[203,6122,6041],{"class":2052},[203,6124,214],{"class":213},[203,6126,217],{"class":209},[203,6128,1488],{"class":5306},[203,6130,592],{"class":213},[203,6132,217],{"class":209},[203,6134,2922],{"class":5306},[203,6136,220],{"class":213},[203,6138,6139],{"class":205,"line":1701},[203,6140,1635],{"class":213},[203,6142,6143,6145,6147,6149,6151,6153,6155,6157],{"class":205,"line":1706},[203,6144,4179],{"class":209},[203,6146,1488],{"class":213},[203,6148,1174],{"class":209},[203,6150,477],{"class":213},[203,6152,1200],{"class":209},[203,6154,452],{"class":213},[203,6156,1073],{"class":209},[203,6158,6159],{"class":213},"b;\n",[203,6161,6162],{"class":205,"line":1712},[203,6163,1654],{"class":213},[14,6165,6167],{"id":6166},"_26函数的分文件编写","2.6函数的分文件编写",[19,6169,6170],{},"4个步骤：",[1221,6172,6173,6176,6179,6182],{},[160,6174,6175],{},"1.创建后缀名为.h的头文件",[160,6177,6178],{},"2.创建后缀名为.cpp的源文件",[160,6180,6181],{},"3.在头文件中写函数的定义",[160,6183,6184],{},"4.在源文件中写函数的定义\n示例：",[19,6186,6187],{},"头文件：swap.h",[194,6189,6191],{"className":196,"code":6190,"language":198,"meta":27,"style":27},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[200,6192,6193,6199,6209,6213],{"__ignoreMap":27},[203,6194,6195,6197],{"class":205,"line":206},[203,6196,2038],{"class":209},[203,6198,2041],{"class":318},[203,6200,6201,6203,6205,6207],{"class":205,"line":124},[203,6202,2046],{"class":209},[203,6204,2049],{"class":209},[203,6206,2053],{"class":2052},[203,6208,1380],{"class":213},[203,6210,6211],{"class":205,"line":1269},[203,6212,6029],{"class":272},[203,6214,6215,6217,6219,6221,6223,6225,6227,6229,6231],{"class":205,"line":1284},[203,6216,5454],{"class":209},[203,6218,5457],{"class":2052},[203,6220,214],{"class":213},[203,6222,217],{"class":209},[203,6224,1488],{"class":5306},[203,6226,592],{"class":213},[203,6228,217],{"class":209},[203,6230,2922],{"class":5306},[203,6232,2808],{"class":213},[19,6234,6235],{},"源文件：swap.cpp",[194,6237,6239],{"className":196,"code":6238,"language":198,"meta":27,"style":27},"#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",[200,6240,6241,6248,6253,6273,6277,6288,6297,6306,6323,6340],{"__ignoreMap":27},[203,6242,6243,6245],{"class":205,"line":206},[203,6244,2038],{"class":209},[203,6246,6247],{"class":318}," \"swap.h\"\n",[203,6249,6250],{"class":205,"line":124},[203,6251,6252],{"class":272},"\u002F\u002F函数的定义\n",[203,6254,6255,6257,6259,6261,6263,6265,6267,6269,6271],{"class":205,"line":1269},[203,6256,5454],{"class":209},[203,6258,5457],{"class":2052},[203,6260,214],{"class":213},[203,6262,217],{"class":209},[203,6264,1488],{"class":5306},[203,6266,592],{"class":213},[203,6268,217],{"class":209},[203,6270,2922],{"class":5306},[203,6272,220],{"class":213},[203,6274,6275],{"class":205,"line":1284},[203,6276,1635],{"class":213},[203,6278,6279,6281,6283,6285],{"class":205,"line":1290},[203,6280,2074],{"class":209},[203,6282,4344],{"class":213},[203,6284,259],{"class":209},[203,6286,6287],{"class":213},"a;\n",[203,6289,6290,6293,6295],{"class":205,"line":1304},[203,6291,6292],{"class":213},"    a",[203,6294,259],{"class":209},[203,6296,6159],{"class":213},[203,6298,6299,6302,6304],{"class":205,"line":1310},[203,6300,6301],{"class":213},"    b",[203,6303,259],{"class":209},[203,6305,4369],{"class":213},[203,6307,6308,6310,6312,6315,6317,6319,6321],{"class":205,"line":1401},[203,6309,1640],{"class":213},[203,6311,1258],{"class":209},[203,6313,6314],{"class":318},"\"a=\"",[203,6316,1258],{"class":209},[203,6318,452],{"class":213},[203,6320,1258],{"class":209},[203,6322,1281],{"class":213},[203,6324,6325,6327,6329,6332,6334,6336,6338],{"class":205,"line":1407},[203,6326,1640],{"class":213},[203,6328,1258],{"class":209},[203,6330,6331],{"class":318},"\"b=\"",[203,6333,1258],{"class":209},[203,6335,477],{"class":213},[203,6337,1258],{"class":209},[203,6339,1281],{"class":213},[203,6341,6342],{"class":205,"line":1419},[203,6343,1654],{"class":213},[5216,6345,6346],{},"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":27,"searchDepth":124,"depth":124,"links":6348},[6349,6350,6351,6352,6353,6354],{"id":5262,"depth":124,"text":5263},{"id":5351,"depth":124,"text":5352},{"id":5434,"depth":124,"text":5435},{"id":5660,"depth":124,"text":5661},{"id":6009,"depth":124,"text":6010},{"id":6166,"depth":124,"text":6167},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5254,"description":27},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6361,"title":6362,"body":6363,"description":6370,"extension":129,"meta":7775,"navigation":131,"path":7776,"seo":7777,"stem":7778,"__hash__":7779},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6364,"toc":7765},[6365,6368,6371,6375,6537,6541,6544,6547,6550,6553,6693,6697,6700,6703,6706,6771,6775,6780,6847,6850,6854,6857,6868,6873,6893,6896,6901,6920,6923,6927,6946,6949,6953,7188,7192,7195,7198,7201,7363,7366,7370,7373,7379,7762],[10,6366,6362],{"id":6367},"_3指针",[19,6369,6370],{},"通过指针保存一个地址，指针就是个地址",[14,6372,6374],{"id":6373},"_31定义指针","3.1定义指针",[194,6376,6378],{"className":196,"code":6377,"language":198,"meta":27,"style":27},"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",[200,6379,6380,6388,6392,6397,6409,6414,6422,6432,6450,6470,6474,6479,6484,6489,6503,6519,6533],{"__ignoreMap":27},[203,6381,6382,6384,6386],{"class":205,"line":206},[203,6383,217],{"class":209},[203,6385,2062],{"class":2052},[203,6387,2065],{"class":213},[203,6389,6390],{"class":205,"line":124},[203,6391,1635],{"class":213},[203,6393,6394],{"class":205,"line":1269},[203,6395,6396],{"class":272},"    \u002F\u002F1.定义指针\n",[203,6398,6399,6401,6403,6405,6407],{"class":205,"line":1284},[203,6400,2074],{"class":209},[203,6402,1488],{"class":213},[203,6404,259],{"class":209},[203,6406,660],{"class":262},[203,6408,1380],{"class":213},[203,6410,6411],{"class":205,"line":1290},[203,6412,6413],{"class":272},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[203,6415,6416,6419],{"class":205,"line":1304},[203,6417,6418],{"class":209},"    int*",[203,6420,6421],{"class":213},"p;\n",[203,6423,6424,6427,6430],{"class":205,"line":1310},[203,6425,6426],{"class":213},"    p",[203,6428,6429],{"class":209},"=&",[203,6431,6287],{"class":213},[203,6433,6434,6436,6438,6441,6444,6446,6448],{"class":205,"line":1401},[203,6435,1640],{"class":213},[203,6437,1258],{"class":209},[203,6439,6440],{"class":318},"\"a的地址为：\"",[203,6442,6443],{"class":209},"\u003C\u003C&",[203,6445,452],{"class":213},[203,6447,1258],{"class":209},[203,6449,1281],{"class":213},[203,6451,6452,6454,6456,6459,6461,6463,6465,6467],{"class":205,"line":1407},[203,6453,1640],{"class":213},[203,6455,1258],{"class":209},[203,6457,6458],{"class":318},"\"指针p为：\"",[203,6460,1258],{"class":209},[203,6462,19],{"class":213},[203,6464,1258],{"class":209},[203,6466,1328],{"class":213},[203,6468,6469],{"class":272},"\u002F\u002F指针p表示的就是a的地址\n",[203,6471,6472],{"class":205,"line":1419},[203,6473,2489],{"emptyLinePlaceholder":131},[203,6475,6476],{"class":205,"line":1701},[203,6477,6478],{"class":272},"    \u002F\u002F2.使用指针\n",[203,6480,6481],{"class":205,"line":1706},[203,6482,6483],{"class":272},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[203,6485,6486],{"class":205,"line":1712},[203,6487,6488],{"class":272},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[203,6490,6491,6494,6496,6498,6501],{"class":205,"line":1717},[203,6492,6493],{"class":209},"    *",[203,6495,19],{"class":213},[203,6497,259],{"class":209},[203,6499,6500],{"class":262},"1000",[203,6502,1380],{"class":213},[203,6504,6505,6507,6510,6512,6514,6516],{"class":205,"line":1731},[203,6506,1640],{"class":213},[203,6508,6509],{"class":209},"\u003C\u003C*",[203,6511,19],{"class":213},[203,6513,1258],{"class":209},[203,6515,1328],{"class":213},[203,6517,6518],{"class":272},"\u002F\u002F1000\n",[203,6520,6521,6523,6525,6527,6529,6531],{"class":205,"line":1736},[203,6522,1640],{"class":213},[203,6524,1258],{"class":209},[203,6526,452],{"class":213},[203,6528,1258],{"class":209},[203,6530,1328],{"class":213},[203,6532,6518],{"class":272},[203,6534,6535],{"class":205,"line":1742},[203,6536,1654],{"class":213},[14,6538,6540],{"id":6539},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,6542,6543],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,6545,6546],{},"在32位操作系统下：占用4个字节空间",[19,6548,6549],{},"在64位操作系统下：占用8个字节空间",[19,6551,6552],{},"上方是不管啥数据类型的",[194,6554,6556],{"className":196,"code":6555,"language":198,"meta":27,"style":27},"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",[200,6557,6558,6566,6570,6575,6587,6592,6597,6602,6615,6637,6663,6689],{"__ignoreMap":27},[203,6559,6560,6562,6564],{"class":205,"line":206},[203,6561,217],{"class":209},[203,6563,2062],{"class":2052},[203,6565,2065],{"class":213},[203,6567,6568],{"class":205,"line":124},[203,6569,1635],{"class":213},[203,6571,6572],{"class":205,"line":1269},[203,6573,6574],{"class":272},"    \u002F\u002F指针所占内存空间\n",[203,6576,6577,6579,6581,6583,6585],{"class":205,"line":1284},[203,6578,2074],{"class":209},[203,6580,1488],{"class":213},[203,6582,259],{"class":209},[203,6584,660],{"class":262},[203,6586,1380],{"class":213},[203,6588,6589],{"class":205,"line":1290},[203,6590,6591],{"class":272},"    \u002F\u002Fint *p;\n",[203,6593,6594],{"class":205,"line":1304},[203,6595,6596],{"class":272},"    \u002F\u002Fp=&a;\n",[203,6598,6599],{"class":205,"line":1310},[203,6600,6601],{"class":272},"    \u002F\u002F上述可以写为以下：\n",[203,6603,6604,6606,6609,6611,6613],{"class":205,"line":1401},[203,6605,2074],{"class":209},[203,6607,6608],{"class":209}," *",[203,6610,19],{"class":213},[203,6612,6429],{"class":209},[203,6614,6287],{"class":213},[203,6616,6617,6620,6622,6625,6627,6630,6632,6634],{"class":205,"line":1407},[203,6618,6619],{"class":213},"    cout ",[203,6621,1258],{"class":209},[203,6623,6624],{"class":318},"\"sizeof(int *)\"",[203,6626,1462],{"class":209},[203,6628,6629],{"class":213},"(p)",[203,6631,1258],{"class":209},[203,6633,1328],{"class":213},[203,6635,6636],{"class":272},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[203,6638,6639,6641,6643,6645,6647,6649,6651,6653,6655,6657,6660],{"class":205,"line":1419},[203,6640,6619],{"class":213},[203,6642,1258],{"class":209},[203,6644,6624],{"class":318},[203,6646,1462],{"class":209},[203,6648,214],{"class":213},[203,6650,217],{"class":209},[203,6652,6608],{"class":209},[203,6654,643],{"class":213},[203,6656,1258],{"class":209},[203,6658,6659],{"class":213},"endl",[203,6661,6662],{"class":272},"  \u002F\u002F4字节(32位的话)\n",[203,6664,6665,6667,6669,6672,6674,6676,6678,6680,6682,6684,6686],{"class":205,"line":1701},[203,6666,6619],{"class":213},[203,6668,1258],{"class":209},[203,6670,6671],{"class":318},"\"sizeof(char *)\"",[203,6673,1462],{"class":209},[203,6675,214],{"class":213},[203,6677,310],{"class":209},[203,6679,6608],{"class":209},[203,6681,643],{"class":213},[203,6683,1258],{"class":209},[203,6685,1328],{"class":213},[203,6687,6688],{"class":272}," \u002F\u002F4字节(32位的话)\n",[203,6690,6691],{"class":205,"line":1706},[203,6692,1654],{"class":213},[14,6694,6696],{"id":6695},"_33空指针","3.3空指针",[19,6698,6699],{},"空指针：指针变量指向内存中编号为0的空间",[19,6701,6702],{},"用途：初始化指针变量",[19,6704,6705],{},"注意：空指针指向的内存是不可以访问的",[194,6707,6709],{"className":196,"code":6708,"language":198,"meta":27,"style":27},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[200,6710,6711,6719,6723,6728,6742,6747,6762,6767],{"__ignoreMap":27},[203,6712,6713,6715,6717],{"class":205,"line":206},[203,6714,217],{"class":209},[203,6716,2062],{"class":2052},[203,6718,2065],{"class":213},[203,6720,6721],{"class":205,"line":124},[203,6722,1635],{"class":213},[203,6724,6725],{"class":205,"line":1269},[203,6726,6727],{"class":272},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[203,6729,6730,6732,6734,6736,6738,6740],{"class":205,"line":1284},[203,6731,2074],{"class":209},[203,6733,6608],{"class":209},[203,6735,19],{"class":213},[203,6737,259],{"class":209},[203,6739,2481],{"class":262},[203,6741,1380],{"class":213},[203,6743,6744],{"class":205,"line":1290},[203,6745,6746],{"class":272},"    \u002F\u002F2.空指针不能进行访问\n",[203,6748,6749,6751,6753,6755,6757,6759],{"class":205,"line":1304},[203,6750,6493],{"class":209},[203,6752,19],{"class":213},[203,6754,259],{"class":209},[203,6756,525],{"class":262},[203,6758,269],{"class":213},[203,6760,6761],{"class":272},"\u002F\u002F直接报错，压根不能访问\n",[203,6763,6764],{"class":205,"line":1310},[203,6765,6766],{"class":272},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[203,6768,6769],{"class":205,"line":1401},[203,6770,1654],{"class":213},[14,6772,6774],{"id":6773},"_34野指针","3.4野指针",[19,6776,6777],{},[363,6778,6779],{},"指针变量指向非法的内存空间",[194,6781,6783],{"className":196,"code":6782,"language":198,"meta":27,"style":27},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[200,6784,6785,6793,6797,6826,6831,6843],{"__ignoreMap":27},[203,6786,6787,6789,6791],{"class":205,"line":206},[203,6788,217],{"class":209},[203,6790,2062],{"class":2052},[203,6792,2065],{"class":213},[203,6794,6795],{"class":205,"line":124},[203,6796,1635],{"class":213},[203,6798,6799,6801,6803,6805,6807,6809,6811,6813,6815,6818,6821,6823],{"class":205,"line":1269},[203,6800,2074],{"class":209},[203,6802,6608],{"class":209},[203,6804,19],{"class":213},[203,6806,259],{"class":209},[203,6808,214],{"class":213},[203,6810,217],{"class":209},[203,6812,6608],{"class":209},[203,6814,643],{"class":213},[203,6816,6817],{"class":209},"0x",[203,6819,6820],{"class":262},"1100",[203,6822,269],{"class":213},[203,6824,6825],{"class":272}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[203,6827,6828],{"class":205,"line":1284},[203,6829,6830],{"class":272},"    \u002F\u002F访问野指针报错\n",[203,6832,6833,6835,6837,6839,6841],{"class":205,"line":1290},[203,6834,1640],{"class":213},[203,6836,6509],{"class":209},[203,6838,19],{"class":213},[203,6840,1258],{"class":209},[203,6842,1281],{"class":213},[203,6844,6845],{"class":205,"line":1304},[203,6846,1654],{"class":213},[19,6848,6849],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,6851,6853],{"id":6852},"_35const修饰指针","3.5const修饰指针",[19,6855,6856],{},"三种情况：",[1221,6858,6859,6862,6865],{},[160,6860,6861],{},"const修饰指针 常量指针",[160,6863,6864],{},"const修饰常量 指针常量",[160,6866,6867],{},"const即修饰指针，又修饰常量",[157,6869,6870],{},[160,6871,6872],{},"常量指针",[194,6874,6876],{"className":196,"code":6875,"language":198,"meta":27,"style":27},"const int *p=&a;\n",[200,6877,6878],{"__ignoreMap":27},[203,6879,6880,6883,6885,6887,6889,6891],{"class":205,"line":206},[203,6881,6882],{"class":209},"const",[203,6884,2471],{"class":209},[203,6886,6608],{"class":209},[203,6888,19],{"class":213},[203,6890,6429],{"class":209},[203,6892,6287],{"class":213},[19,6894,6895],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[157,6897,6898],{"start":124},[160,6899,6900],{},"指针常量",[194,6902,6904],{"className":196,"code":6903,"language":198,"meta":27,"style":27},"int *const p=&a;\n",[200,6905,6906],{"__ignoreMap":27},[203,6907,6908,6910,6913,6916,6918],{"class":205,"line":206},[203,6909,217],{"class":209},[203,6911,6912],{"class":209}," *const",[203,6914,6915],{"class":213}," p",[203,6917,6429],{"class":209},[203,6919,6287],{"class":213},[19,6921,6922],{},"指针的指向不可以改，指针指向的值可以改",[157,6924,6925],{"start":1269},[160,6926,6867],{},[194,6928,6930],{"className":196,"code":6929,"language":198,"meta":27,"style":27},"const int *const p=&a;\n",[200,6931,6932],{"__ignoreMap":27},[203,6933,6934,6936,6938,6940,6942,6944],{"class":205,"line":206},[203,6935,6882],{"class":209},[203,6937,2471],{"class":209},[203,6939,6912],{"class":209},[203,6941,6915],{"class":213},[203,6943,6429],{"class":209},[203,6945,6287],{"class":213},[19,6947,6948],{},"指针的指向和指针指向的值都不可以改变",[14,6950,6952],{"id":6951},"_36指针和数组","3.6指针和数组",[194,6954,6956],{"className":196,"code":6955,"language":198,"meta":27,"style":27},"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",[200,6957,6958,6966,6970,6975,7029,7050,7066,7082,7093,7110,7115,7129,7155,7159,7171,7180,7184],{"__ignoreMap":27},[203,6959,6960,6962,6964],{"class":205,"line":206},[203,6961,217],{"class":209},[203,6963,2062],{"class":2052},[203,6965,2065],{"class":213},[203,6967,6968],{"class":205,"line":124},[203,6969,1635],{"class":213},[203,6971,6972],{"class":205,"line":1269},[203,6973,6974],{"class":272},"    \u002F\u002F利用指针访问数组中的元素\n",[203,6976,6977,6979,6981,6983,6985,6987,6989,6991,6993,6995,6997,6999,7001,7003,7005,7007,7009,7011,7013,7015,7017,7019,7021,7023,7025,7027],{"class":205,"line":1284},[203,6978,2074],{"class":209},[203,6980,4051],{"class":213},[203,6982,660],{"class":262},[203,6984,1154],{"class":213},[203,6986,259],{"class":209},[203,6988,1110],{"class":213},[203,6990,431],{"class":262},[203,6992,592],{"class":213},[203,6994,291],{"class":262},[203,6996,592],{"class":213},[203,6998,285],{"class":262},[203,7000,592],{"class":213},[203,7002,507],{"class":262},[203,7004,592],{"class":213},[203,7006,533],{"class":262},[203,7008,592],{"class":213},[203,7010,558],{"class":262},[203,7012,592],{"class":213},[203,7014,583],{"class":262},[203,7016,592],{"class":213},[203,7018,609],{"class":262},[203,7020,592],{"class":213},[203,7022,634],{"class":262},[203,7024,592],{"class":213},[203,7026,660],{"class":262},[203,7028,4084],{"class":213},[203,7030,7031,7033,7035,7038,7040,7042,7044,7046,7048],{"class":205,"line":1290},[203,7032,1640],{"class":213},[203,7034,1258],{"class":209},[203,7036,7037],{"class":318},"\"数组的第一个元素为：\"",[203,7039,1258],{"class":209},[203,7041,3995],{"class":213},[203,7043,405],{"class":262},[203,7045,1154],{"class":213},[203,7047,1258],{"class":209},[203,7049,1281],{"class":213},[203,7051,7052,7054,7056,7058,7060,7063],{"class":205,"line":1304},[203,7053,2074],{"class":209},[203,7055,6608],{"class":209},[203,7057,19],{"class":213},[203,7059,259],{"class":209},[203,7061,7062],{"class":213},"arr;",[203,7064,7065],{"class":272},"\u002F\u002F注意数才要加取地址符号&\n",[203,7067,7068,7070,7072,7074,7076,7078,7080],{"class":205,"line":1310},[203,7069,1640],{"class":213},[203,7071,1258],{"class":209},[203,7073,7037],{"class":318},[203,7075,6509],{"class":209},[203,7077,19],{"class":213},[203,7079,1258],{"class":209},[203,7081,1281],{"class":213},[203,7083,7084,7086,7088,7090],{"class":205,"line":1401},[203,7085,6426],{"class":213},[203,7087,2381],{"class":209},[203,7089,269],{"class":213},[203,7091,7092],{"class":272}," \u002F\u002F让指针向后偏移4个字节\n",[203,7094,7095,7097,7099,7102,7104,7106,7108],{"class":205,"line":1407},[203,7096,1640],{"class":213},[203,7098,1258],{"class":209},[203,7100,7101],{"class":318},"\"数组的第二个元素为：\"",[203,7103,6509],{"class":209},[203,7105,19],{"class":213},[203,7107,1258],{"class":209},[203,7109,1281],{"class":213},[203,7111,7112],{"class":205,"line":1419},[203,7113,7114],{"class":272},"    \u002F\u002F利用指针遍历数组\n",[203,7116,7117,7119,7121,7124,7126],{"class":205,"line":1701},[203,7118,2074],{"class":209},[203,7120,6608],{"class":209},[203,7122,7123],{"class":213},"p2",[203,7125,259],{"class":209},[203,7127,7128],{"class":213},"arr;\n",[203,7130,7131,7133,7135,7137,7139,7141,7143,7145,7147,7149,7151,7153],{"class":205,"line":1706},[203,7132,3290],{"class":209},[203,7134,1747],{"class":213},[203,7136,217],{"class":209},[203,7138,3121],{"class":213},[203,7140,259],{"class":209},[203,7142,405],{"class":262},[203,7144,3128],{"class":213},[203,7146,1124],{"class":209},[203,7148,660],{"class":262},[203,7150,3128],{"class":213},[203,7152,2381],{"class":209},[203,7154,220],{"class":213},[203,7156,7157],{"class":205,"line":1712},[203,7158,2119],{"class":213},[203,7160,7161,7163,7165,7167,7169],{"class":205,"line":1717},[203,7162,3540],{"class":213},[203,7164,6509],{"class":209},[203,7166,7123],{"class":213},[203,7168,1258],{"class":209},[203,7170,1281],{"class":213},[203,7172,7173,7176,7178],{"class":205,"line":1731},[203,7174,7175],{"class":213},"        p2",[203,7177,2381],{"class":209},[203,7179,1380],{"class":213},[203,7181,7182],{"class":205,"line":1736},[203,7183,2276],{"class":213},[203,7185,7186],{"class":205,"line":1742},[203,7187,1654],{"class":213},[14,7189,7191],{"id":7190},"_37指针和函数","3.7指针和函数",[19,7193,7194],{},"利用指针做函数参数，可以修改实参的值",[19,7196,7197],{},"值传递：只改变形参，不改变实参",[19,7199,7200],{},"地址传递：",[194,7202,7204],{"className":196,"code":7203,"language":198,"meta":27,"style":27},"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",[200,7205,7206,7231,7235,7247,7258,7268,7272,7280,7284,7296,7308,7313,7329,7344,7359],{"__ignoreMap":27},[203,7207,7208,7210,7212,7214,7216,7218,7221,7223,7225,7227,7229],{"class":205,"line":206},[203,7209,5454],{"class":209},[203,7211,5457],{"class":2052},[203,7213,214],{"class":213},[203,7215,217],{"class":209},[203,7217,6608],{"class":209},[203,7219,7220],{"class":5306},"p1",[203,7222,592],{"class":213},[203,7224,217],{"class":209},[203,7226,6608],{"class":209},[203,7228,7123],{"class":5306},[203,7230,220],{"class":213},[203,7232,7233],{"class":205,"line":124},[203,7234,1635],{"class":213},[203,7236,7237,7239,7241,7244],{"class":205,"line":1269},[203,7238,2074],{"class":209},[203,7240,4344],{"class":213},[203,7242,7243],{"class":209},"=*",[203,7245,7246],{"class":213},"p1;\n",[203,7248,7249,7251,7253,7255],{"class":205,"line":1284},[203,7250,6493],{"class":209},[203,7252,7220],{"class":213},[203,7254,7243],{"class":209},[203,7256,7257],{"class":213},"p2;\n",[203,7259,7260,7262,7264,7266],{"class":205,"line":1290},[203,7261,6493],{"class":209},[203,7263,7123],{"class":213},[203,7265,259],{"class":209},[203,7267,4369],{"class":213},[203,7269,7270],{"class":205,"line":1304},[203,7271,1654],{"class":213},[203,7273,7274,7276,7278],{"class":205,"line":1310},[203,7275,217],{"class":209},[203,7277,2062],{"class":2052},[203,7279,2065],{"class":213},[203,7281,7282],{"class":205,"line":1401},[203,7283,1635],{"class":213},[203,7285,7286,7288,7290,7292,7294],{"class":205,"line":1407},[203,7287,2074],{"class":209},[203,7289,1488],{"class":213},[203,7291,259],{"class":209},[203,7293,660],{"class":262},[203,7295,1380],{"class":213},[203,7297,7298,7300,7302,7304,7306],{"class":205,"line":1419},[203,7299,2074],{"class":209},[203,7301,2922],{"class":213},[203,7303,259],{"class":209},[203,7305,914],{"class":262},[203,7307,1380],{"class":213},[203,7309,7310],{"class":205,"line":1701},[203,7311,7312],{"class":272},"    \u002F\u002F地址传递\n",[203,7314,7315,7317,7319,7321,7324,7326],{"class":205,"line":1706},[203,7316,5651],{"class":2052},[203,7318,214],{"class":213},[203,7320,567],{"class":209},[203,7322,7323],{"class":213},"a,",[203,7325,567],{"class":209},[203,7327,7328],{"class":213},"b);\n",[203,7330,7331,7333,7335,7337,7339,7341],{"class":205,"line":1712},[203,7332,1640],{"class":213},[203,7334,1258],{"class":209},[203,7336,452],{"class":213},[203,7338,1258],{"class":209},[203,7340,1328],{"class":213},[203,7342,7343],{"class":272},"\u002F\u002F20\n",[203,7345,7346,7348,7350,7352,7354,7356],{"class":205,"line":1717},[203,7347,1640],{"class":213},[203,7349,1258],{"class":209},[203,7351,477],{"class":213},[203,7353,1258],{"class":209},[203,7355,1328],{"class":213},[203,7357,7358],{"class":272},"\u002F\u002F10\n",[203,7360,7361],{"class":205,"line":1731},[203,7362,1654],{"class":213},[19,7364,7365],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7367,7369],{"id":7368},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,7371,7372],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,7374,7375,7376,7378],{},"例如数组：int arr",[203,7377,660],{},"={4,3,6,9,1,2,10,8,7,5}",[194,7380,7382],{"className":196,"code":7381,"language":198,"meta":27,"style":27},"#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",[200,7383,7384,7390,7400,7424,7428,7459,7463,7497,7501,7519,7523,7534,7549,7564,7568,7572,7576,7580,7584,7592,7596,7601,7655,7667,7679,7684,7692,7696,7701,7726,7730,7745,7754,7758],{"__ignoreMap":27},[203,7385,7386,7388],{"class":205,"line":206},[203,7387,2038],{"class":209},[203,7389,2041],{"class":318},[203,7391,7392,7394,7396,7398],{"class":205,"line":124},[203,7393,2046],{"class":209},[203,7395,2049],{"class":209},[203,7397,2053],{"class":2052},[203,7399,1380],{"class":213},[203,7401,7402,7404,7407,7409,7411,7413,7415,7417,7419,7422],{"class":205,"line":1269},[203,7403,5454],{"class":209},[203,7405,7406],{"class":2052}," bubbleSort",[203,7408,214],{"class":213},[203,7410,217],{"class":209},[203,7412,6608],{"class":209},[203,7414,19],{"class":5306},[203,7416,592],{"class":213},[203,7418,217],{"class":209},[203,7420,7421],{"class":5306}," len",[203,7423,220],{"class":213},[203,7425,7426],{"class":205,"line":1284},[203,7427,1635],{"class":213},[203,7429,7430,7432,7434,7436,7438,7440,7442,7444,7446,7449,7451,7453,7455,7457],{"class":205,"line":1290},[203,7431,3290],{"class":209},[203,7433,214],{"class":213},[203,7435,217],{"class":209},[203,7437,3121],{"class":213},[203,7439,259],{"class":209},[203,7441,405],{"class":262},[203,7443,3128],{"class":213},[203,7445,1124],{"class":209},[203,7447,7448],{"class":213},"len",[203,7450,746],{"class":209},[203,7452,431],{"class":262},[203,7454,3128],{"class":213},[203,7456,2381],{"class":209},[203,7458,220],{"class":213},[203,7460,7461],{"class":205,"line":1304},[203,7462,2119],{"class":213},[203,7464,7465,7467,7469,7471,7473,7475,7477,7479,7481,7483,7485,7487,7489,7491,7493,7495],{"class":205,"line":1310},[203,7466,3492],{"class":209},[203,7468,214],{"class":213},[203,7470,217],{"class":209},[203,7472,3499],{"class":213},[203,7474,259],{"class":209},[203,7476,405],{"class":262},[203,7478,3506],{"class":213},[203,7480,1124],{"class":209},[203,7482,7448],{"class":213},[203,7484,746],{"class":209},[203,7486,655],{"class":213},[203,7488,746],{"class":209},[203,7490,431],{"class":262},[203,7492,3506],{"class":213},[203,7494,2381],{"class":209},[203,7496,220],{"class":213},[203,7498,7499],{"class":205,"line":1401},[203,7500,2599],{"class":213},[203,7502,7503,7505,7508,7510,7513,7515,7517],{"class":205,"line":1407},[203,7504,4731],{"class":209},[203,7506,7507],{"class":213},"(p[j]",[203,7509,1174],{"class":209},[203,7511,7512],{"class":213},"p[j",[203,7514,695],{"class":209},[203,7516,431],{"class":262},[203,7518,4746],{"class":213},[203,7520,7521],{"class":205,"line":1419},[203,7522,4751],{"class":213},[203,7524,7525,7527,7529,7531],{"class":205,"line":1701},[203,7526,4756],{"class":209},[203,7528,4344],{"class":213},[203,7530,259],{"class":209},[203,7532,7533],{"class":213},"p[j];\n",[203,7535,7536,7539,7541,7543,7545,7547],{"class":205,"line":1706},[203,7537,7538],{"class":213},"                p[j]",[203,7540,259],{"class":209},[203,7542,7512],{"class":213},[203,7544,695],{"class":209},[203,7546,431],{"class":262},[203,7548,4779],{"class":213},[203,7550,7551,7554,7556,7558,7560,7562],{"class":205,"line":1712},[203,7552,7553],{"class":213},"                p[j",[203,7555,695],{"class":209},[203,7557,431],{"class":262},[203,7559,1154],{"class":213},[203,7561,259],{"class":209},[203,7563,4369],{"class":213},[203,7565,7566],{"class":205,"line":1717},[203,7567,4799],{"class":213},[203,7569,7570],{"class":205,"line":1731},[203,7571,2618],{"class":213},[203,7573,7574],{"class":205,"line":1736},[203,7575,2276],{"class":213},[203,7577,7578],{"class":205,"line":1742},[203,7579,1654],{"class":213},[203,7581,7582],{"class":205,"line":1763},[203,7583,2489],{"emptyLinePlaceholder":131},[203,7585,7586,7588,7590],{"class":205,"line":1768},[203,7587,217],{"class":209},[203,7589,2062],{"class":2052},[203,7591,2065],{"class":213},[203,7593,7594],{"class":205,"line":1782},[203,7595,1635],{"class":213},[203,7597,7598],{"class":205,"line":1787},[203,7599,7600],{"class":272},"    \u002F\u002F 1.创建数组\n",[203,7602,7603,7605,7607,7609,7611,7613,7615,7617,7619,7621,7623,7625,7627,7629,7631,7633,7635,7637,7639,7641,7643,7645,7647,7649,7651,7653],{"class":205,"line":1816},[203,7604,2074],{"class":209},[203,7606,4051],{"class":213},[203,7608,660],{"class":262},[203,7610,1154],{"class":213},[203,7612,259],{"class":209},[203,7614,1110],{"class":213},[203,7616,507],{"class":262},[203,7618,592],{"class":213},[203,7620,285],{"class":262},[203,7622,592],{"class":213},[203,7624,558],{"class":262},[203,7626,592],{"class":213},[203,7628,634],{"class":262},[203,7630,592],{"class":213},[203,7632,431],{"class":262},[203,7634,592],{"class":213},[203,7636,291],{"class":262},[203,7638,592],{"class":213},[203,7640,660],{"class":262},[203,7642,592],{"class":213},[203,7644,609],{"class":262},[203,7646,592],{"class":213},[203,7648,583],{"class":262},[203,7650,592],{"class":213},[203,7652,533],{"class":262},[203,7654,4084],{"class":213},[203,7656,7657,7659,7661,7663,7665],{"class":205,"line":1821},[203,7658,2074],{"class":209},[203,7660,7421],{"class":213},[203,7662,259],{"class":209},[203,7664,660],{"class":262},[203,7666,1380],{"class":213},[203,7668,7669,7671,7673,7675,7677],{"class":205,"line":1838},[203,7670,2074],{"class":209},[203,7672,6608],{"class":209},[203,7674,19],{"class":213},[203,7676,259],{"class":209},[203,7678,7128],{"class":213},[203,7680,7681],{"class":205,"line":1843},[203,7682,7683],{"class":272},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[203,7685,7686,7689],{"class":205,"line":1848},[203,7687,7688],{"class":2052},"    bubbleSort",[203,7690,7691],{"class":213},"(p,len);\n",[203,7693,7694],{"class":205,"line":1853},[203,7695,2489],{"emptyLinePlaceholder":131},[203,7697,7698],{"class":205,"line":1867},[203,7699,7700],{"class":272},"    \u002F\u002F 3.打印排序后的数组\n",[203,7702,7703,7705,7707,7709,7711,7713,7715,7717,7719,7722,7724],{"class":205,"line":1872},[203,7704,3290],{"class":209},[203,7706,1747],{"class":213},[203,7708,217],{"class":209},[203,7710,3121],{"class":213},[203,7712,259],{"class":209},[203,7714,405],{"class":262},[203,7716,3303],{"class":213},[203,7718,1124],{"class":209},[203,7720,7721],{"class":213},"len; i",[203,7723,2381],{"class":209},[203,7725,220],{"class":213},[203,7727,7728],{"class":205,"line":2666},[203,7729,2119],{"class":213},[203,7731,7732,7734,7736,7738,7740,7743],{"class":205,"line":2680},[203,7733,3540],{"class":213},[203,7735,6509],{"class":209},[203,7737,19],{"class":213},[203,7739,1258],{"class":209},[203,7741,7742],{"class":318},"\"\"",[203,7744,1380],{"class":213},[203,7746,7747,7750,7752],{"class":205,"line":2688},[203,7748,7749],{"class":213},"        p",[203,7751,2381],{"class":209},[203,7753,1380],{"class":213},[203,7755,7756],{"class":205,"line":2693},[203,7757,2276],{"class":213},[203,7759,7760],{"class":205,"line":2699},[203,7761,1654],{"class":213},[5216,7763,7764],{},"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":27,"searchDepth":124,"depth":124,"links":7766},[7767,7768,7769,7770,7771,7772,7773,7774],{"id":6373,"depth":124,"text":6374},{"id":6539,"depth":124,"text":6540},{"id":6695,"depth":124,"text":6696},{"id":6773,"depth":124,"text":6774},{"id":6852,"depth":124,"text":6853},{"id":6951,"depth":124,"text":6952},{"id":7190,"depth":124,"text":7191},{"id":7368,"depth":124,"text":7369},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6362,"description":6370},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7781,"title":7782,"body":7783,"description":7790,"extension":129,"meta":10764,"navigation":131,"path":10765,"seo":10766,"stem":10767,"__hash__":10768},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7784,"toc":10755},[7785,7788,7791,7795,7798,7801,7812,8150,8153,8157,8160,8167,8422,8426,8429,8432,8587,8591,8594,8597,8803,8807,8810,9113,9116,9124,9128,9131,9282,9284,9295,9352,9356,9361,10018,10026,10029,10123,10126,10746,10752],[10,7786,7782],{"id":7787},"_4结构体",[19,7789,7790],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,7792,7794],{"id":7793},"_41结构体定义与使用","4.1结构体定义与使用",[19,7796,7797],{},"语法：struct 结构体名 {结构体成员列表}；",[19,7799,7800],{},"通过结构体创建变量的方式：",[1221,7802,7803,7806,7809],{},[160,7804,7805],{},"struct 结构体名 变量名",[160,7807,7808],{},"struct 结构体名 变量名={成员1值，成员2值...}",[160,7810,7811],{},"定义结构体时顺便创建变量",[194,7813,7815],{"className":196,"code":7814,"language":198,"meta":27,"style":27},"#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",[200,7816,7817,7823,7833,7840,7845,7853,7857,7862,7866,7871,7876,7881,7888,7893,7900,7904,7911,7915,7919,7923,7927,7931,7935,7941,7945,7951,7959,7967,7971,7976,7981,7992,7997,8009,8020,8031,8036,8060,8065,8071,8098,8103,8109,8121,8133,8145],{"__ignoreMap":27},[203,7818,7819,7821],{"class":205,"line":206},[203,7820,2038],{"class":209},[203,7822,2041],{"class":318},[203,7824,7825,7827,7829,7831],{"class":205,"line":124},[203,7826,2046],{"class":209},[203,7828,2049],{"class":209},[203,7830,2053],{"class":2052},[203,7832,1380],{"class":213},[203,7834,7835,7837],{"class":205,"line":1269},[203,7836,2038],{"class":209},[203,7838,7839],{"class":318},"\u003Cstring>\n",[203,7841,7842],{"class":205,"line":1284},[203,7843,7844],{"class":272},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[203,7846,7847,7850],{"class":205,"line":1290},[203,7848,7849],{"class":209},"struct",[203,7851,7852],{"class":2052}," Student\n",[203,7854,7855],{"class":205,"line":1304},[203,7856,1635],{"class":213},[203,7858,7859],{"class":205,"line":1310},[203,7860,7861],{"class":272},"    \u002F\u002F成员列表\n",[203,7863,7864],{"class":205,"line":1401},[203,7865,2489],{"emptyLinePlaceholder":131},[203,7867,7868],{"class":205,"line":1407},[203,7869,7870],{"class":272},"    \u002F\u002F姓名\n",[203,7872,7873],{"class":205,"line":1419},[203,7874,7875],{"class":213},"    string name;\n",[203,7877,7878],{"class":205,"line":1701},[203,7879,7880],{"class":272},"    \u002F\u002F年龄\n",[203,7882,7883,7885],{"class":205,"line":1706},[203,7884,2074],{"class":209},[203,7886,7887],{"class":213}," age;\n",[203,7889,7890],{"class":205,"line":1712},[203,7891,7892],{"class":272},"    \u002F\u002F分数\n",[203,7894,7895,7897],{"class":205,"line":1717},[203,7896,2074],{"class":209},[203,7898,7899],{"class":213}," score;\n",[203,7901,7902],{"class":205,"line":1731},[203,7903,4084],{"class":213},[203,7905,7906,7908],{"class":205,"line":1736},[203,7907,7849],{"class":209},[203,7909,7910],{"class":2052}," School\n",[203,7912,7913],{"class":205,"line":1742},[203,7914,1635],{"class":213},[203,7916,7917],{"class":205,"line":1763},[203,7918,7861],{"class":272},[203,7920,7921],{"class":205,"line":1768},[203,7922,2489],{"emptyLinePlaceholder":131},[203,7924,7925],{"class":205,"line":1782},[203,7926,7870],{"class":272},[203,7928,7929],{"class":205,"line":1787},[203,7930,7875],{"class":213},[203,7932,7933],{"class":205,"line":1816},[203,7934,7880],{"class":272},[203,7936,7937,7939],{"class":205,"line":1821},[203,7938,2074],{"class":209},[203,7940,7887],{"class":213},[203,7942,7943],{"class":205,"line":1838},[203,7944,7892],{"class":272},[203,7946,7947,7949],{"class":205,"line":1843},[203,7948,2074],{"class":209},[203,7950,7899],{"class":213},[203,7952,7953,7956],{"class":205,"line":1848},[203,7954,7955],{"class":213},"} s3;",[203,7957,7958],{"class":272}," \u002F\u002F创建结构体时就创建了变量\n",[203,7960,7961,7963,7965],{"class":205,"line":1853},[203,7962,217],{"class":209},[203,7964,2062],{"class":2052},[203,7966,2065],{"class":213},[203,7968,7969],{"class":205,"line":1867},[203,7970,1635],{"class":213},[203,7972,7973],{"class":205,"line":1872},[203,7974,7975],{"class":272},"    \u002F\u002F2.通过学生类型创建具体学生\n",[203,7977,7978],{"class":205,"line":2666},[203,7979,7980],{"class":272},"    \u002F\u002F2.1 struct Student s1;\n",[203,7982,7983,7986,7989],{"class":205,"line":2680},[203,7984,7985],{"class":209},"    struct",[203,7987,7988],{"class":2052}," Student",[203,7990,7991],{"class":213}," s1;\n",[203,7993,7994],{"class":205,"line":2688},[203,7995,7996],{"class":272},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[203,7998,7999,8002,8004,8007],{"class":205,"line":2693},[203,8000,8001],{"class":213},"    s1.name",[203,8003,259],{"class":209},[203,8005,8006],{"class":318},"\"张三\"",[203,8008,1380],{"class":213},[203,8010,8011,8014,8016,8018],{"class":205,"line":2699},[203,8012,8013],{"class":213},"    s1.age",[203,8015,259],{"class":209},[203,8017,864],{"class":262},[203,8019,1380],{"class":213},[203,8021,8022,8025,8027,8029],{"class":205,"line":2705},[203,8023,8024],{"class":213},"    s1.score",[203,8026,259],{"class":209},[203,8028,468],{"class":262},[203,8030,1380],{"class":213},[203,8032,8033],{"class":205,"line":2710},[203,8034,8035],{"class":272},"    \u002F\u002F输出结果\n",[203,8037,8039,8041,8043,8046,8048,8051,8053,8056,8058],{"class":205,"line":8038},37,[203,8040,1640],{"class":213},[203,8042,1258],{"class":209},[203,8044,8045],{"class":213},"s1.name",[203,8047,1258],{"class":209},[203,8049,8050],{"class":213},"s1.age",[203,8052,1258],{"class":209},[203,8054,8055],{"class":213},"s1.score",[203,8057,1258],{"class":209},[203,8059,1281],{"class":213},[203,8061,8063],{"class":205,"line":8062},38,[203,8064,2489],{"emptyLinePlaceholder":131},[203,8066,8068],{"class":205,"line":8067},39,[203,8069,8070],{"class":272},"    \u002F\u002F2.2 struct Student s2={...}\n",[203,8072,8074,8076,8078,8081,8083,8085,8088,8090,8092,8094,8096],{"class":205,"line":8073},40,[203,8075,7985],{"class":209},[203,8077,7988],{"class":2052},[203,8079,8080],{"class":213}," s2",[203,8082,259],{"class":209},[203,8084,1110],{"class":213},[203,8086,8087],{"class":318},"\"王五\"",[203,8089,592],{"class":213},[203,8091,864],{"class":262},[203,8093,592],{"class":213},[203,8095,468],{"class":262},[203,8097,4084],{"class":213},[203,8099,8101],{"class":205,"line":8100},41,[203,8102,2489],{"emptyLinePlaceholder":131},[203,8104,8106],{"class":205,"line":8105},42,[203,8107,8108],{"class":272},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[203,8110,8112,8115,8117,8119],{"class":205,"line":8111},43,[203,8113,8114],{"class":213},"    s3.name",[203,8116,259],{"class":209},[203,8118,3767],{"class":318},[203,8120,1380],{"class":213},[203,8122,8124,8127,8129,8131],{"class":205,"line":8123},44,[203,8125,8126],{"class":213},"    s3.age",[203,8128,259],{"class":209},[203,8130,864],{"class":262},[203,8132,1380],{"class":213},[203,8134,8136,8139,8141,8143],{"class":205,"line":8135},45,[203,8137,8138],{"class":213},"    s3.score",[203,8140,259],{"class":209},[203,8142,914],{"class":262},[203,8144,1380],{"class":213},[203,8146,8148],{"class":205,"line":8147},46,[203,8149,1654],{"class":213},[19,8151,8152],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8154,8156],{"id":8155},"_42结构体数组","4.2结构体数组",[19,8158,8159],{},"将自定义的结构体放入到数组中方便维护",[19,8161,8162,8163,8166],{},"语法：struct 结构体名 数组名",[203,8164,8165],{},"元素个数","={ {}，{},...{} };",[194,8168,8170],{"className":196,"code":8169,"language":198,"meta":27,"style":27},"#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",[200,8171,8172,8178,8188,8194,8199,8205,8209,8213,8219,8225,8229,8233,8241,8245,8250,8265,8269,8285,8301,8305,8310,8326,8341,8356,8361,8387,8391,8414,8418],{"__ignoreMap":27},[203,8173,8174,8176],{"class":205,"line":206},[203,8175,2038],{"class":209},[203,8177,2041],{"class":318},[203,8179,8180,8182,8184,8186],{"class":205,"line":124},[203,8181,2046],{"class":209},[203,8183,2049],{"class":209},[203,8185,2053],{"class":2052},[203,8187,1380],{"class":213},[203,8189,8190,8192],{"class":205,"line":1269},[203,8191,2038],{"class":209},[203,8193,7839],{"class":318},[203,8195,8196],{"class":205,"line":1284},[203,8197,8198],{"class":272},"\u002F\u002F1.定义结构体\n",[203,8200,8201,8203],{"class":205,"line":1290},[203,8202,7849],{"class":209},[203,8204,7852],{"class":2052},[203,8206,8207],{"class":205,"line":1304},[203,8208,1635],{"class":213},[203,8210,8211],{"class":205,"line":1310},[203,8212,7875],{"class":213},[203,8214,8215,8217],{"class":205,"line":1401},[203,8216,2074],{"class":209},[203,8218,7887],{"class":213},[203,8220,8221,8223],{"class":205,"line":1407},[203,8222,2074],{"class":209},[203,8224,7899],{"class":213},[203,8226,8227],{"class":205,"line":1419},[203,8228,2489],{"emptyLinePlaceholder":131},[203,8230,8231],{"class":205,"line":1701},[203,8232,4084],{"class":213},[203,8234,8235,8237,8239],{"class":205,"line":1706},[203,8236,217],{"class":209},[203,8238,2062],{"class":2052},[203,8240,2065],{"class":213},[203,8242,8243],{"class":205,"line":1712},[203,8244,1635],{"class":213},[203,8246,8247],{"class":205,"line":1717},[203,8248,8249],{"class":272},"    \u002F\u002F2.创建结构体数组\n",[203,8251,8252,8254,8256,8259,8261,8263],{"class":205,"line":1731},[203,8253,7985],{"class":209},[203,8255,7988],{"class":2052},[203,8257,8258],{"class":213}," stuArray[",[203,8260,291],{"class":262},[203,8262,1154],{"class":213},[203,8264,4997],{"class":209},[203,8266,8267],{"class":205,"line":1736},[203,8268,2119],{"class":213},[203,8270,8271,8273,8275,8277,8279,8281,8283],{"class":205,"line":1742},[203,8272,5006],{"class":213},[203,8274,8006],{"class":318},[203,8276,592],{"class":213},[203,8278,864],{"class":262},[203,8280,592],{"class":213},[203,8282,525],{"class":262},[203,8284,5019],{"class":213},[203,8286,8287,8289,8291,8293,8295,8297,8299],{"class":205,"line":1763},[203,8288,5006],{"class":213},[203,8290,3767],{"class":318},[203,8292,592],{"class":213},[203,8294,789],{"class":262},[203,8296,592],{"class":213},[203,8298,789],{"class":262},[203,8300,1654],{"class":213},[203,8302,8303],{"class":205,"line":1768},[203,8304,2276],{"class":213},[203,8306,8307],{"class":205,"line":1782},[203,8308,8309],{"class":272},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[203,8311,8312,8315,8317,8320,8322,8324],{"class":205,"line":1787},[203,8313,8314],{"class":213},"    stuArray[",[203,8316,431],{"class":262},[203,8318,8319],{"class":213},"].name",[203,8321,259],{"class":209},[203,8323,3790],{"class":318},[203,8325,1380],{"class":213},[203,8327,8328,8330,8332,8335,8337,8339],{"class":205,"line":1816},[203,8329,8314],{"class":213},[203,8331,431],{"class":262},[203,8333,8334],{"class":213},"].age",[203,8336,259],{"class":209},[203,8338,291],{"class":262},[203,8340,1380],{"class":213},[203,8342,8343,8345,8347,8350,8352,8354],{"class":205,"line":1821},[203,8344,8314],{"class":213},[203,8346,431],{"class":262},[203,8348,8349],{"class":213},"].score",[203,8351,259],{"class":209},[203,8353,291],{"class":262},[203,8355,1380],{"class":213},[203,8357,8358],{"class":205,"line":1838},[203,8359,8360],{"class":272},"    \u002F\u002F4.遍历结构体数组\n",[203,8362,8363,8365,8367,8369,8371,8373,8375,8377,8379,8381,8383,8385],{"class":205,"line":1843},[203,8364,3290],{"class":209},[203,8366,1747],{"class":213},[203,8368,217],{"class":209},[203,8370,3121],{"class":213},[203,8372,259],{"class":209},[203,8374,405],{"class":262},[203,8376,3128],{"class":213},[203,8378,1124],{"class":209},[203,8380,291],{"class":262},[203,8382,3128],{"class":213},[203,8384,2381],{"class":209},[203,8386,220],{"class":213},[203,8388,8389],{"class":205,"line":1848},[203,8390,2119],{"class":213},[203,8392,8393,8395,8397,8400,8402,8405,8407,8410,8412],{"class":205,"line":1853},[203,8394,3540],{"class":213},[203,8396,1258],{"class":209},[203,8398,8399],{"class":213},"stuArray[i].name",[203,8401,1258],{"class":209},[203,8403,8404],{"class":213},"stuArray[i].age",[203,8406,1258],{"class":209},[203,8408,8409],{"class":213},"stuArray[i].score",[203,8411,1258],{"class":209},[203,8413,1281],{"class":213},[203,8415,8416],{"class":205,"line":1867},[203,8417,2276],{"class":213},[203,8419,8420],{"class":205,"line":1872},[203,8421,1654],{"class":213},[14,8423,8425],{"id":8424},"_43结构体指针","4.3结构体指针",[19,8427,8428],{},"作用：通过指针访问结构体中的成员",[19,8430,8431],{},"利用操作符->可以通过结构体指针访问结构体属性",[194,8433,8435],{"className":196,"code":8434,"language":198,"meta":27,"style":27},"#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",[200,8436,8437,8443,8453,8459,8463,8469,8473,8477,8483,8489,8493,8501,8505,8510,8535,8540,8555,8560,8583],{"__ignoreMap":27},[203,8438,8439,8441],{"class":205,"line":206},[203,8440,2038],{"class":209},[203,8442,2041],{"class":318},[203,8444,8445,8447,8449,8451],{"class":205,"line":124},[203,8446,2046],{"class":209},[203,8448,2049],{"class":209},[203,8450,2053],{"class":2052},[203,8452,1380],{"class":213},[203,8454,8455,8457],{"class":205,"line":1269},[203,8456,2038],{"class":209},[203,8458,7839],{"class":318},[203,8460,8461],{"class":205,"line":1284},[203,8462,8198],{"class":272},[203,8464,8465,8467],{"class":205,"line":1290},[203,8466,7849],{"class":209},[203,8468,7852],{"class":2052},[203,8470,8471],{"class":205,"line":1304},[203,8472,1635],{"class":213},[203,8474,8475],{"class":205,"line":1310},[203,8476,7875],{"class":213},[203,8478,8479,8481],{"class":205,"line":1401},[203,8480,2074],{"class":209},[203,8482,7887],{"class":213},[203,8484,8485,8487],{"class":205,"line":1407},[203,8486,2074],{"class":209},[203,8488,7899],{"class":213},[203,8490,8491],{"class":205,"line":1419},[203,8492,4084],{"class":213},[203,8494,8495,8497,8499],{"class":205,"line":1701},[203,8496,217],{"class":209},[203,8498,2062],{"class":2052},[203,8500,2065],{"class":213},[203,8502,8503],{"class":205,"line":1706},[203,8504,1635],{"class":213},[203,8506,8507],{"class":205,"line":1712},[203,8508,8509],{"class":272},"    \u002F\u002F创建学生结构体变量\n",[203,8511,8512,8514,8516,8519,8521,8523,8525,8527,8529,8531,8533],{"class":205,"line":1717},[203,8513,7985],{"class":209},[203,8515,7988],{"class":2052},[203,8517,8518],{"class":213}," s",[203,8520,259],{"class":209},[203,8522,1110],{"class":213},[203,8524,8006],{"class":318},[203,8526,592],{"class":213},[203,8528,864],{"class":262},[203,8530,592],{"class":213},[203,8532,1811],{"class":262},[203,8534,4084],{"class":213},[203,8536,8537],{"class":205,"line":1731},[203,8538,8539],{"class":272},"    \u002F\u002F通过指针指向结构体变量\n",[203,8541,8542,8544,8546,8548,8550,8552],{"class":205,"line":1736},[203,8543,7985],{"class":209},[203,8545,7988],{"class":2052},[203,8547,6608],{"class":209},[203,8549,19],{"class":213},[203,8551,6429],{"class":209},[203,8553,8554],{"class":213},"s\n",[203,8556,8557],{"class":205,"line":1742},[203,8558,8559],{"class":272},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[203,8561,8562,8564,8566,8569,8571,8574,8576,8579,8581],{"class":205,"line":1763},[203,8563,1640],{"class":213},[203,8565,1258],{"class":209},[203,8567,8568],{"class":213},"p->name",[203,8570,1258],{"class":209},[203,8572,8573],{"class":213},"p->age",[203,8575,1258],{"class":209},[203,8577,8578],{"class":213},"p->score",[203,8580,1258],{"class":209},[203,8582,1281],{"class":213},[203,8584,8585],{"class":205,"line":1768},[203,8586,1654],{"class":213},[14,8588,8590],{"id":8589},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,8592,8593],{},"作用：结构体中的成员可以是另一个结构体",[19,8595,8596],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[194,8598,8600],{"className":196,"code":8599,"language":198,"meta":27,"style":27},"#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",[200,8601,8602,8608,8618,8624,8629,8637,8641,8645,8651,8657,8661,8666,8673,8677,8684,8688,8694,8699,8703,8711,8715,8720,8725,8730,8741,8753,8764,8777,8788,8799],{"__ignoreMap":27},[203,8603,8604,8606],{"class":205,"line":206},[203,8605,2038],{"class":209},[203,8607,2041],{"class":318},[203,8609,8610,8612,8614,8616],{"class":205,"line":124},[203,8611,2046],{"class":209},[203,8613,2049],{"class":209},[203,8615,2053],{"class":2052},[203,8617,1380],{"class":213},[203,8619,8620,8622],{"class":205,"line":1269},[203,8621,2038],{"class":209},[203,8623,7839],{"class":318},[203,8625,8626],{"class":205,"line":1284},[203,8627,8628],{"class":272},"\u002F\u002F定义学生结构体\n",[203,8630,8631,8633,8635],{"class":205,"line":1290},[203,8632,7849],{"class":209},[203,8634,7988],{"class":2052},[203,8636,2763],{"class":213},[203,8638,8639],{"class":205,"line":1304},[203,8640,1635],{"class":213},[203,8642,8643],{"class":205,"line":1310},[203,8644,7875],{"class":213},[203,8646,8647,8649],{"class":205,"line":1401},[203,8648,2074],{"class":209},[203,8650,7887],{"class":213},[203,8652,8653,8655],{"class":205,"line":1407},[203,8654,2074],{"class":209},[203,8656,7899],{"class":213},[203,8658,8659],{"class":205,"line":1419},[203,8660,1654],{"class":213},[203,8662,8663],{"class":205,"line":1701},[203,8664,8665],{"class":272},"\u002F\u002F定义老师结构体\n",[203,8667,8668,8670],{"class":205,"line":1706},[203,8669,7849],{"class":209},[203,8671,8672],{"class":2052}," Teacher\n",[203,8674,8675],{"class":205,"line":1712},[203,8676,1635],{"class":213},[203,8678,8679,8681],{"class":205,"line":1717},[203,8680,2074],{"class":209},[203,8682,8683],{"class":213}," id;\n",[203,8685,8686],{"class":205,"line":1731},[203,8687,7875],{"class":213},[203,8689,8690,8692],{"class":205,"line":1736},[203,8691,2074],{"class":209},[203,8693,7887],{"class":213},[203,8695,8696],{"class":205,"line":1742},[203,8697,8698],{"class":213},"    Student stu;\n",[203,8700,8701],{"class":205,"line":1763},[203,8702,1654],{"class":213},[203,8704,8705,8707,8709],{"class":205,"line":1768},[203,8706,217],{"class":209},[203,8708,2062],{"class":2052},[203,8710,6068],{"class":213},[203,8712,8713],{"class":205,"line":1782},[203,8714,1635],{"class":213},[203,8716,8717],{"class":205,"line":1787},[203,8718,8719],{"class":272},"    \u002F\u002F结构体嵌套结构体\n",[203,8721,8722],{"class":205,"line":1816},[203,8723,8724],{"class":272},"    \u002F\u002F创建老师\n",[203,8726,8727],{"class":205,"line":1821},[203,8728,8729],{"class":213},"    Teacher t;\n",[203,8731,8732,8735,8737,8739],{"class":205,"line":1838},[203,8733,8734],{"class":213},"    t.id",[203,8736,259],{"class":209},[203,8738,525],{"class":262},[203,8740,1380],{"class":213},[203,8742,8743,8746,8748,8751],{"class":205,"line":1843},[203,8744,8745],{"class":213},"    t.name",[203,8747,259],{"class":209},[203,8749,8750],{"class":318},"\"老王\"",[203,8752,1380],{"class":213},[203,8754,8755,8758,8760,8762],{"class":205,"line":1848},[203,8756,8757],{"class":213},"    t.age",[203,8759,259],{"class":209},[203,8761,864],{"class":262},[203,8763,1380],{"class":213},[203,8765,8766,8769,8771,8774],{"class":205,"line":1853},[203,8767,8768],{"class":213},"    t.stu.name",[203,8770,259],{"class":209},[203,8772,8773],{"class":318},"\"小王\"",[203,8775,8776],{"class":213},"；\n",[203,8778,8779,8782,8784,8786],{"class":205,"line":1867},[203,8780,8781],{"class":213},"    t.stu.age",[203,8783,259],{"class":209},[203,8785,914],{"class":262},[203,8787,1380],{"class":213},[203,8789,8790,8793,8795,8797],{"class":205,"line":1872},[203,8791,8792],{"class":213},"    t.stu.score",[203,8794,259],{"class":209},[203,8796,558],{"class":262},[203,8798,1380],{"class":213},[203,8800,8801],{"class":205,"line":2666},[203,8802,1654],{"class":213},[14,8804,8806],{"id":8805},"_45结构体做函数参数","4.5结构体做函数参数",[19,8808,8809],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[194,8811,8813],{"className":196,"code":8812,"language":198,"meta":27,"style":27},"#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",[200,8814,8815,8821,8831,8837,8843,8847,8851,8857,8863,8867,8872,8877,8894,8898,8931,8935,8940,8959,8963,8994,8998,9006,9010,9019,9031,9043,9055,9068,9076,9089,9101,9109],{"__ignoreMap":27},[203,8816,8817,8819],{"class":205,"line":206},[203,8818,2038],{"class":209},[203,8820,2041],{"class":318},[203,8822,8823,8825,8827,8829],{"class":205,"line":124},[203,8824,2046],{"class":209},[203,8826,2049],{"class":209},[203,8828,2053],{"class":2052},[203,8830,1380],{"class":213},[203,8832,8833,8835],{"class":205,"line":1269},[203,8834,2038],{"class":209},[203,8836,7839],{"class":318},[203,8838,8839,8841],{"class":205,"line":1284},[203,8840,7849],{"class":209},[203,8842,7852],{"class":2052},[203,8844,8845],{"class":205,"line":1290},[203,8846,1635],{"class":213},[203,8848,8849],{"class":205,"line":1304},[203,8850,7875],{"class":213},[203,8852,8853,8855],{"class":205,"line":1310},[203,8854,2074],{"class":209},[203,8856,7887],{"class":213},[203,8858,8859,8861],{"class":205,"line":1401},[203,8860,2074],{"class":209},[203,8862,7899],{"class":213},[203,8864,8865],{"class":205,"line":1407},[203,8866,4084],{"class":213},[203,8868,8869],{"class":205,"line":1419},[203,8870,8871],{"class":272},"\u002F\u002F打印学生信息的函数\n",[203,8873,8874],{"class":205,"line":1701},[203,8875,8876],{"class":272},"\u002F\u002F值传递\n",[203,8878,8879,8881,8884,8886,8888,8890,8892],{"class":205,"line":1706},[203,8880,5454],{"class":209},[203,8882,8883],{"class":2052}," printStudent1",[203,8885,214],{"class":213},[203,8887,7849],{"class":209},[203,8889,7988],{"class":2052},[203,8891,8518],{"class":5306},[203,8893,220],{"class":213},[203,8895,8896],{"class":205,"line":1712},[203,8897,1635],{"class":213},[203,8899,8900,8902,8904,8907,8909,8912,8914,8917,8919,8921,8923,8926,8928],{"class":205,"line":1717},[203,8901,6619],{"class":213},[203,8903,1258],{"class":209},[203,8905,8906],{"class":213}," s.name ",[203,8908,1258],{"class":209},[203,8910,8911],{"class":318}," \" \"",[203,8913,1534],{"class":209},[203,8915,8916],{"class":213}," s.age ",[203,8918,1258],{"class":209},[203,8920,8911],{"class":318},[203,8922,1534],{"class":209},[203,8924,8925],{"class":213}," s.score ",[203,8927,1258],{"class":209},[203,8929,8930],{"class":213}," endl;\n",[203,8932,8933],{"class":205,"line":1731},[203,8934,1654],{"class":213},[203,8936,8937],{"class":205,"line":1736},[203,8938,8939],{"class":272},"\u002F\u002F地址传递\n",[203,8941,8942,8944,8947,8949,8951,8953,8955,8957],{"class":205,"line":1742},[203,8943,5454],{"class":209},[203,8945,8946],{"class":2052}," printStudent2",[203,8948,214],{"class":213},[203,8950,7849],{"class":209},[203,8952,7988],{"class":2052},[203,8954,6608],{"class":209},[203,8956,909],{"class":5306},[203,8958,220],{"class":213},[203,8960,8961],{"class":205,"line":1763},[203,8962,1635],{"class":213},[203,8964,8965,8967,8969,8972,8974,8976,8978,8981,8983,8985,8987,8990,8992],{"class":205,"line":1768},[203,8966,6619],{"class":213},[203,8968,1258],{"class":209},[203,8970,8971],{"class":213}," s->name ",[203,8973,1258],{"class":209},[203,8975,8911],{"class":318},[203,8977,1534],{"class":209},[203,8979,8980],{"class":213}," s->age ",[203,8982,1258],{"class":209},[203,8984,8911],{"class":318},[203,8986,1534],{"class":209},[203,8988,8989],{"class":213}," s->score ",[203,8991,1258],{"class":209},[203,8993,8930],{"class":213},[203,8995,8996],{"class":205,"line":1782},[203,8997,1654],{"class":213},[203,8999,9000,9002,9004],{"class":205,"line":1787},[203,9001,217],{"class":209},[203,9003,2062],{"class":2052},[203,9005,2065],{"class":213},[203,9007,9008],{"class":205,"line":1816},[203,9009,1635],{"class":213},[203,9011,9012,9014,9016],{"class":205,"line":1821},[203,9013,7985],{"class":209},[203,9015,7988],{"class":2052},[203,9017,9018],{"class":213}," s;\n",[203,9020,9021,9024,9026,9029],{"class":205,"line":1838},[203,9022,9023],{"class":213},"    s.name ",[203,9025,259],{"class":209},[203,9027,9028],{"class":318}," \"张三\"",[203,9030,1380],{"class":213},[203,9032,9033,9036,9038,9041],{"class":205,"line":1843},[203,9034,9035],{"class":213},"    s.age ",[203,9037,259],{"class":209},[203,9039,9040],{"class":262}," 20",[203,9042,1380],{"class":213},[203,9044,9045,9048,9050,9053],{"class":205,"line":1848},[203,9046,9047],{"class":213},"    s.score ",[203,9049,259],{"class":209},[203,9051,9052],{"class":262}," 85",[203,9054,1380],{"class":213},[203,9056,9057,9059,9061,9064,9066],{"class":205,"line":1853},[203,9058,1640],{"class":213},[203,9060,1258],{"class":209},[203,9062,9063],{"class":318},"\"值传递:\"",[203,9065,1258],{"class":209},[203,9067,1281],{"class":213},[203,9069,9070,9073],{"class":205,"line":1867},[203,9071,9072],{"class":2052},"    printStudent1",[203,9074,9075],{"class":213},"(s);\n",[203,9077,9078,9080,9082,9085,9087],{"class":205,"line":1872},[203,9079,1640],{"class":213},[203,9081,1258],{"class":209},[203,9083,9084],{"class":318},"\"地址传递:\"",[203,9086,1258],{"class":209},[203,9088,1281],{"class":213},[203,9090,9091,9094,9096,9098],{"class":205,"line":2666},[203,9092,9093],{"class":2052},"    printStudent2",[203,9095,214],{"class":213},[203,9097,567],{"class":209},[203,9099,9100],{"class":213},"s); \n",[203,9102,9103,9105,9107],{"class":205,"line":2680},[203,9104,4179],{"class":209},[203,9106,4182],{"class":262},[203,9108,1380],{"class":213},[203,9110,9111],{"class":205,"line":2688},[203,9112,1654],{"class":213},[19,9114,9115],{},"注意：",[1221,9117,9118,9121],{},[160,9119,9120],{},"1.先定义结构体，不要在函数中写结构体的定义",[160,9122,9123],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9125,9127],{"id":9126},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9129,9130],{},"用const防止误操作",[194,9132,9134],{"className":196,"code":9133,"language":198,"meta":27,"style":27},"#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",[200,9135,9136,9142,9152,9158,9163,9167,9171,9177,9183,9187,9203,9207,9230,9234,9242,9246,9267,9274,9278],{"__ignoreMap":27},[203,9137,9138,9140],{"class":205,"line":206},[203,9139,2038],{"class":209},[203,9141,2041],{"class":318},[203,9143,9144,9146,9148,9150],{"class":205,"line":124},[203,9145,2046],{"class":209},[203,9147,2049],{"class":209},[203,9149,2053],{"class":2052},[203,9151,1380],{"class":213},[203,9153,9154,9156],{"class":205,"line":1269},[203,9155,2038],{"class":209},[203,9157,7839],{"class":318},[203,9159,9160],{"class":205,"line":1284},[203,9161,9162],{"class":213},"sctuct Student\n",[203,9164,9165],{"class":205,"line":1290},[203,9166,1635],{"class":213},[203,9168,9169],{"class":205,"line":1304},[203,9170,7875],{"class":213},[203,9172,9173,9175],{"class":205,"line":1310},[203,9174,2074],{"class":209},[203,9176,7887],{"class":213},[203,9178,9179,9181],{"class":205,"line":1401},[203,9180,2074],{"class":209},[203,9182,7899],{"class":213},[203,9184,9185],{"class":205,"line":1407},[203,9186,4084],{"class":213},[203,9188,9189,9191,9194,9196,9199,9201],{"class":205,"line":1419},[203,9190,5454],{"class":209},[203,9192,9193],{"class":2052}," printStudents",[203,9195,214],{"class":213},[203,9197,9198],{"class":2052},"student",[203,9200,8518],{"class":5306},[203,9202,220],{"class":213},[203,9204,9205],{"class":205,"line":1701},[203,9206,1635],{"class":213},[203,9208,9209,9211,9213,9216,9218,9221,9223,9226,9228],{"class":205,"line":1706},[203,9210,1640],{"class":213},[203,9212,1258],{"class":209},[203,9214,9215],{"class":213},"s.name",[203,9217,1258],{"class":209},[203,9219,9220],{"class":213},"s.age",[203,9222,1258],{"class":209},[203,9224,9225],{"class":213},"s.score",[203,9227,1258],{"class":209},[203,9229,1281],{"class":213},[203,9231,9232],{"class":205,"line":1712},[203,9233,1654],{"class":213},[203,9235,9236,9238,9240],{"class":205,"line":1717},[203,9237,217],{"class":209},[203,9239,2062],{"class":2052},[203,9241,6068],{"class":213},[203,9243,9244],{"class":205,"line":1731},[203,9245,1635],{"class":213},[203,9247,9248,9251,9253,9255,9257,9259,9261,9263,9265],{"class":205,"line":1736},[203,9249,9250],{"class":213},"    Student s",[203,9252,259],{"class":209},[203,9254,1110],{"class":213},[203,9256,8006],{"class":318},[203,9258,592],{"class":213},[203,9260,864],{"class":262},[203,9262,592],{"class":213},[203,9264,864],{"class":262},[203,9266,4084],{"class":213},[203,9268,9269,9272],{"class":205,"line":1742},[203,9270,9271],{"class":2052},"    printStudent",[203,9273,9075],{"class":213},[203,9275,9276],{"class":205,"line":1763},[203,9277,2489],{"emptyLinePlaceholder":131},[203,9279,9280],{"class":205,"line":1768},[203,9281,1654],{"class":213},[19,9283,9115],{},[1221,9285,9286,9289,9292],{},[160,9287,9288],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[160,9290,9291],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[160,9293,9294],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[194,9296,9298],{"className":196,"code":9297,"language":198,"meta":27,"style":27},"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",[200,9299,9300,9319,9323,9328,9348],{"__ignoreMap":27},[203,9301,9302,9304,9306,9308,9310,9313,9315,9317],{"class":205,"line":206},[203,9303,5454],{"class":209},[203,9305,9193],{"class":2052},[203,9307,214],{"class":213},[203,9309,6882],{"class":209},[203,9311,9312],{"class":2052}," student",[203,9314,6608],{"class":209},[203,9316,909],{"class":5306},[203,9318,220],{"class":213},[203,9320,9321],{"class":205,"line":124},[203,9322,1635],{"class":213},[203,9324,9325],{"class":205,"line":1269},[203,9326,9327],{"class":272},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[203,9329,9330,9332,9334,9336,9338,9340,9342,9344,9346],{"class":205,"line":1284},[203,9331,1640],{"class":213},[203,9333,1258],{"class":209},[203,9335,9215],{"class":213},[203,9337,1258],{"class":209},[203,9339,9220],{"class":213},[203,9341,1258],{"class":209},[203,9343,9225],{"class":213},[203,9345,1258],{"class":209},[203,9347,1281],{"class":213},[203,9349,9350],{"class":205,"line":1290},[203,9351,1654],{"class":213},[14,9353,9355],{"id":9354},"_47案例","4.7案例",[157,9357,9358],{},[160,9359,9360],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[194,9362,9364],{"className":196,"code":9363,"language":198,"meta":27,"style":27},"#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",[200,9365,9366,9372,9382,9388,9395,9399,9405,9409,9414,9420,9426,9430,9434,9440,9444,9449,9454,9467,9471,9476,9502,9506,9518,9545,9549,9561,9571,9575,9580,9609,9613,9625,9634,9661,9672,9682,9686,9690,9694,9699,9723,9727,9751,9755,9774,9800,9804,9829,9852,9876,9881,9886,9891,9900,9905,9911,9932,9938,9952,9958,9985,9994,10000,10008,10013],{"__ignoreMap":27},[203,9367,9368,9370],{"class":205,"line":206},[203,9369,2038],{"class":209},[203,9371,2041],{"class":318},[203,9373,9374,9376,9378,9380],{"class":205,"line":124},[203,9375,2046],{"class":209},[203,9377,2049],{"class":209},[203,9379,2053],{"class":2052},[203,9381,1380],{"class":213},[203,9383,9384,9386],{"class":205,"line":1269},[203,9385,2038],{"class":209},[203,9387,7839],{"class":318},[203,9389,9390,9392],{"class":205,"line":1284},[203,9391,2038],{"class":209},[203,9393,9394],{"class":318},"\u003Cctime>\n",[203,9396,9397],{"class":205,"line":1290},[203,9398,8628],{"class":272},[203,9400,9401,9403],{"class":205,"line":1304},[203,9402,7849],{"class":209},[203,9404,7852],{"class":2052},[203,9406,9407],{"class":205,"line":1310},[203,9408,1635],{"class":213},[203,9410,9411],{"class":205,"line":1401},[203,9412,9413],{"class":213},"    string sName;\n",[203,9415,9416,9418],{"class":205,"line":1407},[203,9417,2074],{"class":209},[203,9419,7887],{"class":213},[203,9421,9422,9424],{"class":205,"line":1419},[203,9423,2074],{"class":209},[203,9425,7899],{"class":213},[203,9427,9428],{"class":205,"line":1701},[203,9429,4084],{"class":213},[203,9431,9432],{"class":205,"line":1706},[203,9433,8665],{"class":272},[203,9435,9436,9438],{"class":205,"line":1712},[203,9437,7849],{"class":209},[203,9439,8672],{"class":2052},[203,9441,9442],{"class":205,"line":1717},[203,9443,1635],{"class":213},[203,9445,9446],{"class":205,"line":1731},[203,9447,9448],{"class":213},"    string tName;\n",[203,9450,9451],{"class":205,"line":1736},[203,9452,9453],{"class":272},"    \u002F\u002F学生数组\n",[203,9455,9456,9458,9460,9463,9465],{"class":205,"line":1742},[203,9457,7985],{"class":209},[203,9459,7988],{"class":2052},[203,9461,9462],{"class":213}," sArray[",[203,9464,533],{"class":262},[203,9466,4779],{"class":213},[203,9468,9469],{"class":205,"line":1763},[203,9470,4084],{"class":213},[203,9472,9473],{"class":205,"line":1768},[203,9474,9475],{"class":272},"\u002F\u002F给老师和学生赋值的函数\n",[203,9477,9478,9480,9483,9485,9487,9490,9493,9496,9498,9500],{"class":205,"line":1782},[203,9479,5454],{"class":209},[203,9481,9482],{"class":2052}," allocateSpace",[203,9484,214],{"class":213},[203,9486,7849],{"class":209},[203,9488,9489],{"class":2052}," Teacher",[203,9491,9492],{"class":5306}," tArray",[203,9494,9495],{"class":213},"[],",[203,9497,217],{"class":209},[203,9499,7421],{"class":5306},[203,9501,220],{"class":213},[203,9503,9504],{"class":205,"line":1787},[203,9505,1635],{"class":213},[203,9507,9508,9511,9513,9516],{"class":205,"line":1816},[203,9509,9510],{"class":213},"    string nameSeed",[203,9512,259],{"class":209},[203,9514,9515],{"class":318},"\"ABCDE\"",[203,9517,1380],{"class":213},[203,9519,9520,9522,9524,9526,9529,9531,9533,9536,9538,9541,9543],{"class":205,"line":1821},[203,9521,3290],{"class":209},[203,9523,1747],{"class":213},[203,9525,217],{"class":209},[203,9527,9528],{"class":213}," i ",[203,9530,259],{"class":209},[203,9532,4182],{"class":262},[203,9534,9535],{"class":213},"; i ",[203,9537,1124],{"class":209},[203,9539,9540],{"class":213}," len; i",[203,9542,2381],{"class":209},[203,9544,220],{"class":213},[203,9546,9547],{"class":205,"line":1838},[203,9548,2119],{"class":213},[203,9550,9551,9554,9556,9559],{"class":205,"line":1843},[203,9552,9553],{"class":213},"        tArray[i].tName ",[203,9555,259],{"class":209},[203,9557,9558],{"class":318}," \"Teacher_\"",[203,9560,1380],{"class":213},[203,9562,9563,9565,9568],{"class":205,"line":1848},[203,9564,9553],{"class":213},[203,9566,9567],{"class":209},"+=",[203,9569,9570],{"class":213},"nameSeed[i];\n",[203,9572,9573],{"class":205,"line":1853},[203,9574,2489],{"emptyLinePlaceholder":131},[203,9576,9577],{"class":205,"line":1867},[203,9578,9579],{"class":272},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[203,9581,9582,9584,9586,9588,9591,9593,9595,9598,9600,9602,9605,9607],{"class":205,"line":1872},[203,9583,3492],{"class":209},[203,9585,1747],{"class":213},[203,9587,217],{"class":209},[203,9589,9590],{"class":213}," j ",[203,9592,259],{"class":209},[203,9594,4182],{"class":262},[203,9596,9597],{"class":213},"; j ",[203,9599,1124],{"class":209},[203,9601,2237],{"class":262},[203,9603,9604],{"class":213},"; j",[203,9606,2381],{"class":209},[203,9608,220],{"class":213},[203,9610,9611],{"class":205,"line":2666},[203,9612,2599],{"class":213},[203,9614,9615,9618,9620,9623],{"class":205,"line":2680},[203,9616,9617],{"class":213},"            tArray[i].sArray[j].sName ",[203,9619,259],{"class":209},[203,9621,9622],{"class":318}," \"Student_\"",[203,9624,1380],{"class":213},[203,9626,9627,9629,9631],{"class":205,"line":2688},[203,9628,9617],{"class":213},[203,9630,9567],{"class":209},[203,9632,9633],{"class":213}," nameSeed[j];\n",[203,9635,9636,9639,9642,9644,9646,9648,9650,9652,9654,9656,9658],{"class":205,"line":2693},[203,9637,9638],{"class":209},"            int",[203,9640,9641],{"class":213}," random",[203,9643,259],{"class":209},[203,9645,2513],{"class":2052},[203,9647,2516],{"class":213},[203,9649,542],{"class":209},[203,9651,1121],{"class":262},[203,9653,695],{"class":209},[203,9655,615],{"class":262},[203,9657,269],{"class":213},[203,9659,9660],{"class":272},"\u002F\u002F40~99\n",[203,9662,9663,9666,9668,9670],{"class":205,"line":2699},[203,9664,9665],{"class":213},"            tArray[i].sArray[j].age ",[203,9667,259],{"class":209},[203,9669,9040],{"class":262},[203,9671,1380],{"class":213},[203,9673,9674,9677,9679],{"class":205,"line":2705},[203,9675,9676],{"class":213},"            tArray[i].sArray[j].score ",[203,9678,259],{"class":209},[203,9680,9681],{"class":213}," random;\n",[203,9683,9684],{"class":205,"line":2710},[203,9685,2618],{"class":213},[203,9687,9688],{"class":205,"line":8038},[203,9689,2276],{"class":213},[203,9691,9692],{"class":205,"line":8062},[203,9693,1654],{"class":213},[203,9695,9696],{"class":205,"line":8067},[203,9697,9698],{"class":272},"\u002F\u002F打印所有信息的函数\n",[203,9700,9701,9703,9706,9708,9710,9712,9714,9717,9719,9721],{"class":205,"line":8073},[203,9702,5454],{"class":209},[203,9704,9705],{"class":2052}," printInfo",[203,9707,214],{"class":213},[203,9709,7849],{"class":209},[203,9711,9489],{"class":2052},[203,9713,9492],{"class":5306},[203,9715,9716],{"class":213},"[], ",[203,9718,217],{"class":209},[203,9720,7421],{"class":5306},[203,9722,220],{"class":213},[203,9724,9725],{"class":205,"line":8100},[203,9726,1635],{"class":213},[203,9728,9729,9731,9733,9735,9737,9739,9741,9743,9745,9747,9749],{"class":205,"line":8105},[203,9730,3290],{"class":209},[203,9732,1747],{"class":213},[203,9734,217],{"class":209},[203,9736,9528],{"class":213},[203,9738,259],{"class":209},[203,9740,4182],{"class":262},[203,9742,9535],{"class":213},[203,9744,1124],{"class":209},[203,9746,9540],{"class":213},[203,9748,2381],{"class":209},[203,9750,220],{"class":213},[203,9752,9753],{"class":205,"line":8111},[203,9754,2119],{"class":213},[203,9756,9757,9760,9762,9765,9767,9770,9772],{"class":205,"line":8123},[203,9758,9759],{"class":213},"        cout ",[203,9761,1258],{"class":209},[203,9763,9764],{"class":318}," \"Teacher: \"",[203,9766,1534],{"class":209},[203,9768,9769],{"class":213}," tArray[i].tName ",[203,9771,1258],{"class":209},[203,9773,8930],{"class":213},[203,9775,9776,9778,9780,9782,9784,9786,9788,9790,9792,9794,9796,9798],{"class":205,"line":8135},[203,9777,3492],{"class":209},[203,9779,1747],{"class":213},[203,9781,217],{"class":209},[203,9783,9590],{"class":213},[203,9785,259],{"class":209},[203,9787,4182],{"class":262},[203,9789,9597],{"class":213},[203,9791,1124],{"class":209},[203,9793,2237],{"class":262},[203,9795,9604],{"class":213},[203,9797,2381],{"class":209},[203,9799,220],{"class":213},[203,9801,9802],{"class":205,"line":8147},[203,9803,2599],{"class":213},[203,9805,9807,9810,9812,9815,9817,9820,9822,9825,9827],{"class":205,"line":9806},47,[203,9808,9809],{"class":213},"            cout ",[203,9811,1258],{"class":209},[203,9813,9814],{"class":318}," \"",[203,9816,1320],{"class":262},[203,9818,9819],{"class":318},"Student: \"",[203,9821,1534],{"class":209},[203,9823,9824],{"class":213}," tArray[i].sArray[j].sName",[203,9826,1258],{"class":209},[203,9828,1281],{"class":213},[203,9830,9832,9834,9836,9838,9840,9843,9845,9848,9850],{"class":205,"line":9831},48,[203,9833,9809],{"class":213},[203,9835,1258],{"class":209},[203,9837,9814],{"class":318},[203,9839,1320],{"class":262},[203,9841,9842],{"class":318},"Age: \"",[203,9844,1534],{"class":209},[203,9846,9847],{"class":213}," tArray[i].sArray[j].age ",[203,9849,1258],{"class":209},[203,9851,8930],{"class":213},[203,9853,9855,9857,9859,9861,9863,9866,9868,9871,9873],{"class":205,"line":9854},49,[203,9856,9809],{"class":213},[203,9858,1258],{"class":209},[203,9860,9814],{"class":318},[203,9862,1320],{"class":262},[203,9864,9865],{"class":318},"Score: \"",[203,9867,1534],{"class":209},[203,9869,9870],{"class":213}," tArray[i].sArray[j].score ",[203,9872,1258],{"class":209},[203,9874,9875],{"class":213}," endl;   \n",[203,9877,9879],{"class":205,"line":9878},50,[203,9880,2618],{"class":213},[203,9882,9884],{"class":205,"line":9883},51,[203,9885,2276],{"class":213},[203,9887,9889],{"class":205,"line":9888},52,[203,9890,1654],{"class":213},[203,9892,9894,9896,9898],{"class":205,"line":9893},53,[203,9895,217],{"class":209},[203,9897,2062],{"class":2052},[203,9899,2065],{"class":213},[203,9901,9903],{"class":205,"line":9902},54,[203,9904,1635],{"class":213},[203,9906,9908],{"class":205,"line":9907},55,[203,9909,9910],{"class":272},"    \u002F\u002F随机数种子\n",[203,9912,9914,9916,9918,9920,9922,9924,9926,9928,9930],{"class":205,"line":9913},56,[203,9915,2462],{"class":2052},[203,9917,2465],{"class":213},[203,9919,2468],{"class":209},[203,9921,2471],{"class":209},[203,9923,643],{"class":213},[203,9925,2476],{"class":2052},[203,9927,214],{"class":213},[203,9929,2481],{"class":262},[203,9931,2484],{"class":213},[203,9933,9935],{"class":205,"line":9934},57,[203,9936,9937],{"class":272},"    \u002F\u002F1.创建3名老师的数组\n",[203,9939,9941,9943,9945,9948,9950],{"class":205,"line":9940},58,[203,9942,7985],{"class":209},[203,9944,9489],{"class":2052},[203,9946,9947],{"class":213}," tArray[",[203,9949,285],{"class":262},[203,9951,4779],{"class":213},[203,9953,9955],{"class":205,"line":9954},59,[203,9956,9957],{"class":272},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[203,9959,9961,9963,9966,9968,9971,9974,9976,9978,9981,9983],{"class":205,"line":9960},60,[203,9962,2074],{"class":209},[203,9964,9965],{"class":213}," len ",[203,9967,259],{"class":209},[203,9969,9970],{"class":209}," sizeof",[203,9972,9973],{"class":213},"(tArray) ",[203,9975,798],{"class":209},[203,9977,9970],{"class":209},[203,9979,9980],{"class":213},"(tArray[",[203,9982,405],{"class":262},[203,9984,3945],{"class":213},[203,9986,9988,9991],{"class":205,"line":9987},61,[203,9989,9990],{"class":2052},"    allocateSpace",[203,9992,9993],{"class":213},"(tArray, len);\n",[203,9995,9997],{"class":205,"line":9996},62,[203,9998,9999],{"class":272},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[203,10001,10003,10006],{"class":205,"line":10002},63,[203,10004,10005],{"class":2052},"    printInfo",[203,10007,9993],{"class":213},[203,10009,10011],{"class":205,"line":10010},64,[203,10012,2489],{"emptyLinePlaceholder":131},[203,10014,10016],{"class":205,"line":10015},65,[203,10017,1654],{"class":213},[157,10019,10020],{"start":124},[160,10021,10022,10025],{},[363,10023,10024],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10027,10028],{},"五名英雄信息如下：",[194,10030,10034],{"className":10031,"code":10032,"language":10033,"meta":27,"style":27},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[200,10035,10036,10054,10071,10088,10105],{"__ignoreMap":27},[203,10037,10038,10040,10043,10045,10047,10049,10052],{"class":205,"line":206},[203,10039,5006],{"class":213},[203,10041,10042],{"class":318},"\"刘备\"",[203,10044,592],{"class":213},[203,10046,989],{"class":262},[203,10048,592],{"class":213},[203,10050,10051],{"class":318},"\"男\"",[203,10053,5019],{"class":213},[203,10055,10056,10058,10061,10063,10065,10067,10069],{"class":205,"line":124},[203,10057,5006],{"class":213},[203,10059,10060],{"class":318},"\"关羽\"",[203,10062,592],{"class":213},[203,10064,964],{"class":262},[203,10066,592],{"class":213},[203,10068,10051],{"class":318},[203,10070,5019],{"class":213},[203,10072,10073,10075,10078,10080,10082,10084,10086],{"class":205,"line":1269},[203,10074,5006],{"class":213},[203,10076,10077],{"class":318},"\"张飞\"",[203,10079,592],{"class":213},[203,10081,914],{"class":262},[203,10083,592],{"class":213},[203,10085,10051],{"class":318},[203,10087,5019],{"class":213},[203,10089,10090,10092,10095,10097,10099,10101,10103],{"class":205,"line":1284},[203,10091,5006],{"class":213},[203,10093,10094],{"class":318},"\"赵云\"",[203,10096,592],{"class":213},[203,10098,939],{"class":262},[203,10100,592],{"class":213},[203,10102,10051],{"class":318},[203,10104,5019],{"class":213},[203,10106,10107,10109,10112,10114,10116,10118,10121],{"class":205,"line":1290},[203,10108,5006],{"class":213},[203,10110,10111],{"class":318},"\"貂蝉\"",[203,10113,592],{"class":213},[203,10115,889],{"class":262},[203,10117,592],{"class":213},[203,10119,10120],{"class":318},"\"女\"",[203,10122,5019],{"class":213},[19,10124,10125],{},"代码：",[194,10127,10129],{"className":196,"code":10128,"language":198,"meta":27,"style":27},"#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",[200,10130,10131,10137,10147,10153,10160,10164,10168,10174,10179,10183,10188,10211,10215,10240,10244,10277,10282,10311,10316,10331,10357,10377,10382,10387,10391,10395,10400,10422,10426,10450,10454,10516,10520,10524,10532,10536,10541,10552,10556,10572,10588,10604,10620,10636,10640,10660,10682,10687,10700,10707,10712,10718,10723,10736,10742],{"__ignoreMap":27},[203,10132,10133,10135],{"class":205,"line":206},[203,10134,2038],{"class":209},[203,10136,2041],{"class":318},[203,10138,10139,10141,10143,10145],{"class":205,"line":124},[203,10140,2046],{"class":209},[203,10142,2049],{"class":209},[203,10144,2053],{"class":2052},[203,10146,1380],{"class":213},[203,10148,10149,10151],{"class":205,"line":1269},[203,10150,2038],{"class":209},[203,10152,7839],{"class":318},[203,10154,10155,10157],{"class":205,"line":1284},[203,10156,7849],{"class":209},[203,10158,10159],{"class":2052}," Sanguo\n",[203,10161,10162],{"class":205,"line":1290},[203,10163,1635],{"class":213},[203,10165,10166],{"class":205,"line":1304},[203,10167,7875],{"class":213},[203,10169,10170,10172],{"class":205,"line":1310},[203,10171,2074],{"class":209},[203,10173,7887],{"class":213},[203,10175,10176],{"class":205,"line":1401},[203,10177,10178],{"class":213},"    string gender;\n",[203,10180,10181],{"class":205,"line":1407},[203,10182,4084],{"class":213},[203,10184,10185],{"class":205,"line":1419},[203,10186,10187],{"class":272},"\u002F\u002F定义排序函数\n",[203,10189,10190,10192,10194,10196,10199,10201,10203,10205,10207,10209],{"class":205,"line":1701},[203,10191,5454],{"class":209},[203,10193,7406],{"class":2052},[203,10195,214],{"class":213},[203,10197,10198],{"class":2052},"Sanguo",[203,10200,6608],{"class":209},[203,10202,909],{"class":5306},[203,10204,592],{"class":213},[203,10206,217],{"class":209},[203,10208,7421],{"class":5306},[203,10210,220],{"class":213},[203,10212,10213],{"class":205,"line":1706},[203,10214,1635],{"class":213},[203,10216,10217,10219,10221,10223,10225,10227,10229,10231,10233,10236,10238],{"class":205,"line":1712},[203,10218,3290],{"class":209},[203,10220,214],{"class":213},[203,10222,217],{"class":209},[203,10224,3121],{"class":213},[203,10226,259],{"class":209},[203,10228,405],{"class":262},[203,10230,3128],{"class":213},[203,10232,1124],{"class":209},[203,10234,10235],{"class":213},"len;i",[203,10237,2381],{"class":209},[203,10239,220],{"class":213},[203,10241,10242],{"class":205,"line":1717},[203,10243,2119],{"class":213},[203,10245,10246,10249,10251,10253,10255,10257,10259,10261,10263,10265,10267,10269,10271,10273,10275],{"class":205,"line":1731},[203,10247,10248],{"class":209},"     for",[203,10250,1747],{"class":213},[203,10252,217],{"class":209},[203,10254,3499],{"class":213},[203,10256,259],{"class":209},[203,10258,405],{"class":262},[203,10260,3506],{"class":213},[203,10262,1124],{"class":209},[203,10264,7448],{"class":213},[203,10266,746],{"class":209},[203,10268,431],{"class":262},[203,10270,746],{"class":209},[203,10272,3639],{"class":213},[203,10274,2381],{"class":209},[203,10276,220],{"class":213},[203,10278,10279],{"class":205,"line":1736},[203,10280,10281],{"class":213},"     {\n",[203,10283,10284,10287,10290,10292,10295,10297,10300,10302,10304,10306,10308],{"class":205,"line":1742},[203,10285,10286],{"class":209},"         if",[203,10288,10289],{"class":213}," ((s",[203,10291,695],{"class":209},[203,10293,10294],{"class":213},"j)->age ",[203,10296,1174],{"class":209},[203,10298,10299],{"class":213}," (s",[203,10301,695],{"class":209},[203,10303,681],{"class":213},[203,10305,695],{"class":209},[203,10307,431],{"class":262},[203,10309,10310],{"class":213},")->age)\n",[203,10312,10313],{"class":205,"line":1763},[203,10314,10315],{"class":213},"         {\n",[203,10317,10318,10321,10323,10326,10328],{"class":205,"line":1768},[203,10319,10320],{"class":213},"             Sanguo temp",[203,10322,7243],{"class":209},[203,10324,10325],{"class":213},"(s",[203,10327,695],{"class":209},[203,10329,10330],{"class":213},"j);\n",[203,10332,10333,10336,10338,10340,10343,10345,10347,10349,10351,10353,10355],{"class":205,"line":1782},[203,10334,10335],{"class":209},"             *",[203,10337,10325],{"class":213},[203,10339,695],{"class":209},[203,10341,10342],{"class":213},"j)",[203,10344,7243],{"class":209},[203,10346,10325],{"class":213},[203,10348,695],{"class":209},[203,10350,681],{"class":213},[203,10352,695],{"class":209},[203,10354,431],{"class":262},[203,10356,2808],{"class":213},[203,10358,10359,10361,10363,10365,10367,10369,10371,10373,10375],{"class":205,"line":1787},[203,10360,10335],{"class":209},[203,10362,10325],{"class":213},[203,10364,695],{"class":209},[203,10366,681],{"class":213},[203,10368,695],{"class":209},[203,10370,431],{"class":262},[203,10372,643],{"class":213},[203,10374,259],{"class":209},[203,10376,4369],{"class":213},[203,10378,10379],{"class":205,"line":1816},[203,10380,10381],{"class":213},"         }\n",[203,10383,10384],{"class":205,"line":1821},[203,10385,10386],{"class":213},"     }\n",[203,10388,10389],{"class":205,"line":1838},[203,10390,2276],{"class":213},[203,10392,10393],{"class":205,"line":1843},[203,10394,1654],{"class":213},[203,10396,10397],{"class":205,"line":1848},[203,10398,10399],{"class":272},"\u002F\u002F定义打印函数\n",[203,10401,10402,10404,10406,10408,10410,10412,10414,10416,10418,10420],{"class":205,"line":1853},[203,10403,5454],{"class":209},[203,10405,9705],{"class":2052},[203,10407,214],{"class":213},[203,10409,10198],{"class":2052},[203,10411,6608],{"class":209},[203,10413,909],{"class":5306},[203,10415,592],{"class":213},[203,10417,217],{"class":209},[203,10419,7421],{"class":5306},[203,10421,220],{"class":213},[203,10423,10424],{"class":205,"line":1867},[203,10425,1635],{"class":213},[203,10427,10428,10430,10432,10434,10436,10438,10440,10442,10444,10446,10448],{"class":205,"line":1872},[203,10429,3290],{"class":209},[203,10431,1747],{"class":213},[203,10433,217],{"class":209},[203,10435,3121],{"class":213},[203,10437,259],{"class":209},[203,10439,405],{"class":262},[203,10441,3128],{"class":213},[203,10443,1124],{"class":209},[203,10445,10235],{"class":213},[203,10447,2381],{"class":209},[203,10449,220],{"class":213},[203,10451,10452],{"class":205,"line":2666},[203,10453,2119],{"class":213},[203,10455,10456,10458,10460,10462,10464,10467,10469,10471,10473,10476,10478,10480,10482,10485,10487,10489,10491,10494,10496,10498,10500,10503,10505,10507,10509,10512,10514],{"class":205,"line":2680},[203,10457,3540],{"class":213},[203,10459,1258],{"class":209},[203,10461,465],{"class":318},[203,10463,1320],{"class":262},[203,10465,10466],{"class":318},"姓名：\"",[203,10468,1258],{"class":209},[203,10470,10325],{"class":213},[203,10472,695],{"class":209},[203,10474,10475],{"class":213},"i)->name",[203,10477,1258],{"class":209},[203,10479,465],{"class":318},[203,10481,1320],{"class":262},[203,10483,10484],{"class":318},"年龄：\"",[203,10486,1258],{"class":209},[203,10488,10325],{"class":213},[203,10490,695],{"class":209},[203,10492,10493],{"class":213},"i)->age",[203,10495,1258],{"class":209},[203,10497,465],{"class":318},[203,10499,1320],{"class":262},[203,10501,10502],{"class":318},"性别：\"",[203,10504,1258],{"class":209},[203,10506,10325],{"class":213},[203,10508,695],{"class":209},[203,10510,10511],{"class":213},"i)->gender",[203,10513,1258],{"class":209},[203,10515,1281],{"class":213},[203,10517,10518],{"class":205,"line":2688},[203,10519,2276],{"class":213},[203,10521,10522],{"class":205,"line":2693},[203,10523,1654],{"class":213},[203,10525,10526,10528,10530],{"class":205,"line":2699},[203,10527,217],{"class":209},[203,10529,2062],{"class":2052},[203,10531,2065],{"class":213},[203,10533,10534],{"class":205,"line":2705},[203,10535,1635],{"class":213},[203,10537,10538],{"class":205,"line":2710},[203,10539,10540],{"class":272},"    \u002F\u002F定义结构体变量\n",[203,10542,10543,10546,10548,10550],{"class":205,"line":8038},[203,10544,10545],{"class":213},"    Sanguo s1[",[203,10547,533],{"class":262},[203,10549,1154],{"class":213},[203,10551,4997],{"class":209},[203,10553,10554],{"class":205,"line":8062},[203,10555,2119],{"class":213},[203,10557,10558,10560,10562,10564,10566,10568,10570],{"class":205,"line":8067},[203,10559,5006],{"class":213},[203,10561,10042],{"class":318},[203,10563,592],{"class":213},[203,10565,989],{"class":262},[203,10567,592],{"class":213},[203,10569,10051],{"class":318},[203,10571,5019],{"class":213},[203,10573,10574,10576,10578,10580,10582,10584,10586],{"class":205,"line":8073},[203,10575,5006],{"class":213},[203,10577,10060],{"class":318},[203,10579,592],{"class":213},[203,10581,964],{"class":262},[203,10583,592],{"class":213},[203,10585,10051],{"class":318},[203,10587,5019],{"class":213},[203,10589,10590,10592,10594,10596,10598,10600,10602],{"class":205,"line":8100},[203,10591,5006],{"class":213},[203,10593,10077],{"class":318},[203,10595,592],{"class":213},[203,10597,914],{"class":262},[203,10599,592],{"class":213},[203,10601,10051],{"class":318},[203,10603,5019],{"class":213},[203,10605,10606,10608,10610,10612,10614,10616,10618],{"class":205,"line":8105},[203,10607,5006],{"class":213},[203,10609,10094],{"class":318},[203,10611,592],{"class":213},[203,10613,939],{"class":262},[203,10615,592],{"class":213},[203,10617,10051],{"class":318},[203,10619,5019],{"class":213},[203,10621,10622,10624,10626,10628,10630,10632,10634],{"class":205,"line":8111},[203,10623,5006],{"class":213},[203,10625,10111],{"class":318},[203,10627,592],{"class":213},[203,10629,889],{"class":262},[203,10631,592],{"class":213},[203,10633,10120],{"class":318},[203,10635,5019],{"class":213},[203,10637,10638],{"class":205,"line":8123},[203,10639,5040],{"class":213},[203,10641,10642,10644,10646,10648,10651,10653,10656,10658],{"class":205,"line":8135},[203,10643,2074],{"class":209},[203,10645,7421],{"class":213},[203,10647,4292],{"class":209},[203,10649,10650],{"class":213},"(s1)",[203,10652,4298],{"class":209},[203,10654,10655],{"class":213},"(s1[",[203,10657,405],{"class":262},[203,10659,3945],{"class":213},[203,10661,10662,10665,10667,10670,10672,10675,10678,10680],{"class":205,"line":8147},[203,10663,10664],{"class":213},"    Sanguo ",[203,10666,669],{"class":209},[203,10668,10669],{"class":213},"s ",[203,10671,259],{"class":209},[203,10673,10674],{"class":209}," &",[203,10676,10677],{"class":213},"s1[",[203,10679,405],{"class":262},[203,10681,4779],{"class":213},[203,10683,10684],{"class":205,"line":9806},[203,10685,10686],{"class":272},"    \u002F\u002F排序前：\n",[203,10688,10689,10691,10693,10696,10698],{"class":205,"line":9831},[203,10690,6619],{"class":213},[203,10692,1258],{"class":209},[203,10694,10695],{"class":318}," \"排序前：\"",[203,10697,1534],{"class":209},[203,10699,8930],{"class":213},[203,10701,10702,10704],{"class":205,"line":9854},[203,10703,10005],{"class":2052},[203,10705,10706],{"class":213},"(s,len);\n",[203,10708,10709],{"class":205,"line":9878},[203,10710,10711],{"class":272},"    \u002F\u002F调用排序函数\n",[203,10713,10714,10716],{"class":205,"line":9883},[203,10715,7688],{"class":2052},[203,10717,10706],{"class":213},[203,10719,10720],{"class":205,"line":9888},[203,10721,10722],{"class":272},"    \u002F\u002F排序后\n",[203,10724,10725,10727,10729,10732,10734],{"class":205,"line":9893},[203,10726,6619],{"class":213},[203,10728,1258],{"class":209},[203,10730,10731],{"class":318}," \"排序后：\"",[203,10733,1534],{"class":209},[203,10735,8930],{"class":213},[203,10737,10738,10740],{"class":205,"line":9902},[203,10739,10005],{"class":2052},[203,10741,10706],{"class":213},[203,10743,10744],{"class":205,"line":9907},[203,10745,1654],{"class":213},[19,10747,10748,10749,10751],{},"注意：使用指针时直接用传首地址**&s",[203,10750,405],{},"**",[5216,10753,10754],{},"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":27,"searchDepth":124,"depth":124,"links":10756},[10757,10758,10759,10760,10761,10762,10763],{"id":7793,"depth":124,"text":7794},{"id":8155,"depth":124,"text":8156},{"id":8424,"depth":124,"text":8425},{"id":8589,"depth":124,"text":8590},{"id":8805,"depth":124,"text":8806},{"id":9126,"depth":124,"text":9127},{"id":9354,"depth":124,"text":9355},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7782,"description":7790},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10770,"title":10771,"body":10772,"description":27,"extension":129,"meta":12115,"navigation":131,"path":12116,"seo":12117,"stem":12118,"__hash__":12119},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10773,"toc":12109},[10774,10777,10781,10787,10801,10806,10809,10813,10820,10826,10829,10836,10842,10847,10850,10853,10856,11420,11423,11437,11441,11446,11462,11602,11605,11611,11614,11619,11627,11735,11738,11743,11746,11751,11754,11760,11763,12106],[10,10775,10771],{"id":10776},"_5程序内存模型",[14,10778,10780],{"id":10779},"_51内存分区模型","5.1内存分区模型",[19,10782,10783,10784],{},"C++程序在执行时，将内存大方向划分为",[363,10785,10786],{},"4个区域",[1221,10788,10789,10792,10795,10798],{},[160,10790,10791],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[160,10793,10794],{},"全局区：存放全局变量和静态变量以及常量",[160,10796,10797],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[160,10799,10800],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,10802,10803],{},[363,10804,10805],{},"内存四区意义：",[19,10807,10808],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[174,10810,10812],{"id":10811},"_511程序运行前","5.1.1程序运行前",[19,10814,10815,10816,10819],{},"​\t在程序编译后，生成了exe可执行程序，",[363,10817,10818],{},"未执行该程序前","分为两个区域",[19,10821,10822,10823],{},"​\t",[363,10824,10825],{},"代码区：",[19,10827,10828],{},"​\t\t存放 CPU 执行的机器指令",[19,10830,10831,10832,10835],{},"​\t\t代码区是",[363,10833,10834],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,10837,10831,10838,10841],{},[363,10839,10840],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,10843,10822,10844],{},[363,10845,10846],{},"全局区：",[19,10848,10849],{},"​\t\t全局变量和静态变量存放在此.",[19,10851,10852],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,10854,10855],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[194,10857,10859],{"className":196,"code":10858,"language":198,"meta":27,"style":27},"\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",[200,10860,10861,10866,10879,10892,10896,10901,10916,10931,10935,10944,10948,10953,10966,10979,10983,10988,11014,11040,11044,11071,11097,11101,11106,11122,11137,11141,11167,11193,11197,11222,11247,11251,11277,11303,11307,11323,11338,11364,11390,11394,11404,11408,11416],{"__ignoreMap":27},[203,10862,10863],{"class":205,"line":206},[203,10864,10865],{"class":272},"\u002F\u002F全局变量\n",[203,10867,10868,10870,10873,10875,10877],{"class":205,"line":124},[203,10869,217],{"class":209},[203,10871,10872],{"class":213}," g_a ",[203,10874,259],{"class":209},[203,10876,2127],{"class":262},[203,10878,1380],{"class":213},[203,10880,10881,10883,10886,10888,10890],{"class":205,"line":1269},[203,10882,217],{"class":209},[203,10884,10885],{"class":213}," g_b ",[203,10887,259],{"class":209},[203,10889,2127],{"class":262},[203,10891,1380],{"class":213},[203,10893,10894],{"class":205,"line":1284},[203,10895,2489],{"emptyLinePlaceholder":131},[203,10897,10898],{"class":205,"line":1290},[203,10899,10900],{"class":272},"\u002F\u002F全局常量\n",[203,10902,10903,10905,10907,10910,10912,10914],{"class":205,"line":1304},[203,10904,6882],{"class":209},[203,10906,2471],{"class":209},[203,10908,10909],{"class":213}," c_g_a ",[203,10911,259],{"class":209},[203,10913,2127],{"class":262},[203,10915,1380],{"class":213},[203,10917,10918,10920,10922,10925,10927,10929],{"class":205,"line":1310},[203,10919,6882],{"class":209},[203,10921,2471],{"class":209},[203,10923,10924],{"class":213}," c_g_b ",[203,10926,259],{"class":209},[203,10928,2127],{"class":262},[203,10930,1380],{"class":213},[203,10932,10933],{"class":205,"line":1401},[203,10934,2489],{"emptyLinePlaceholder":131},[203,10936,10937,10939,10941],{"class":205,"line":1407},[203,10938,217],{"class":209},[203,10940,2062],{"class":2052},[203,10942,10943],{"class":213},"() {\n",[203,10945,10946],{"class":205,"line":1419},[203,10947,2489],{"emptyLinePlaceholder":131},[203,10949,10950],{"class":205,"line":1701},[203,10951,10952],{"class":272},"    \u002F\u002F局部变量\n",[203,10954,10955,10957,10960,10962,10964],{"class":205,"line":1706},[203,10956,2074],{"class":209},[203,10958,10959],{"class":213}," a ",[203,10961,259],{"class":209},[203,10963,2127],{"class":262},[203,10965,1380],{"class":213},[203,10967,10968,10970,10973,10975,10977],{"class":205,"line":1712},[203,10969,2074],{"class":209},[203,10971,10972],{"class":213}," b ",[203,10974,259],{"class":209},[203,10976,2127],{"class":262},[203,10978,1380],{"class":213},[203,10980,10981],{"class":205,"line":1717},[203,10982,2489],{"emptyLinePlaceholder":131},[203,10984,10985],{"class":205,"line":1731},[203,10986,10987],{"class":272},"    \u002F\u002F打印地址\n",[203,10989,10990,10992,10994,10997,10999,11001,11003,11005,11007,11010,11012],{"class":205,"line":1736},[203,10991,6619],{"class":213},[203,10993,1258],{"class":209},[203,10995,10996],{"class":318}," \"局部变量a地址为： \"",[203,10998,1534],{"class":209},[203,11000,1747],{"class":213},[203,11002,217],{"class":209},[203,11004,643],{"class":213},[203,11006,567],{"class":209},[203,11008,11009],{"class":213},"a ",[203,11011,1258],{"class":209},[203,11013,8930],{"class":213},[203,11015,11016,11018,11020,11023,11025,11027,11029,11031,11033,11036,11038],{"class":205,"line":1742},[203,11017,6619],{"class":213},[203,11019,1258],{"class":209},[203,11021,11022],{"class":318}," \"局部变量b地址为： \"",[203,11024,1534],{"class":209},[203,11026,1747],{"class":213},[203,11028,217],{"class":209},[203,11030,643],{"class":213},[203,11032,567],{"class":209},[203,11034,11035],{"class":213},"b ",[203,11037,1258],{"class":209},[203,11039,8930],{"class":213},[203,11041,11042],{"class":205,"line":1763},[203,11043,2489],{"emptyLinePlaceholder":131},[203,11045,11046,11048,11050,11053,11055,11058,11060,11062,11064,11067,11069],{"class":205,"line":1768},[203,11047,6619],{"class":213},[203,11049,1258],{"class":209},[203,11051,11052],{"class":318}," \"全局变量g_a地址为： \"",[203,11054,1534],{"class":209},[203,11056,11057],{"class":213},"  (",[203,11059,217],{"class":209},[203,11061,643],{"class":213},[203,11063,567],{"class":209},[203,11065,11066],{"class":213},"g_a ",[203,11068,1258],{"class":209},[203,11070,8930],{"class":213},[203,11072,11073,11075,11077,11080,11082,11084,11086,11088,11090,11093,11095],{"class":205,"line":1782},[203,11074,6619],{"class":213},[203,11076,1258],{"class":209},[203,11078,11079],{"class":318}," \"全局变量g_b地址为： \"",[203,11081,1534],{"class":209},[203,11083,11057],{"class":213},[203,11085,217],{"class":209},[203,11087,643],{"class":213},[203,11089,567],{"class":209},[203,11091,11092],{"class":213},"g_b ",[203,11094,1258],{"class":209},[203,11096,8930],{"class":213},[203,11098,11099],{"class":205,"line":1787},[203,11100,2489],{"emptyLinePlaceholder":131},[203,11102,11103],{"class":205,"line":1816},[203,11104,11105],{"class":272},"    \u002F\u002F静态变量\n",[203,11107,11108,11111,11113,11116,11118,11120],{"class":205,"line":1821},[203,11109,11110],{"class":209},"    static",[203,11112,2471],{"class":209},[203,11114,11115],{"class":213}," s_a ",[203,11117,259],{"class":209},[203,11119,2127],{"class":262},[203,11121,1380],{"class":213},[203,11123,11124,11126,11128,11131,11133,11135],{"class":205,"line":1838},[203,11125,11110],{"class":209},[203,11127,2471],{"class":209},[203,11129,11130],{"class":213}," s_b ",[203,11132,259],{"class":209},[203,11134,2127],{"class":262},[203,11136,1380],{"class":213},[203,11138,11139],{"class":205,"line":1843},[203,11140,2489],{"emptyLinePlaceholder":131},[203,11142,11143,11145,11147,11150,11152,11154,11156,11158,11160,11163,11165],{"class":205,"line":1848},[203,11144,6619],{"class":213},[203,11146,1258],{"class":209},[203,11148,11149],{"class":318}," \"静态变量s_a地址为： \"",[203,11151,1534],{"class":209},[203,11153,1747],{"class":213},[203,11155,217],{"class":209},[203,11157,643],{"class":213},[203,11159,567],{"class":209},[203,11161,11162],{"class":213},"s_a ",[203,11164,1258],{"class":209},[203,11166,8930],{"class":213},[203,11168,11169,11171,11173,11176,11178,11180,11182,11184,11186,11189,11191],{"class":205,"line":1853},[203,11170,6619],{"class":213},[203,11172,1258],{"class":209},[203,11174,11175],{"class":318}," \"静态变量s_b地址为： \"",[203,11177,1534],{"class":209},[203,11179,1747],{"class":213},[203,11181,217],{"class":209},[203,11183,643],{"class":213},[203,11185,567],{"class":209},[203,11187,11188],{"class":213},"s_b ",[203,11190,1258],{"class":209},[203,11192,8930],{"class":213},[203,11194,11195],{"class":205,"line":1867},[203,11196,2489],{"emptyLinePlaceholder":131},[203,11198,11199,11201,11203,11206,11208,11210,11212,11214,11216,11218,11220],{"class":205,"line":1872},[203,11200,6619],{"class":213},[203,11202,1258],{"class":209},[203,11204,11205],{"class":318}," \"字符串常量地址为： \"",[203,11207,1534],{"class":209},[203,11209,1747],{"class":213},[203,11211,217],{"class":209},[203,11213,643],{"class":213},[203,11215,567],{"class":209},[203,11217,1276],{"class":318},[203,11219,1534],{"class":209},[203,11221,8930],{"class":213},[203,11223,11224,11226,11228,11230,11232,11234,11236,11238,11240,11243,11245],{"class":205,"line":2666},[203,11225,6619],{"class":213},[203,11227,1258],{"class":209},[203,11229,11205],{"class":318},[203,11231,1534],{"class":209},[203,11233,1747],{"class":213},[203,11235,217],{"class":209},[203,11237,643],{"class":213},[203,11239,567],{"class":209},[203,11241,11242],{"class":318},"\"hello world1\"",[203,11244,1534],{"class":209},[203,11246,8930],{"class":213},[203,11248,11249],{"class":205,"line":2680},[203,11250,2489],{"emptyLinePlaceholder":131},[203,11252,11253,11255,11257,11260,11262,11264,11266,11268,11270,11273,11275],{"class":205,"line":2688},[203,11254,6619],{"class":213},[203,11256,1258],{"class":209},[203,11258,11259],{"class":318}," \"全局常量c_g_a地址为： \"",[203,11261,1534],{"class":209},[203,11263,1747],{"class":213},[203,11265,217],{"class":209},[203,11267,643],{"class":213},[203,11269,567],{"class":209},[203,11271,11272],{"class":213},"c_g_a ",[203,11274,1258],{"class":209},[203,11276,8930],{"class":213},[203,11278,11279,11281,11283,11286,11288,11290,11292,11294,11296,11299,11301],{"class":205,"line":2693},[203,11280,6619],{"class":213},[203,11282,1258],{"class":209},[203,11284,11285],{"class":318}," \"全局常量c_g_b地址为： \"",[203,11287,1534],{"class":209},[203,11289,1747],{"class":213},[203,11291,217],{"class":209},[203,11293,643],{"class":213},[203,11295,567],{"class":209},[203,11297,11298],{"class":213},"c_g_b ",[203,11300,1258],{"class":209},[203,11302,8930],{"class":213},[203,11304,11305],{"class":205,"line":2699},[203,11306,2489],{"emptyLinePlaceholder":131},[203,11308,11309,11312,11314,11317,11319,11321],{"class":205,"line":2705},[203,11310,11311],{"class":209},"    const",[203,11313,2471],{"class":209},[203,11315,11316],{"class":213}," c_l_a ",[203,11318,259],{"class":209},[203,11320,2127],{"class":262},[203,11322,1380],{"class":213},[203,11324,11325,11327,11329,11332,11334,11336],{"class":205,"line":2710},[203,11326,11311],{"class":209},[203,11328,2471],{"class":209},[203,11330,11331],{"class":213}," c_l_b ",[203,11333,259],{"class":209},[203,11335,2127],{"class":262},[203,11337,1380],{"class":213},[203,11339,11340,11342,11344,11347,11349,11351,11353,11355,11357,11360,11362],{"class":205,"line":8038},[203,11341,6619],{"class":213},[203,11343,1258],{"class":209},[203,11345,11346],{"class":318}," \"局部常量c_l_a地址为： \"",[203,11348,1534],{"class":209},[203,11350,1747],{"class":213},[203,11352,217],{"class":209},[203,11354,643],{"class":213},[203,11356,567],{"class":209},[203,11358,11359],{"class":213},"c_l_a ",[203,11361,1258],{"class":209},[203,11363,8930],{"class":213},[203,11365,11366,11368,11370,11373,11375,11377,11379,11381,11383,11386,11388],{"class":205,"line":8062},[203,11367,6619],{"class":213},[203,11369,1258],{"class":209},[203,11371,11372],{"class":318}," \"局部常量c_l_b地址为： \"",[203,11374,1534],{"class":209},[203,11376,1747],{"class":213},[203,11378,217],{"class":209},[203,11380,643],{"class":213},[203,11382,567],{"class":209},[203,11384,11385],{"class":213},"c_l_b ",[203,11387,1258],{"class":209},[203,11389,8930],{"class":213},[203,11391,11392],{"class":205,"line":8067},[203,11393,2489],{"emptyLinePlaceholder":131},[203,11395,11396,11398,11400,11402],{"class":205,"line":8073},[203,11397,2392],{"class":2052},[203,11399,214],{"class":213},[203,11401,2397],{"class":318},[203,11403,2808],{"class":213},[203,11405,11406],{"class":205,"line":8100},[203,11407,2489],{"emptyLinePlaceholder":131},[203,11409,11410,11412,11414],{"class":205,"line":8105},[203,11411,4179],{"class":209},[203,11413,4182],{"class":262},[203,11415,1380],{"class":213},[203,11417,11418],{"class":205,"line":8111},[203,11419,1654],{"class":213},[19,11421,11422],{},"总结：",[1221,11424,11425,11428,11431,11434],{},[160,11426,11427],{},"c++中程序运行前分为全局区和代码区",[160,11429,11430],{},"代码区特点是共享和只读",[160,11432,11433],{},"全局区中存放全局变量、静态变量、常量",[160,11435,11436],{},"常量区中存放const修饰的全局常量和字符串常量",[174,11438,11440],{"id":11439},"_512程序运行后","5.1.2程序运行后",[157,11442,11443],{},[160,11444,11445],{},"栈区：",[1221,11447,11448,11455],{},[160,11449,11450,11451,11454],{},"由编译器自动分配释放, 存放",[363,11452,11453],{},"函数的参数值,局部变量","等",[160,11456,11457,11458,11461],{},"注意事项：",[363,11459,11460],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[194,11463,11465],{"className":196,"code":11464,"language":198,"meta":27,"style":27},"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",[200,11466,11467,11478,11482,11497,11509,11513,11517,11525,11530,11545,11563,11580,11590,11598],{"__ignoreMap":27},[203,11468,11469,11471,11473,11476],{"class":205,"line":206},[203,11470,217],{"class":209},[203,11472,6608],{"class":209},[203,11474,11475],{"class":2052}," func",[203,11477,2065],{"class":213},[203,11479,11480],{"class":205,"line":124},[203,11481,1635],{"class":213},[203,11483,11484,11486,11488,11490,11492,11494],{"class":205,"line":1269},[203,11485,2074],{"class":209},[203,11487,10959],{"class":213},[203,11489,259],{"class":209},[203,11491,2127],{"class":262},[203,11493,269],{"class":213},[203,11495,11496],{"class":272}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[203,11498,11499,11501,11503,11506],{"class":205,"line":1284},[203,11500,4179],{"class":209},[203,11502,10674],{"class":209},[203,11504,11505],{"class":213},"a;",[203,11507,11508],{"class":272}," \u002F\u002F放回局部变量的地址\n",[203,11510,11511],{"class":205,"line":1290},[203,11512,1654],{"class":213},[203,11514,11515],{"class":205,"line":1304},[203,11516,2489],{"emptyLinePlaceholder":131},[203,11518,11519,11521,11523],{"class":205,"line":1310},[203,11520,217],{"class":209},[203,11522,2062],{"class":2052},[203,11524,10943],{"class":213},[203,11526,11527],{"class":205,"line":1401},[203,11528,11529],{"class":272},"    \u002F\u002F接受func的返回值\n",[203,11531,11532,11534,11536,11539,11541,11543],{"class":205,"line":1407},[203,11533,2074],{"class":209},[203,11535,6608],{"class":209},[203,11537,11538],{"class":213},"p ",[203,11540,259],{"class":209},[203,11542,11475],{"class":2052},[203,11544,5726],{"class":213},[203,11546,11547,11549,11551,11553,11555,11557,11560],{"class":205,"line":1419},[203,11548,6619],{"class":213},[203,11550,1258],{"class":209},[203,11552,6608],{"class":209},[203,11554,11538],{"class":213},[203,11556,1258],{"class":209},[203,11558,11559],{"class":213}," endl;",[203,11561,11562],{"class":272}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[203,11564,11565,11567,11569,11571,11573,11575,11577],{"class":205,"line":1701},[203,11566,6619],{"class":213},[203,11568,1258],{"class":209},[203,11570,6608],{"class":209},[203,11572,11538],{"class":213},[203,11574,1258],{"class":209},[203,11576,11559],{"class":213},[203,11578,11579],{"class":272}," \u002F\u002F第二次这个数据不再保留\n",[203,11581,11582,11584,11586,11588],{"class":205,"line":1706},[203,11583,2392],{"class":2052},[203,11585,214],{"class":213},[203,11587,2397],{"class":318},[203,11589,2808],{"class":213},[203,11591,11592,11594,11596],{"class":205,"line":1712},[203,11593,4179],{"class":209},[203,11595,4182],{"class":262},[203,11597,1380],{"class":213},[203,11599,11600],{"class":205,"line":1717},[203,11601,1654],{"class":213},[19,11603,11604],{},"输出结果：",[19,11606,11607],{},[25,11608],{"alt":11609,"src":11610},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,11612,11613],{},"总结：不要返回局部变量的地址",[157,11615,11616],{"start":124},[160,11617,11618],{},"堆区",[1221,11620,11621,11624],{},[160,11622,11623],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[160,11625,11626],{},"在c++中主要利用new在堆区开辟内存",[194,11628,11630],{"className":196,"code":11629,"language":198,"meta":27,"style":27},"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",[200,11631,11632,11647,11651,11656,11677,11684,11688,11696,11700,11705,11719,11731],{"__ignoreMap":27},[203,11633,11634,11636,11639,11642,11644],{"class":205,"line":206},[203,11635,217],{"class":209},[203,11637,11638],{"class":209},"  *",[203,11640,11641],{"class":2052},"func",[203,11643,2516],{"class":213},[203,11645,11646],{"class":272},"  \u002F\u002F函数返回指针\n",[203,11648,11649],{"class":205,"line":124},[203,11650,1635],{"class":213},[203,11652,11653],{"class":205,"line":1269},[203,11654,11655],{"class":272},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[203,11657,11658,11660,11662,11664,11666,11669,11671,11673,11675],{"class":205,"line":1284},[203,11659,4236],{"class":209},[203,11661,6608],{"class":209},[203,11663,19],{"class":213},[203,11665,259],{"class":209},[203,11667,11668],{"class":209}," new",[203,11670,2471],{"class":209},[203,11672,214],{"class":213},[203,11674,660],{"class":262},[203,11676,2808],{"class":213},[203,11678,11679,11681],{"class":205,"line":1290},[203,11680,4470],{"class":209},[203,11682,11683],{"class":213}," p;\n",[203,11685,11686],{"class":205,"line":1304},[203,11687,1654],{"class":213},[203,11689,11690,11692,11694],{"class":205,"line":1310},[203,11691,217],{"class":209},[203,11693,2062],{"class":2052},[203,11695,2065],{"class":213},[203,11697,11698],{"class":205,"line":1401},[203,11699,1635],{"class":213},[203,11701,11702],{"class":205,"line":1407},[203,11703,11704],{"class":272},"    \u002F\u002F在堆区开辟数据\n",[203,11706,11707,11709,11711,11713,11715,11717],{"class":205,"line":1419},[203,11708,2074],{"class":209},[203,11710,6608],{"class":209},[203,11712,19],{"class":213},[203,11714,259],{"class":209},[203,11716,11641],{"class":2052},[203,11718,5726],{"class":213},[203,11720,11721,11723,11725,11727,11729],{"class":205,"line":1701},[203,11722,1640],{"class":213},[203,11724,6509],{"class":209},[203,11726,19],{"class":213},[203,11728,1258],{"class":209},[203,11730,1281],{"class":213},[203,11732,11733],{"class":205,"line":1706},[203,11734,1654],{"class":213},[19,11736,11737],{},"图片展示：",[19,11739,11740],{},[25,11741],{"alt":11609,"src":11742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,11744,11745],{},"堆区内存由程序员管生死！！！",[157,11747,11748],{"start":1269},[160,11749,11750],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,11752,11753],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,11755,11756,11757],{},"​语法：",[200,11758,11759],{}," new 数据类型",[19,11761,11762],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[194,11764,11766],{"className":196,"code":11765,"language":198,"meta":27,"style":27},"\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",[200,11767,11768,11773,11783,11787,11792,11797,11819,11823,11831,11835,11849,11861,11873,11885,11890,11895,11906,11910,11915,11923,11927,11932,11954,11980,11984,12002,12006,12032,12036,12048,12052,12057,12062,12070,12074,12078,12086,12090,12096,12102],{"__ignoreMap":27},[203,11769,11770],{"class":205,"line":206},[203,11771,11772],{"class":272},"\u002F\u002F1.new的基本语法\n",[203,11774,11775,11777,11779,11781],{"class":205,"line":124},[203,11776,217],{"class":209},[203,11778,6608],{"class":209},[203,11780,11641],{"class":2052},[203,11782,2065],{"class":213},[203,11784,11785],{"class":205,"line":1269},[203,11786,1635],{"class":213},[203,11788,11789],{"class":205,"line":1284},[203,11790,11791],{"class":272},"    \u002F\u002F在堆区创建整型数据\n",[203,11793,11794],{"class":205,"line":1290},[203,11795,11796],{"class":272},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[203,11798,11799,11801,11803,11805,11808,11810,11812,11814,11816],{"class":205,"line":1304},[203,11800,2074],{"class":209},[203,11802,6608],{"class":209},[203,11804,19],{"class":213},[203,11806,11807],{"class":209},"=new",[203,11809,2471],{"class":209},[203,11811,214],{"class":213},[203,11813,660],{"class":262},[203,11815,6056],{"class":213},[203,11817,11818],{"class":272},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[203,11820,11821],{"class":205,"line":1310},[203,11822,1654],{"class":213},[203,11824,11825,11827,11829],{"class":205,"line":1401},[203,11826,5454],{"class":209},[203,11828,5678],{"class":2052},[203,11830,2065],{"class":213},[203,11832,11833],{"class":205,"line":1407},[203,11834,1635],{"class":213},[203,11836,11837,11839,11841,11843,11845,11847],{"class":205,"line":1419},[203,11838,2074],{"class":209},[203,11840,6608],{"class":209},[203,11842,19],{"class":213},[203,11844,259],{"class":209},[203,11846,11641],{"class":2052},[203,11848,5726],{"class":213},[203,11850,11851,11853,11855,11857,11859],{"class":205,"line":1701},[203,11852,1640],{"class":213},[203,11854,6509],{"class":209},[203,11856,19],{"class":213},[203,11858,1258],{"class":209},[203,11860,1281],{"class":213},[203,11862,11863,11865,11867,11869,11871],{"class":205,"line":1706},[203,11864,1640],{"class":213},[203,11866,6509],{"class":209},[203,11868,19],{"class":213},[203,11870,1258],{"class":209},[203,11872,1281],{"class":213},[203,11874,11875,11877,11879,11881,11883],{"class":205,"line":1712},[203,11876,1640],{"class":213},[203,11878,6509],{"class":209},[203,11880,19],{"class":213},[203,11882,1258],{"class":209},[203,11884,1281],{"class":213},[203,11886,11887],{"class":205,"line":1717},[203,11888,11889],{"class":272},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[203,11891,11892],{"class":205,"line":1731},[203,11893,11894],{"class":272},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[203,11896,11897,11900,11903],{"class":205,"line":1736},[203,11898,11899],{"class":209},"    delete",[203,11901,11902],{"class":213}," p;",[203,11904,11905],{"class":272},"\u002F\u002F删除这块地址\n",[203,11907,11908],{"class":205,"line":1742},[203,11909,1654],{"class":213},[203,11911,11912],{"class":205,"line":1763},[203,11913,11914],{"class":272},"\u002F\u002F2.在堆区利用new开辟数组\n",[203,11916,11917,11919,11921],{"class":205,"line":1768},[203,11918,5454],{"class":209},[203,11920,5747],{"class":2052},[203,11922,2065],{"class":213},[203,11924,11925],{"class":205,"line":1782},[203,11926,1635],{"class":213},[203,11928,11929],{"class":205,"line":1787},[203,11930,11931],{"class":272},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[203,11933,11934,11936,11938,11940,11942,11944,11946,11948,11951],{"class":205,"line":1816},[203,11935,2074],{"class":209},[203,11937,6608],{"class":209},[203,11939,3969],{"class":213},[203,11941,11807],{"class":209},[203,11943,2471],{"class":209},[203,11945,1104],{"class":213},[203,11947,660],{"class":262},[203,11949,11950],{"class":213},"];",[203,11952,11953],{"class":272},"\u002F\u002F10代表数组有10个元素\n",[203,11955,11956,11958,11960,11962,11964,11966,11968,11970,11972,11974,11976,11978],{"class":205,"line":1821},[203,11957,3290],{"class":209},[203,11959,1747],{"class":213},[203,11961,217],{"class":209},[203,11963,3121],{"class":213},[203,11965,259],{"class":209},[203,11967,405],{"class":262},[203,11969,3128],{"class":213},[203,11971,1124],{"class":209},[203,11973,660],{"class":262},[203,11975,3128],{"class":213},[203,11977,2381],{"class":209},[203,11979,220],{"class":213},[203,11981,11982],{"class":205,"line":1838},[203,11983,2119],{"class":213},[203,11985,11986,11989,11991,11993,11995,11997,11999],{"class":205,"line":1843},[203,11987,11988],{"class":213},"        arr[i]",[203,11990,259],{"class":209},[203,11992,655],{"class":213},[203,11994,695],{"class":209},[203,11996,525],{"class":262},[203,11998,269],{"class":213},[203,12000,12001],{"class":272},"\u002F\u002F给10个元素赋值100～109\n",[203,12003,12004],{"class":205,"line":1848},[203,12005,2276],{"class":213},[203,12007,12008,12010,12012,12014,12016,12018,12020,12022,12024,12026,12028,12030],{"class":205,"line":1853},[203,12009,3290],{"class":209},[203,12011,1747],{"class":213},[203,12013,217],{"class":209},[203,12015,3121],{"class":213},[203,12017,259],{"class":209},[203,12019,405],{"class":262},[203,12021,3128],{"class":213},[203,12023,1124],{"class":209},[203,12025,660],{"class":262},[203,12027,3128],{"class":213},[203,12029,2381],{"class":209},[203,12031,220],{"class":213},[203,12033,12034],{"class":205,"line":1867},[203,12035,2119],{"class":213},[203,12037,12038,12040,12042,12044,12046],{"class":205,"line":1872},[203,12039,3540],{"class":213},[203,12041,1258],{"class":209},[203,12043,4443],{"class":213},[203,12045,1258],{"class":209},[203,12047,1281],{"class":213},[203,12049,12050],{"class":205,"line":2666},[203,12051,2276],{"class":213},[203,12053,12054],{"class":205,"line":2680},[203,12055,12056],{"class":272},"    \u002F\u002F释放堆区数组\n",[203,12058,12059],{"class":205,"line":2688},[203,12060,12061],{"class":272},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[203,12063,12064,12067],{"class":205,"line":2693},[203,12065,12066],{"class":209},"    delete[]",[203,12068,12069],{"class":213}," arr;\n",[203,12071,12072],{"class":205,"line":2699},[203,12073,1654],{"class":213},[203,12075,12076],{"class":205,"line":2705},[203,12077,2489],{"emptyLinePlaceholder":131},[203,12079,12080,12082,12084],{"class":205,"line":2710},[203,12081,217],{"class":209},[203,12083,2062],{"class":2052},[203,12085,2065],{"class":213},[203,12087,12088],{"class":205,"line":8038},[203,12089,1635],{"class":213},[203,12091,12092,12094],{"class":205,"line":8062},[203,12093,5723],{"class":2052},[203,12095,5726],{"class":213},[203,12097,12098,12100],{"class":205,"line":8067},[203,12099,5792],{"class":2052},[203,12101,5726],{"class":213},[203,12103,12104],{"class":205,"line":8073},[203,12105,1654],{"class":213},[5216,12107,12108],{},"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":27,"searchDepth":124,"depth":124,"links":12110},[12111],{"id":10779,"depth":124,"text":10780,"children":12112},[12113,12114],{"id":10811,"depth":1269,"text":10812},{"id":11439,"depth":1269,"text":11440},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10771,"description":27},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12121,"title":12122,"body":12123,"description":27,"extension":129,"meta":13604,"navigation":131,"path":13605,"seo":13606,"stem":13607,"__hash__":13608},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12124,"toc":13596},[12125,12128,12132,12135,12138,12307,12311,12316,12333,12338,12490,12494,12497,12500,12894,12898,12901,12906,12909,13221,13225,13231,13391,13393,13401,13405,13408,13415,13593],[10,12126,12122],{"id":12127},"_6引用",[14,12129,12131],{"id":12130},"_61引用基本用法","6.1引用基本用法",[19,12133,12134],{},"引用的本质：给变量起别名",[19,12136,12137],{},"语法：数据类型 &别名=原名",[194,12139,12141],{"className":196,"code":12140,"language":198,"meta":27,"style":27},"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",[200,12142,12143,12151,12155,12167,12179,12183,12202,12221,12225,12236,12240,12259,12277,12281,12291,12295,12303],{"__ignoreMap":27},[203,12144,12145,12147,12149],{"class":205,"line":206},[203,12146,217],{"class":209},[203,12148,2062],{"class":2052},[203,12150,10943],{"class":213},[203,12152,12153],{"class":205,"line":124},[203,12154,2489],{"emptyLinePlaceholder":131},[203,12156,12157,12159,12161,12163,12165],{"class":205,"line":1269},[203,12158,2074],{"class":209},[203,12160,10959],{"class":213},[203,12162,259],{"class":209},[203,12164,2127],{"class":262},[203,12166,1380],{"class":213},[203,12168,12169,12171,12173,12175,12177],{"class":205,"line":1284},[203,12170,2074],{"class":209},[203,12172,10674],{"class":209},[203,12174,11035],{"class":213},[203,12176,259],{"class":209},[203,12178,1522],{"class":213},[203,12180,12181],{"class":205,"line":1290},[203,12182,2489],{"emptyLinePlaceholder":131},[203,12184,12185,12187,12189,12192,12194,12196,12198,12200],{"class":205,"line":1304},[203,12186,6619],{"class":213},[203,12188,1258],{"class":209},[203,12190,12191],{"class":318}," \"a = \"",[203,12193,1534],{"class":209},[203,12195,10959],{"class":213},[203,12197,1258],{"class":209},[203,12199,11559],{"class":213},[203,12201,7358],{"class":272},[203,12203,12204,12206,12208,12211,12213,12215,12217,12219],{"class":205,"line":1310},[203,12205,6619],{"class":213},[203,12207,1258],{"class":209},[203,12209,12210],{"class":318}," \"b = \"",[203,12212,1534],{"class":209},[203,12214,10972],{"class":213},[203,12216,1258],{"class":209},[203,12218,11559],{"class":213},[203,12220,7358],{"class":272},[203,12222,12223],{"class":205,"line":1401},[203,12224,2489],{"emptyLinePlaceholder":131},[203,12226,12227,12230,12232,12234],{"class":205,"line":1407},[203,12228,12229],{"class":213},"    b ",[203,12231,259],{"class":209},[203,12233,5844],{"class":262},[203,12235,1380],{"class":213},[203,12237,12238],{"class":205,"line":1419},[203,12239,2489],{"emptyLinePlaceholder":131},[203,12241,12242,12244,12246,12248,12250,12252,12254,12256],{"class":205,"line":1701},[203,12243,6619],{"class":213},[203,12245,1258],{"class":209},[203,12247,12191],{"class":318},[203,12249,1534],{"class":209},[203,12251,10959],{"class":213},[203,12253,1258],{"class":209},[203,12255,11559],{"class":213},[203,12257,12258],{"class":272},"\u002F\u002F100\n",[203,12260,12261,12263,12265,12267,12269,12271,12273,12275],{"class":205,"line":1706},[203,12262,6619],{"class":213},[203,12264,1258],{"class":209},[203,12266,12210],{"class":318},[203,12268,1534],{"class":209},[203,12270,10972],{"class":213},[203,12272,1258],{"class":209},[203,12274,11559],{"class":213},[203,12276,12258],{"class":272},[203,12278,12279],{"class":205,"line":1712},[203,12280,2489],{"emptyLinePlaceholder":131},[203,12282,12283,12285,12287,12289],{"class":205,"line":1717},[203,12284,2392],{"class":2052},[203,12286,214],{"class":213},[203,12288,2397],{"class":318},[203,12290,2808],{"class":213},[203,12292,12293],{"class":205,"line":1731},[203,12294,2489],{"emptyLinePlaceholder":131},[203,12296,12297,12299,12301],{"class":205,"line":1736},[203,12298,4179],{"class":209},[203,12300,4182],{"class":262},[203,12302,1380],{"class":213},[203,12304,12305],{"class":205,"line":1742},[203,12306,1654],{"class":213},[14,12308,12310],{"id":12309},"_62引用的注意事项","6.2引用的注意事项",[157,12312,12313],{},[160,12314,12315],{},"引用必须要初始化",[194,12317,12319],{"className":196,"code":12318,"language":198,"meta":27,"style":27},"int &b;\u002F\u002F非常错误！\n",[200,12320,12321],{"__ignoreMap":27},[203,12322,12323,12325,12327,12330],{"class":205,"line":206},[203,12324,217],{"class":209},[203,12326,10674],{"class":209},[203,12328,12329],{"class":213},"b;",[203,12331,12332],{"class":272},"\u002F\u002F非常错误！\n",[157,12334,12335],{"start":124},[160,12336,12337],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[194,12339,12341],{"className":196,"code":12340,"language":198,"meta":27,"style":27},"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",[200,12342,12343,12351,12363,12375,12383,12399,12412,12430,12448,12468,12478,12486],{"__ignoreMap":27},[203,12344,12345,12347,12349],{"class":205,"line":206},[203,12346,217],{"class":209},[203,12348,2062],{"class":2052},[203,12350,10943],{"class":213},[203,12352,12353,12355,12357,12359,12361],{"class":205,"line":124},[203,12354,2074],{"class":209},[203,12356,10959],{"class":213},[203,12358,259],{"class":209},[203,12360,2127],{"class":262},[203,12362,1380],{"class":213},[203,12364,12365,12367,12369,12371,12373],{"class":205,"line":1269},[203,12366,2074],{"class":209},[203,12368,10972],{"class":213},[203,12370,259],{"class":209},[203,12372,9040],{"class":262},[203,12374,1380],{"class":213},[203,12376,12377,12380],{"class":205,"line":1284},[203,12378,12379],{"class":272},"    \u002F\u002Fint &c;",[203,12381,12382],{"class":272}," \u002F\u002F错误，引用必须初始化\n",[203,12384,12385,12387,12389,12391,12393,12396],{"class":205,"line":1290},[203,12386,2074],{"class":209},[203,12388,10674],{"class":209},[203,12390,3035],{"class":213},[203,12392,259],{"class":209},[203,12394,12395],{"class":213}," a;",[203,12397,12398],{"class":272}," \u002F\u002F一旦初始化后，就不可以更改\n",[203,12400,12401,12404,12406,12409],{"class":205,"line":1304},[203,12402,12403],{"class":213},"    c ",[203,12405,259],{"class":209},[203,12407,12408],{"class":213}," b;",[203,12410,12411],{"class":272}," \u002F\u002F这是赋值操作，不是更改引用\n",[203,12413,12414,12416,12418,12420,12422,12424,12426,12428],{"class":205,"line":1310},[203,12415,6619],{"class":213},[203,12417,1258],{"class":209},[203,12419,12191],{"class":318},[203,12421,1534],{"class":209},[203,12423,10959],{"class":213},[203,12425,1258],{"class":209},[203,12427,11559],{"class":213},[203,12429,7343],{"class":272},[203,12431,12432,12434,12436,12438,12440,12442,12444,12446],{"class":205,"line":1401},[203,12433,6619],{"class":213},[203,12435,1258],{"class":209},[203,12437,12210],{"class":318},[203,12439,1534],{"class":209},[203,12441,10972],{"class":213},[203,12443,1258],{"class":209},[203,12445,11559],{"class":213},[203,12447,7343],{"class":272},[203,12449,12450,12452,12454,12457,12459,12462,12464,12466],{"class":205,"line":1407},[203,12451,6619],{"class":213},[203,12453,1258],{"class":209},[203,12455,12456],{"class":318}," \"c = \"",[203,12458,1534],{"class":209},[203,12460,12461],{"class":213}," c ",[203,12463,1258],{"class":209},[203,12465,11559],{"class":213},[203,12467,7343],{"class":272},[203,12469,12470,12472,12474,12476],{"class":205,"line":1419},[203,12471,2392],{"class":2052},[203,12473,214],{"class":213},[203,12475,2397],{"class":318},[203,12477,2808],{"class":213},[203,12479,12480,12482,12484],{"class":205,"line":1701},[203,12481,4179],{"class":209},[203,12483,4182],{"class":262},[203,12485,1380],{"class":213},[203,12487,12488],{"class":205,"line":1706},[203,12489,1654],{"class":213},[14,12491,12493],{"id":12492},"_63引用做函数参数","6.3引用做函数参数",[19,12495,12496],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,12498,12499],{},"优点：可以简化指针修改实参",[194,12501,12503],{"className":196,"code":12502,"language":198,"meta":27,"style":27},"\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",[200,12504,12505,12510,12533,12544,12554,12563,12567,12571,12576,12598,12610,12622,12632,12636,12640,12645,12667,12677,12685,12693,12697,12701,12709,12713,12725,12737,12741,12752,12778,12782,12802,12826,12830,12840,12864,12868,12878,12882,12890],{"__ignoreMap":27},[203,12506,12507],{"class":205,"line":206},[203,12508,12509],{"class":272},"\u002F\u002F1. 值传递\n",[203,12511,12512,12514,12517,12519,12521,12523,12526,12528,12530],{"class":205,"line":124},[203,12513,5454],{"class":209},[203,12515,12516],{"class":2052}," mySwap01",[203,12518,214],{"class":213},[203,12520,217],{"class":209},[203,12522,1488],{"class":5306},[203,12524,12525],{"class":213},", ",[203,12527,217],{"class":209},[203,12529,2922],{"class":5306},[203,12531,12532],{"class":213},") {\n",[203,12534,12535,12537,12540,12542],{"class":205,"line":1269},[203,12536,2074],{"class":209},[203,12538,12539],{"class":213}," temp ",[203,12541,259],{"class":209},[203,12543,1522],{"class":213},[203,12545,12546,12549,12551],{"class":205,"line":1284},[203,12547,12548],{"class":213},"    a ",[203,12550,259],{"class":209},[203,12552,12553],{"class":213}," b;\n",[203,12555,12556,12558,12560],{"class":205,"line":1290},[203,12557,12229],{"class":213},[203,12559,259],{"class":209},[203,12561,12562],{"class":213}," temp;\n",[203,12564,12565],{"class":205,"line":1304},[203,12566,1654],{"class":213},[203,12568,12569],{"class":205,"line":1310},[203,12570,2489],{"emptyLinePlaceholder":131},[203,12572,12573],{"class":205,"line":1401},[203,12574,12575],{"class":272},"\u002F\u002F2. 地址传递\n",[203,12577,12578,12580,12583,12585,12588,12590,12592,12594,12596],{"class":205,"line":1407},[203,12579,5454],{"class":209},[203,12581,12582],{"class":2052}," mySwap02",[203,12584,214],{"class":213},[203,12586,12587],{"class":209},"int*",[203,12589,1488],{"class":5306},[203,12591,12525],{"class":213},[203,12593,12587],{"class":209},[203,12595,2922],{"class":5306},[203,12597,12532],{"class":213},[203,12599,12600,12602,12604,12606,12608],{"class":205,"line":1419},[203,12601,2074],{"class":209},[203,12603,12539],{"class":213},[203,12605,259],{"class":209},[203,12607,6608],{"class":209},[203,12609,6287],{"class":213},[203,12611,12612,12614,12616,12618,12620],{"class":205,"line":1701},[203,12613,6493],{"class":209},[203,12615,11009],{"class":213},[203,12617,259],{"class":209},[203,12619,6608],{"class":209},[203,12621,6159],{"class":213},[203,12623,12624,12626,12628,12630],{"class":205,"line":1706},[203,12625,6493],{"class":209},[203,12627,11035],{"class":213},[203,12629,259],{"class":209},[203,12631,12562],{"class":213},[203,12633,12634],{"class":205,"line":1712},[203,12635,1654],{"class":213},[203,12637,12638],{"class":205,"line":1717},[203,12639,2489],{"emptyLinePlaceholder":131},[203,12641,12642],{"class":205,"line":1731},[203,12643,12644],{"class":272},"\u002F\u002F3. 引用传递\n",[203,12646,12647,12649,12652,12654,12657,12659,12661,12663,12665],{"class":205,"line":1736},[203,12648,5454],{"class":209},[203,12650,12651],{"class":2052}," mySwap03",[203,12653,214],{"class":213},[203,12655,12656],{"class":209},"int&",[203,12658,1488],{"class":5306},[203,12660,12525],{"class":213},[203,12662,12656],{"class":209},[203,12664,2922],{"class":5306},[203,12666,12532],{"class":213},[203,12668,12669,12671,12673,12675],{"class":205,"line":1742},[203,12670,2074],{"class":209},[203,12672,12539],{"class":213},[203,12674,259],{"class":209},[203,12676,1522],{"class":213},[203,12678,12679,12681,12683],{"class":205,"line":1763},[203,12680,12548],{"class":213},[203,12682,259],{"class":209},[203,12684,12553],{"class":213},[203,12686,12687,12689,12691],{"class":205,"line":1768},[203,12688,12229],{"class":213},[203,12690,259],{"class":209},[203,12692,12562],{"class":213},[203,12694,12695],{"class":205,"line":1782},[203,12696,1654],{"class":213},[203,12698,12699],{"class":205,"line":1787},[203,12700,2489],{"emptyLinePlaceholder":131},[203,12702,12703,12705,12707],{"class":205,"line":1816},[203,12704,217],{"class":209},[203,12706,2062],{"class":2052},[203,12708,10943],{"class":213},[203,12710,12711],{"class":205,"line":1821},[203,12712,2489],{"emptyLinePlaceholder":131},[203,12714,12715,12717,12719,12721,12723],{"class":205,"line":1838},[203,12716,2074],{"class":209},[203,12718,10959],{"class":213},[203,12720,259],{"class":209},[203,12722,2127],{"class":262},[203,12724,1380],{"class":213},[203,12726,12727,12729,12731,12733,12735],{"class":205,"line":1843},[203,12728,2074],{"class":209},[203,12730,10972],{"class":213},[203,12732,259],{"class":209},[203,12734,9040],{"class":262},[203,12736,1380],{"class":213},[203,12738,12739],{"class":205,"line":1848},[203,12740,2489],{"emptyLinePlaceholder":131},[203,12742,12743,12746,12749],{"class":205,"line":1853},[203,12744,12745],{"class":2052},"    mySwap01",[203,12747,12748],{"class":213},"(a, b);",[203,12750,12751],{"class":272},"\u002F\u002F值传递，形参不会修饰实参\n",[203,12753,12754,12756,12758,12761,12763,12765,12767,12770,12772,12774,12776],{"class":205,"line":1867},[203,12755,6619],{"class":213},[203,12757,1258],{"class":209},[203,12759,12760],{"class":318}," \"a:\"",[203,12762,1534],{"class":209},[203,12764,10959],{"class":213},[203,12766,1258],{"class":209},[203,12768,12769],{"class":318}," \" b:\"",[203,12771,1534],{"class":209},[203,12773,10972],{"class":213},[203,12775,1258],{"class":209},[203,12777,8930],{"class":213},[203,12779,12780],{"class":205,"line":1872},[203,12781,2489],{"emptyLinePlaceholder":131},[203,12783,12784,12787,12789,12791,12794,12796,12799],{"class":205,"line":2666},[203,12785,12786],{"class":2052},"    mySwap02",[203,12788,214],{"class":213},[203,12790,567],{"class":209},[203,12792,12793],{"class":213},"a, ",[203,12795,567],{"class":209},[203,12797,12798],{"class":213},"b);",[203,12800,12801],{"class":272},"\u002F\u002F地址传递，形参会修饰实参\n",[203,12803,12804,12806,12808,12810,12812,12814,12816,12818,12820,12822,12824],{"class":205,"line":2680},[203,12805,6619],{"class":213},[203,12807,1258],{"class":209},[203,12809,12760],{"class":318},[203,12811,1534],{"class":209},[203,12813,10959],{"class":213},[203,12815,1258],{"class":209},[203,12817,12769],{"class":318},[203,12819,1534],{"class":209},[203,12821,10972],{"class":213},[203,12823,1258],{"class":209},[203,12825,8930],{"class":213},[203,12827,12828],{"class":205,"line":2688},[203,12829,2489],{"emptyLinePlaceholder":131},[203,12831,12832,12835,12837],{"class":205,"line":2693},[203,12833,12834],{"class":2052},"    mySwap03",[203,12836,12748],{"class":213},[203,12838,12839],{"class":272},"\u002F\u002F引用传递，形参会修饰实参\n",[203,12841,12842,12844,12846,12848,12850,12852,12854,12856,12858,12860,12862],{"class":205,"line":2699},[203,12843,6619],{"class":213},[203,12845,1258],{"class":209},[203,12847,12760],{"class":318},[203,12849,1534],{"class":209},[203,12851,10959],{"class":213},[203,12853,1258],{"class":209},[203,12855,12769],{"class":318},[203,12857,1534],{"class":209},[203,12859,10972],{"class":213},[203,12861,1258],{"class":209},[203,12863,8930],{"class":213},[203,12865,12866],{"class":205,"line":2705},[203,12867,2489],{"emptyLinePlaceholder":131},[203,12869,12870,12872,12874,12876],{"class":205,"line":2710},[203,12871,2392],{"class":2052},[203,12873,214],{"class":213},[203,12875,2397],{"class":318},[203,12877,2808],{"class":213},[203,12879,12880],{"class":205,"line":8038},[203,12881,2489],{"emptyLinePlaceholder":131},[203,12883,12884,12886,12888],{"class":205,"line":8062},[203,12885,4179],{"class":209},[203,12887,4182],{"class":262},[203,12889,1380],{"class":213},[203,12891,12892],{"class":205,"line":8067},[203,12893,1654],{"class":213},[14,12895,12897],{"id":12896},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,12899,12900],{},"作用：引用是可以作为函数的返回值存在的",[19,12902,9115,12903],{},[363,12904,12905],{},"不要返回局部变量引用",[19,12907,12908],{},"用法：函数调用作为左值",[194,12910,12912],{"className":10031,"code":12911,"language":10033,"meta":27,"style":27},"\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",[200,12913,12914,12919,12927,12942,12948,12952,12956,12961,12969,12986,12992,12996,13000,13008,13012,13017,13031,13051,13070,13074,13079,13092,13112,13130,13134,13150,13154,13173,13191,13195,13205,13209,13217],{"__ignoreMap":27},[203,12915,12916],{"class":205,"line":206},[203,12917,12918],{"class":272},"\u002F\u002F返回局部变量引用\n",[203,12920,12921,12923,12925],{"class":205,"line":124},[203,12922,12656],{"class":209},[203,12924,5678],{"class":2052},[203,12926,10943],{"class":213},[203,12928,12929,12931,12933,12935,12937,12939],{"class":205,"line":1269},[203,12930,2074],{"class":209},[203,12932,10959],{"class":213},[203,12934,259],{"class":209},[203,12936,2127],{"class":262},[203,12938,269],{"class":213},[203,12940,12941],{"class":272}," \u002F\u002F局部变量\n",[203,12943,12944,12946],{"class":205,"line":1284},[203,12945,4179],{"class":209},[203,12947,1522],{"class":213},[203,12949,12950],{"class":205,"line":1290},[203,12951,1654],{"class":213},[203,12953,12954],{"class":205,"line":1304},[203,12955,2489],{"emptyLinePlaceholder":131},[203,12957,12958],{"class":205,"line":1310},[203,12959,12960],{"class":272},"\u002F\u002F返回静态变量引用\n",[203,12962,12963,12965,12967],{"class":205,"line":1401},[203,12964,12656],{"class":209},[203,12966,5747],{"class":2052},[203,12968,10943],{"class":213},[203,12970,12971,12973,12975,12977,12979,12981,12983],{"class":205,"line":1407},[203,12972,11110],{"class":209},[203,12974,2471],{"class":209},[203,12976,10959],{"class":213},[203,12978,259],{"class":209},[203,12980,9040],{"class":262},[203,12982,269],{"class":213},[203,12984,12985],{"class":272},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[203,12987,12988,12990],{"class":205,"line":1419},[203,12989,4179],{"class":209},[203,12991,1522],{"class":213},[203,12993,12994],{"class":205,"line":1701},[203,12995,1654],{"class":213},[203,12997,12998],{"class":205,"line":1706},[203,12999,2489],{"emptyLinePlaceholder":131},[203,13001,13002,13004,13006],{"class":205,"line":1712},[203,13003,217],{"class":209},[203,13005,2062],{"class":2052},[203,13007,10943],{"class":213},[203,13009,13010],{"class":205,"line":1717},[203,13011,2489],{"emptyLinePlaceholder":131},[203,13013,13014],{"class":205,"line":1731},[203,13015,13016],{"class":272},"    \u002F\u002F不能返回局部变量的引用\n",[203,13018,13019,13022,13025,13027,13029],{"class":205,"line":1736},[203,13020,13021],{"class":209},"    int&",[203,13023,13024],{"class":213}," ref ",[203,13026,259],{"class":209},[203,13028,5678],{"class":2052},[203,13030,5726],{"class":213},[203,13032,13033,13035,13037,13040,13042,13044,13046,13048],{"class":205,"line":1742},[203,13034,6619],{"class":213},[203,13036,1258],{"class":209},[203,13038,13039],{"class":318}," \"ref = \"",[203,13041,1534],{"class":209},[203,13043,13024],{"class":213},[203,13045,1258],{"class":209},[203,13047,11559],{"class":213},[203,13049,13050],{"class":272},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[203,13052,13053,13055,13057,13059,13061,13063,13065,13067],{"class":205,"line":1763},[203,13054,6619],{"class":213},[203,13056,1258],{"class":209},[203,13058,13039],{"class":318},[203,13060,1534],{"class":209},[203,13062,13024],{"class":213},[203,13064,1258],{"class":209},[203,13066,11559],{"class":213},[203,13068,13069],{"class":272},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[203,13071,13072],{"class":205,"line":1768},[203,13073,2489],{"emptyLinePlaceholder":131},[203,13075,13076],{"class":205,"line":1782},[203,13077,13078],{"class":272},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[203,13080,13081,13083,13086,13088,13090],{"class":205,"line":1787},[203,13082,13021],{"class":209},[203,13084,13085],{"class":213}," ref2 ",[203,13087,259],{"class":209},[203,13089,5747],{"class":2052},[203,13091,5726],{"class":213},[203,13093,13094,13096,13098,13101,13103,13105,13107,13109],{"class":205,"line":1816},[203,13095,6619],{"class":213},[203,13097,1258],{"class":209},[203,13099,13100],{"class":318}," \"ref2 = \"",[203,13102,1534],{"class":209},[203,13104,13085],{"class":213},[203,13106,1258],{"class":209},[203,13108,11559],{"class":213},[203,13110,13111],{"class":272}," \u002F\u002F20\n",[203,13113,13114,13116,13118,13120,13122,13124,13126,13128],{"class":205,"line":1821},[203,13115,6619],{"class":213},[203,13117,1258],{"class":209},[203,13119,13100],{"class":318},[203,13121,1534],{"class":209},[203,13123,13085],{"class":213},[203,13125,1258],{"class":209},[203,13127,11559],{"class":213},[203,13129,13111],{"class":272},[203,13131,13132],{"class":205,"line":1838},[203,13133,2489],{"emptyLinePlaceholder":131},[203,13135,13136,13138,13141,13143,13145,13147],{"class":205,"line":1843},[203,13137,5792],{"class":2052},[203,13139,13140],{"class":213},"() ",[203,13142,259],{"class":209},[203,13144,3088],{"class":262},[203,13146,269],{"class":213},[203,13148,13149],{"class":272},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[203,13151,13152],{"class":205,"line":1848},[203,13153,2489],{"emptyLinePlaceholder":131},[203,13155,13156,13158,13160,13162,13164,13166,13168,13170],{"class":205,"line":1853},[203,13157,6619],{"class":213},[203,13159,1258],{"class":209},[203,13161,13100],{"class":318},[203,13163,1534],{"class":209},[203,13165,13085],{"class":213},[203,13167,1258],{"class":209},[203,13169,11559],{"class":213},[203,13171,13172],{"class":272}," \u002F\u002F1000\n",[203,13174,13175,13177,13179,13181,13183,13185,13187,13189],{"class":205,"line":1867},[203,13176,6619],{"class":213},[203,13178,1258],{"class":209},[203,13180,13100],{"class":318},[203,13182,1534],{"class":209},[203,13184,13085],{"class":213},[203,13186,1258],{"class":209},[203,13188,11559],{"class":213},[203,13190,13172],{"class":272},[203,13192,13193],{"class":205,"line":1872},[203,13194,2489],{"emptyLinePlaceholder":131},[203,13196,13197,13199,13201,13203],{"class":205,"line":2666},[203,13198,2392],{"class":2052},[203,13200,214],{"class":213},[203,13202,2397],{"class":318},[203,13204,2808],{"class":213},[203,13206,13207],{"class":205,"line":2680},[203,13208,2489],{"emptyLinePlaceholder":131},[203,13210,13211,13213,13215],{"class":205,"line":2688},[203,13212,4179],{"class":209},[203,13214,4182],{"class":262},[203,13216,1380],{"class":213},[203,13218,13219],{"class":205,"line":2693},[203,13220,1654],{"class":213},[14,13222,13224],{"id":13223},"_65引用的本质","6.5引用的本质",[19,13226,13227,13228],{},"本质：",[363,13229,13230],{},"引用的本质在c++内部实现是一个指针常量.",[194,13232,13234],{"className":196,"code":13233,"language":198,"meta":27,"style":27},"\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",[200,13235,13236,13241,13257,13271,13275,13284,13296,13301,13306,13317,13330,13334,13350,13367,13371,13379,13387],{"__ignoreMap":27},[203,13237,13238],{"class":205,"line":206},[203,13239,13240],{"class":272},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[203,13242,13243,13245,13247,13249,13251,13254],{"class":205,"line":124},[203,13244,5454],{"class":209},[203,13246,11475],{"class":2052},[203,13248,214],{"class":213},[203,13250,12656],{"class":209},[203,13252,13253],{"class":5306}," ref",[203,13255,13256],{"class":213},"){\n",[203,13258,13259,13262,13264,13266,13268],{"class":205,"line":1269},[203,13260,13261],{"class":213},"    ref ",[203,13263,259],{"class":209},[203,13265,5844],{"class":262},[203,13267,269],{"class":213},[203,13269,13270],{"class":272}," \u002F\u002F ref是引用，转换为*ref = 100\n",[203,13272,13273],{"class":205,"line":1284},[203,13274,1654],{"class":213},[203,13276,13277,13279,13281],{"class":205,"line":1290},[203,13278,217],{"class":209},[203,13280,2062],{"class":2052},[203,13282,13283],{"class":213},"(){\n",[203,13285,13286,13288,13290,13292,13294],{"class":205,"line":1304},[203,13287,2074],{"class":209},[203,13289,10959],{"class":213},[203,13291,259],{"class":209},[203,13293,2127],{"class":262},[203,13295,1380],{"class":213},[203,13297,13298],{"class":205,"line":1310},[203,13299,13300],{"class":213},"    \n",[203,13302,13303],{"class":205,"line":1401},[203,13304,13305],{"class":272},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[203,13307,13308,13310,13312,13314],{"class":205,"line":1407},[203,13309,13021],{"class":209},[203,13311,13024],{"class":213},[203,13313,259],{"class":209},[203,13315,13316],{"class":213}," a; \n",[203,13318,13319,13321,13323,13325,13327],{"class":205,"line":1419},[203,13320,13261],{"class":213},[203,13322,259],{"class":209},[203,13324,9040],{"class":262},[203,13326,269],{"class":213},[203,13328,13329],{"class":272}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[203,13331,13332],{"class":205,"line":1701},[203,13333,13300],{"class":213},[203,13335,13336,13338,13340,13342,13344,13346,13348],{"class":205,"line":1706},[203,13337,6619],{"class":213},[203,13339,1258],{"class":209},[203,13341,12760],{"class":318},[203,13343,1534],{"class":209},[203,13345,10959],{"class":213},[203,13347,1258],{"class":209},[203,13349,8930],{"class":213},[203,13351,13352,13354,13356,13359,13361,13363,13365],{"class":205,"line":1712},[203,13353,6619],{"class":213},[203,13355,1258],{"class":209},[203,13357,13358],{"class":318}," \"ref:\"",[203,13360,1534],{"class":209},[203,13362,13024],{"class":213},[203,13364,1258],{"class":209},[203,13366,8930],{"class":213},[203,13368,13369],{"class":205,"line":1717},[203,13370,13300],{"class":213},[203,13372,13373,13376],{"class":205,"line":1731},[203,13374,13375],{"class":2052},"    func",[203,13377,13378],{"class":213},"(a);\n",[203,13380,13381,13383,13385],{"class":205,"line":1736},[203,13382,4179],{"class":209},[203,13384,4182],{"class":262},[203,13386,1380],{"class":213},[203,13388,13389],{"class":205,"line":1742},[203,13390,1654],{"class":213},[19,13392,11422],{},[157,13394,13395,13398],{},[160,13396,13397],{},"引用的本质，就是一个指针常量",[160,13399,13400],{},"引用一旦初始化，就不可以发生改变",[14,13402,13404],{"id":13403},"_66常量引用","6.6常量引用",[19,13406,13407],{},"作用：常量引用主要用来修饰形参",[19,13409,13410,13411,13414],{},"在函数形参列表中，可以加",[363,13412,13413],{},"const修饰形参","，防止形参改变实参",[194,13416,13418],{"className":196,"code":13417,"language":198,"meta":27,"style":27},"\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",[200,13419,13420,13425,13430,13449,13454,13467,13471,13475,13483,13487,13492,13497,13511,13515,13523,13535,13539,13544,13556,13563,13567,13577,13581,13589],{"__ignoreMap":27},[203,13421,13422],{"class":205,"line":206},[203,13423,13424],{"class":272},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[203,13426,13427],{"class":205,"line":124},[203,13428,13429],{"class":272},"\u002F\u002F加上const就不能修改实参的\n",[203,13431,13432,13434,13437,13439,13441,13444,13447],{"class":205,"line":1269},[203,13433,5454],{"class":209},[203,13435,13436],{"class":2052}," showValue",[203,13438,214],{"class":213},[203,13440,6882],{"class":209},[203,13442,13443],{"class":209}," int&",[203,13445,13446],{"class":5306}," v",[203,13448,12532],{"class":213},[203,13450,13451],{"class":205,"line":1284},[203,13452,13453],{"class":272},"    \u002F\u002Fv += 100;\n",[203,13455,13456,13458,13460,13463,13465],{"class":205,"line":1290},[203,13457,6619],{"class":213},[203,13459,1258],{"class":209},[203,13461,13462],{"class":213}," v ",[203,13464,1258],{"class":209},[203,13466,8930],{"class":213},[203,13468,13469],{"class":205,"line":1304},[203,13470,1654],{"class":213},[203,13472,13473],{"class":205,"line":1310},[203,13474,2489],{"emptyLinePlaceholder":131},[203,13476,13477,13479,13481],{"class":205,"line":1401},[203,13478,217],{"class":209},[203,13480,2062],{"class":2052},[203,13482,10943],{"class":213},[203,13484,13485],{"class":205,"line":1407},[203,13486,2489],{"emptyLinePlaceholder":131},[203,13488,13489],{"class":205,"line":1419},[203,13490,13491],{"class":272},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[203,13493,13494],{"class":205,"line":1701},[203,13495,13496],{"class":272},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[203,13498,13499,13501,13503,13505,13507,13509],{"class":205,"line":1706},[203,13500,11311],{"class":209},[203,13502,13443],{"class":209},[203,13504,13024],{"class":213},[203,13506,259],{"class":209},[203,13508,2127],{"class":262},[203,13510,1380],{"class":213},[203,13512,13513],{"class":205,"line":1712},[203,13514,2489],{"emptyLinePlaceholder":131},[203,13516,13517,13520],{"class":205,"line":1717},[203,13518,13519],{"class":272},"    \u002F\u002Fref = 100;",[203,13521,13522],{"class":272},"  \u002F\u002F加入const后不可以修改变量\n",[203,13524,13525,13527,13529,13531,13533],{"class":205,"line":1731},[203,13526,6619],{"class":213},[203,13528,1258],{"class":209},[203,13530,13024],{"class":213},[203,13532,1258],{"class":209},[203,13534,8930],{"class":213},[203,13536,13537],{"class":205,"line":1736},[203,13538,2489],{"emptyLinePlaceholder":131},[203,13540,13541],{"class":205,"line":1742},[203,13542,13543],{"class":272},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[203,13545,13546,13548,13550,13552,13554],{"class":205,"line":1763},[203,13547,2074],{"class":209},[203,13549,10959],{"class":213},[203,13551,259],{"class":209},[203,13553,2127],{"class":262},[203,13555,1380],{"class":213},[203,13557,13558,13561],{"class":205,"line":1768},[203,13559,13560],{"class":2052},"    showValue",[203,13562,13378],{"class":213},[203,13564,13565],{"class":205,"line":1782},[203,13566,2489],{"emptyLinePlaceholder":131},[203,13568,13569,13571,13573,13575],{"class":205,"line":1787},[203,13570,2392],{"class":2052},[203,13572,214],{"class":213},[203,13574,2397],{"class":318},[203,13576,2808],{"class":213},[203,13578,13579],{"class":205,"line":1816},[203,13580,2489],{"emptyLinePlaceholder":131},[203,13582,13583,13585,13587],{"class":205,"line":1821},[203,13584,4179],{"class":209},[203,13586,4182],{"class":262},[203,13588,1380],{"class":213},[203,13590,13591],{"class":205,"line":1838},[203,13592,1654],{"class":213},[5216,13594,13595],{},"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":27,"searchDepth":124,"depth":124,"links":13597},[13598,13599,13600,13601,13602,13603],{"id":12130,"depth":124,"text":12131},{"id":12309,"depth":124,"text":12310},{"id":12492,"depth":124,"text":12493},{"id":12896,"depth":124,"text":12897},{"id":13223,"depth":124,"text":13224},{"id":13403,"depth":124,"text":13404},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12122,"description":27},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13610,"title":13611,"body":13612,"description":27,"extension":129,"meta":14693,"navigation":131,"path":14694,"seo":14695,"stem":14696,"__hash__":14697},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13613,"toc":14685},[13614,13617,13621,13624,13629,13861,13863,13874,13878,13881,13889,13993,13996,14000,14003,14007,14010,14015,14037,14043,14370,14373,14377,14385,14682],[10,13615,13611],{"id":13616},"_7函数高级部分",[14,13618,13620],{"id":13619},"_71函数默认参数","7.1函数默认参数",[19,13622,13623],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,13625,5271,13626],{},[200,13627,13628],{}," 返回值类型  函数名 （参数= 默认值）{}",[194,13630,13632],{"className":196,"code":13631,"language":198,"meta":27,"style":27},"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",[200,13633,13634,13669,13684,13688,13692,13697,13702,13731,13751,13761,13765,13769,13777,13781,13809,13831,13835,13845,13849,13857],{"__ignoreMap":27},[203,13635,13636,13638,13640,13642,13644,13646,13648,13650,13652,13655,13657,13659,13661,13663,13665,13667],{"class":205,"line":206},[203,13637,217],{"class":209},[203,13639,11475],{"class":2052},[203,13641,214],{"class":213},[203,13643,217],{"class":209},[203,13645,1488],{"class":5306},[203,13647,12525],{"class":213},[203,13649,217],{"class":209},[203,13651,2922],{"class":5306},[203,13653,13654],{"class":209}," =",[203,13656,2127],{"class":262},[203,13658,12525],{"class":213},[203,13660,217],{"class":209},[203,13662,2938],{"class":5306},[203,13664,13654],{"class":209},[203,13666,2127],{"class":262},[203,13668,12532],{"class":213},[203,13670,13671,13673,13675,13677,13679,13681],{"class":205,"line":124},[203,13672,4179],{"class":209},[203,13674,10959],{"class":213},[203,13676,695],{"class":209},[203,13678,10972],{"class":213},[203,13680,695],{"class":209},[203,13682,13683],{"class":213}," c;\n",[203,13685,13686],{"class":205,"line":1269},[203,13687,1654],{"class":213},[203,13689,13690],{"class":205,"line":1284},[203,13691,2489],{"emptyLinePlaceholder":131},[203,13693,13694],{"class":205,"line":1290},[203,13695,13696],{"class":272},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[203,13698,13699],{"class":205,"line":1304},[203,13700,13701],{"class":272},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[203,13703,13704,13706,13709,13711,13713,13715,13717,13719,13721,13723,13725,13727,13729],{"class":205,"line":1310},[203,13705,217],{"class":209},[203,13707,13708],{"class":2052}," func2",[203,13710,214],{"class":213},[203,13712,217],{"class":209},[203,13714,1488],{"class":5306},[203,13716,13654],{"class":209},[203,13718,2127],{"class":262},[203,13720,12525],{"class":213},[203,13722,217],{"class":209},[203,13724,2922],{"class":5306},[203,13726,13654],{"class":209},[203,13728,2127],{"class":262},[203,13730,2808],{"class":213},[203,13732,13733,13735,13737,13739,13741,13743,13745,13747,13749],{"class":205,"line":1401},[203,13734,217],{"class":209},[203,13736,13708],{"class":2052},[203,13738,214],{"class":213},[203,13740,217],{"class":209},[203,13742,1488],{"class":5306},[203,13744,12525],{"class":213},[203,13746,217],{"class":209},[203,13748,2922],{"class":5306},[203,13750,12532],{"class":213},[203,13752,13753,13755,13757,13759],{"class":205,"line":1407},[203,13754,4179],{"class":209},[203,13756,10959],{"class":213},[203,13758,695],{"class":209},[203,13760,12553],{"class":213},[203,13762,13763],{"class":205,"line":1419},[203,13764,1654],{"class":213},[203,13766,13767],{"class":205,"line":1701},[203,13768,2489],{"emptyLinePlaceholder":131},[203,13770,13771,13773,13775],{"class":205,"line":1706},[203,13772,217],{"class":209},[203,13774,2062],{"class":2052},[203,13776,10943],{"class":213},[203,13778,13779],{"class":205,"line":1712},[203,13780,2489],{"emptyLinePlaceholder":131},[203,13782,13783,13785,13787,13790,13792,13794,13796,13798,13800,13802,13805,13807],{"class":205,"line":1717},[203,13784,6619],{"class":213},[203,13786,1258],{"class":209},[203,13788,13789],{"class":318}," \"ret = \"",[203,13791,1534],{"class":209},[203,13793,11475],{"class":2052},[203,13795,214],{"class":213},[203,13797,914],{"class":262},[203,13799,12525],{"class":213},[203,13801,914],{"class":262},[203,13803,13804],{"class":213},") ",[203,13806,1258],{"class":209},[203,13808,8930],{"class":213},[203,13810,13811,13813,13815,13817,13819,13821,13823,13825,13827,13829],{"class":205,"line":1731},[203,13812,6619],{"class":213},[203,13814,1258],{"class":209},[203,13816,13789],{"class":318},[203,13818,1534],{"class":209},[203,13820,11475],{"class":2052},[203,13822,214],{"class":213},[203,13824,525],{"class":262},[203,13826,13804],{"class":213},[203,13828,1258],{"class":209},[203,13830,8930],{"class":213},[203,13832,13833],{"class":205,"line":1736},[203,13834,2489],{"emptyLinePlaceholder":131},[203,13836,13837,13839,13841,13843],{"class":205,"line":1742},[203,13838,2392],{"class":2052},[203,13840,214],{"class":213},[203,13842,2397],{"class":318},[203,13844,2808],{"class":213},[203,13846,13847],{"class":205,"line":1763},[203,13848,2489],{"emptyLinePlaceholder":131},[203,13850,13851,13853,13855],{"class":205,"line":1768},[203,13852,4179],{"class":209},[203,13854,4182],{"class":262},[203,13856,1380],{"class":213},[203,13858,13859],{"class":205,"line":1782},[203,13860,1654],{"class":213},[19,13862,11422],{},[157,13864,13865,13868,13871],{},[160,13866,13867],{},"我传就用我；没传就用你",[160,13869,13870],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[160,13872,13873],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,13875,13877],{"id":13876},"_72函数的占位参数","7.2函数的占位参数",[19,13879,13880],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,13882,13883,13885,13886],{},[363,13884,5271],{}," ",[200,13887,13888],{},"返回值类型 函数名 (数据类型){}",[194,13890,13892],{"className":196,"code":13891,"language":198,"meta":27,"style":27},"\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",[200,13893,13894,13899,13917,13930,13934,13942,13946,13963,13967,13977,13981,13989],{"__ignoreMap":27},[203,13895,13896],{"class":205,"line":206},[203,13897,13898],{"class":272},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[203,13900,13901,13903,13905,13907,13909,13911,13913,13915],{"class":205,"line":124},[203,13902,5454],{"class":209},[203,13904,11475],{"class":2052},[203,13906,214],{"class":213},[203,13908,217],{"class":209},[203,13910,1488],{"class":5306},[203,13912,12525],{"class":213},[203,13914,217],{"class":209},[203,13916,12532],{"class":213},[203,13918,13919,13921,13923,13926,13928],{"class":205,"line":1269},[203,13920,6619],{"class":213},[203,13922,1258],{"class":209},[203,13924,13925],{"class":318}," \"this is func\"",[203,13927,1534],{"class":209},[203,13929,8930],{"class":213},[203,13931,13932],{"class":205,"line":1284},[203,13933,1654],{"class":213},[203,13935,13936,13938,13940],{"class":205,"line":1290},[203,13937,217],{"class":209},[203,13939,2062],{"class":2052},[203,13941,10943],{"class":213},[203,13943,13944],{"class":205,"line":1304},[203,13945,2489],{"emptyLinePlaceholder":131},[203,13947,13948,13950,13952,13954,13956,13958,13960],{"class":205,"line":1310},[203,13949,13375],{"class":2052},[203,13951,214],{"class":213},[203,13953,660],{"class":262},[203,13955,592],{"class":213},[203,13957,660],{"class":262},[203,13959,6056],{"class":213},[203,13961,13962],{"class":272}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[203,13964,13965],{"class":205,"line":1401},[203,13966,2489],{"emptyLinePlaceholder":131},[203,13968,13969,13971,13973,13975],{"class":205,"line":1407},[203,13970,2392],{"class":2052},[203,13972,214],{"class":213},[203,13974,2397],{"class":318},[203,13976,2808],{"class":213},[203,13978,13979],{"class":205,"line":1419},[203,13980,2489],{"emptyLinePlaceholder":131},[203,13982,13983,13985,13987],{"class":205,"line":1701},[203,13984,4179],{"class":209},[203,13986,4182],{"class":262},[203,13988,1380],{"class":213},[203,13990,13991],{"class":205,"line":1706},[203,13992,1654],{"class":213},[19,13994,13995],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,13997,13999],{"id":13998},"_73函数重载","7.3函数重载",[19,14001,14002],{},"意思是函数名是可以相同的",[174,14004,14006],{"id":14005},"_731基本语法","7.3.1基本语法",[19,14008,14009],{},"作用：函数名可以相同，提高复用性",[19,14011,14012],{},[363,14013,14014],{},"函数重载满足条件：",[1221,14016,14017,14020,14023],{},[160,14018,14019],{},"同一个作用域下",[160,14021,14022],{},"函数名称相同",[160,14024,14025,14026,14029,14030,14033,14034],{},"函数参数",[363,14027,14028],{},"类型不同","  或者 ",[363,14031,14032],{},"个数不同"," 或者 ",[363,14035,14036],{},"顺序不同",[19,14038,14039,14042],{},[363,14040,14041],{},"注意:","  函数的返回值不可以作为函数重载的条件",[194,14044,14046],{"className":10031,"code":14045,"language":10033,"meta":27,"style":27},"\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",[200,14047,14048,14053,14061,14065,14078,14082,14096,14100,14113,14117,14132,14136,14149,14153,14174,14178,14191,14195,14215,14219,14232,14236,14240,14245,14250,14255,14260,14265,14269,14273,14281,14285,14291,14301,14311,14325,14340,14344,14354,14358,14366],{"__ignoreMap":27},[203,14049,14050],{"class":205,"line":206},[203,14051,14052],{"class":272},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[203,14054,14055,14057,14059],{"class":205,"line":124},[203,14056,5454],{"class":209},[203,14058,11475],{"class":2052},[203,14060,2065],{"class":213},[203,14062,14063],{"class":205,"line":1269},[203,14064,1635],{"class":213},[203,14066,14067,14069,14071,14074,14076],{"class":205,"line":1284},[203,14068,6619],{"class":213},[203,14070,1258],{"class":209},[203,14072,14073],{"class":318}," \"func 的调用！\"",[203,14075,1534],{"class":209},[203,14077,8930],{"class":213},[203,14079,14080],{"class":205,"line":1290},[203,14081,1654],{"class":213},[203,14083,14084,14086,14088,14090,14092,14094],{"class":205,"line":1304},[203,14085,5454],{"class":209},[203,14087,11475],{"class":2052},[203,14089,214],{"class":213},[203,14091,217],{"class":209},[203,14093,1488],{"class":5306},[203,14095,220],{"class":213},[203,14097,14098],{"class":205,"line":1310},[203,14099,1635],{"class":213},[203,14101,14102,14104,14106,14109,14111],{"class":205,"line":1401},[203,14103,6619],{"class":213},[203,14105,1258],{"class":209},[203,14107,14108],{"class":318}," \"func (int a) 的调用！\"",[203,14110,1534],{"class":209},[203,14112,8930],{"class":213},[203,14114,14115],{"class":205,"line":1407},[203,14116,1654],{"class":213},[203,14118,14119,14121,14123,14125,14128,14130],{"class":205,"line":1419},[203,14120,5454],{"class":209},[203,14122,11475],{"class":2052},[203,14124,214],{"class":213},[203,14126,14127],{"class":209},"double",[203,14129,1488],{"class":5306},[203,14131,220],{"class":213},[203,14133,14134],{"class":205,"line":1701},[203,14135,1635],{"class":213},[203,14137,14138,14140,14142,14145,14147],{"class":205,"line":1706},[203,14139,6619],{"class":213},[203,14141,1258],{"class":209},[203,14143,14144],{"class":318}," \"func (double a)的调用！\"",[203,14146,1534],{"class":209},[203,14148,8930],{"class":213},[203,14150,14151],{"class":205,"line":1712},[203,14152,1654],{"class":213},[203,14154,14155,14157,14159,14161,14163,14165,14168,14170,14172],{"class":205,"line":1717},[203,14156,5454],{"class":209},[203,14158,11475],{"class":2052},[203,14160,214],{"class":213},[203,14162,217],{"class":209},[203,14164,1488],{"class":5306},[203,14166,14167],{"class":213}," ,",[203,14169,14127],{"class":209},[203,14171,2922],{"class":5306},[203,14173,220],{"class":213},[203,14175,14176],{"class":205,"line":1731},[203,14177,1635],{"class":213},[203,14179,14180,14182,14184,14187,14189],{"class":205,"line":1736},[203,14181,6619],{"class":213},[203,14183,1258],{"class":209},[203,14185,14186],{"class":318}," \"func (int a ,double b) 的调用！\"",[203,14188,1534],{"class":209},[203,14190,8930],{"class":213},[203,14192,14193],{"class":205,"line":1742},[203,14194,1654],{"class":213},[203,14196,14197,14199,14201,14203,14205,14207,14209,14211,14213],{"class":205,"line":1763},[203,14198,5454],{"class":209},[203,14200,11475],{"class":2052},[203,14202,214],{"class":213},[203,14204,14127],{"class":209},[203,14206,1488],{"class":5306},[203,14208,14167],{"class":213},[203,14210,217],{"class":209},[203,14212,2922],{"class":5306},[203,14214,220],{"class":213},[203,14216,14217],{"class":205,"line":1768},[203,14218,1635],{"class":213},[203,14220,14221,14223,14225,14228,14230],{"class":205,"line":1782},[203,14222,6619],{"class":213},[203,14224,1258],{"class":209},[203,14226,14227],{"class":318}," \"func (double a ,int b)的调用！\"",[203,14229,1534],{"class":209},[203,14231,8930],{"class":213},[203,14233,14234],{"class":205,"line":1787},[203,14235,1654],{"class":213},[203,14237,14238],{"class":205,"line":1816},[203,14239,2489],{"emptyLinePlaceholder":131},[203,14241,14242],{"class":205,"line":1821},[203,14243,14244],{"class":272},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[203,14246,14247],{"class":205,"line":1838},[203,14248,14249],{"class":272},"\u002F\u002Fint func(double a, int b)\n",[203,14251,14252],{"class":205,"line":1843},[203,14253,14254],{"class":272},"\u002F\u002F{\n",[203,14256,14257],{"class":205,"line":1848},[203,14258,14259],{"class":272},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[203,14261,14262],{"class":205,"line":1853},[203,14263,14264],{"class":272},"\u002F\u002F}\n",[203,14266,14267],{"class":205,"line":1867},[203,14268,2489],{"emptyLinePlaceholder":131},[203,14270,14271],{"class":205,"line":1872},[203,14272,2489],{"emptyLinePlaceholder":131},[203,14274,14275,14277,14279],{"class":205,"line":2666},[203,14276,217],{"class":209},[203,14278,2062],{"class":2052},[203,14280,10943],{"class":213},[203,14282,14283],{"class":205,"line":2680},[203,14284,2489],{"emptyLinePlaceholder":131},[203,14286,14287,14289],{"class":205,"line":2688},[203,14288,13375],{"class":2052},[203,14290,5726],{"class":213},[203,14292,14293,14295,14297,14299],{"class":205,"line":2693},[203,14294,13375],{"class":2052},[203,14296,214],{"class":213},[203,14298,660],{"class":262},[203,14300,2808],{"class":213},[203,14302,14303,14305,14307,14309],{"class":205,"line":2699},[203,14304,13375],{"class":2052},[203,14306,214],{"class":213},[203,14308,263],{"class":262},[203,14310,2808],{"class":213},[203,14312,14313,14315,14317,14319,14321,14323],{"class":205,"line":2705},[203,14314,13375],{"class":2052},[203,14316,214],{"class":213},[203,14318,660],{"class":262},[203,14320,592],{"class":213},[203,14322,263],{"class":262},[203,14324,2808],{"class":213},[203,14326,14327,14329,14331,14333,14336,14338],{"class":205,"line":2710},[203,14328,13375],{"class":2052},[203,14330,214],{"class":213},[203,14332,263],{"class":262},[203,14334,14335],{"class":213}," , ",[203,14337,660],{"class":262},[203,14339,2808],{"class":213},[203,14341,14342],{"class":205,"line":8038},[203,14343,13300],{"class":213},[203,14345,14346,14348,14350,14352],{"class":205,"line":8062},[203,14347,2392],{"class":2052},[203,14349,214],{"class":213},[203,14351,2397],{"class":318},[203,14353,2808],{"class":213},[203,14355,14356],{"class":205,"line":8067},[203,14357,2489],{"emptyLinePlaceholder":131},[203,14359,14360,14362,14364],{"class":205,"line":8073},[203,14361,4179],{"class":209},[203,14363,4182],{"class":262},[203,14365,1380],{"class":213},[203,14367,14368],{"class":205,"line":8100},[203,14369,1654],{"class":213},[19,14371,14372],{},"重点：函数返回值不可以作为函数重载条件！",[174,14374,14376],{"id":14375},"_732注意事项","7.3.2注意事项",[1221,14378,14379,14382],{},[160,14380,14381],{},"引用作为重载条件!!!",[160,14383,14384],{},"函数重载碰到函数默认参数",[194,14386,14388],{"className":196,"code":14387,"language":198,"meta":27,"style":27},"\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",[200,14389,14390,14395,14400,14404,14420,14424,14437,14441,14445,14463,14467,14480,14484,14488,14492,14497,14501,14525,14529,14542,14546,14550,14564,14568,14581,14585,14589,14597,14601,14613,14623,14636,14640,14644,14652,14656,14666,14670,14678],{"__ignoreMap":27},[203,14391,14392],{"class":205,"line":206},[203,14393,14394],{"class":272},"\u002F\u002F函数重载注意事项\n",[203,14396,14397],{"class":205,"line":124},[203,14398,14399],{"class":272},"\u002F\u002F1、引用作为重载条件\n",[203,14401,14402],{"class":205,"line":1269},[203,14403,2489],{"emptyLinePlaceholder":131},[203,14405,14406,14408,14410,14412,14414,14416,14418],{"class":205,"line":1284},[203,14407,5454],{"class":209},[203,14409,11475],{"class":2052},[203,14411,214],{"class":213},[203,14413,217],{"class":209},[203,14415,10674],{"class":209},[203,14417,452],{"class":5306},[203,14419,220],{"class":213},[203,14421,14422],{"class":205,"line":1290},[203,14423,1635],{"class":213},[203,14425,14426,14428,14430,14433,14435],{"class":205,"line":1304},[203,14427,6619],{"class":213},[203,14429,1258],{"class":209},[203,14431,14432],{"class":318}," \"func (int &a) 调用 \"",[203,14434,1534],{"class":209},[203,14436,8930],{"class":213},[203,14438,14439],{"class":205,"line":1310},[203,14440,1654],{"class":213},[203,14442,14443],{"class":205,"line":1401},[203,14444,2489],{"emptyLinePlaceholder":131},[203,14446,14447,14449,14451,14453,14455,14457,14459,14461],{"class":205,"line":1407},[203,14448,5454],{"class":209},[203,14450,11475],{"class":2052},[203,14452,214],{"class":213},[203,14454,6882],{"class":209},[203,14456,2471],{"class":209},[203,14458,10674],{"class":209},[203,14460,452],{"class":5306},[203,14462,220],{"class":213},[203,14464,14465],{"class":205,"line":1419},[203,14466,1635],{"class":213},[203,14468,14469,14471,14473,14476,14478],{"class":205,"line":1701},[203,14470,6619],{"class":213},[203,14472,1258],{"class":209},[203,14474,14475],{"class":318}," \"func (const int &a) 调用 \"",[203,14477,1534],{"class":209},[203,14479,8930],{"class":213},[203,14481,14482],{"class":205,"line":1706},[203,14483,1654],{"class":213},[203,14485,14486],{"class":205,"line":1712},[203,14487,2489],{"emptyLinePlaceholder":131},[203,14489,14490],{"class":205,"line":1717},[203,14491,2489],{"emptyLinePlaceholder":131},[203,14493,14494],{"class":205,"line":1731},[203,14495,14496],{"class":272},"\u002F\u002F2、函数重载碰到函数默认参数\n",[203,14498,14499],{"class":205,"line":1736},[203,14500,2489],{"emptyLinePlaceholder":131},[203,14502,14503,14505,14507,14509,14511,14513,14515,14517,14519,14521,14523],{"class":205,"line":1742},[203,14504,5454],{"class":209},[203,14506,13708],{"class":2052},[203,14508,214],{"class":213},[203,14510,217],{"class":209},[203,14512,1488],{"class":5306},[203,14514,12525],{"class":213},[203,14516,217],{"class":209},[203,14518,2922],{"class":5306},[203,14520,13654],{"class":209},[203,14522,2127],{"class":262},[203,14524,220],{"class":213},[203,14526,14527],{"class":205,"line":1763},[203,14528,1635],{"class":213},[203,14530,14531,14533,14535,14538,14540],{"class":205,"line":1768},[203,14532,6619],{"class":213},[203,14534,1258],{"class":209},[203,14536,14537],{"class":318}," \"func2(int a, int b = 10) 调用\"",[203,14539,1534],{"class":209},[203,14541,8930],{"class":213},[203,14543,14544],{"class":205,"line":1782},[203,14545,1654],{"class":213},[203,14547,14548],{"class":205,"line":1787},[203,14549,2489],{"emptyLinePlaceholder":131},[203,14551,14552,14554,14556,14558,14560,14562],{"class":205,"line":1816},[203,14553,5454],{"class":209},[203,14555,13708],{"class":2052},[203,14557,214],{"class":213},[203,14559,217],{"class":209},[203,14561,1488],{"class":5306},[203,14563,220],{"class":213},[203,14565,14566],{"class":205,"line":1821},[203,14567,1635],{"class":213},[203,14569,14570,14572,14574,14577,14579],{"class":205,"line":1838},[203,14571,6619],{"class":213},[203,14573,1258],{"class":209},[203,14575,14576],{"class":318}," \"func2(int a) 调用\"",[203,14578,1534],{"class":209},[203,14580,8930],{"class":213},[203,14582,14583],{"class":205,"line":1843},[203,14584,1654],{"class":213},[203,14586,14587],{"class":205,"line":1848},[203,14588,2489],{"emptyLinePlaceholder":131},[203,14590,14591,14593,14595],{"class":205,"line":1853},[203,14592,217],{"class":209},[203,14594,2062],{"class":2052},[203,14596,10943],{"class":213},[203,14598,14599],{"class":205,"line":1867},[203,14600,13300],{"class":213},[203,14602,14603,14605,14607,14609,14611],{"class":205,"line":1872},[203,14604,2074],{"class":209},[203,14606,10959],{"class":213},[203,14608,259],{"class":209},[203,14610,2127],{"class":262},[203,14612,1380],{"class":213},[203,14614,14615,14617,14620],{"class":205,"line":2666},[203,14616,13375],{"class":2052},[203,14618,14619],{"class":213},"(a);",[203,14621,14622],{"class":272}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[203,14624,14625,14627,14629,14631,14633],{"class":205,"line":2680},[203,14626,13375],{"class":2052},[203,14628,214],{"class":213},[203,14630,660],{"class":262},[203,14632,6056],{"class":213},[203,14634,14635],{"class":272},"\u002F\u002F调用有const   10是个常量\n",[203,14637,14638],{"class":205,"line":2688},[203,14639,2489],{"emptyLinePlaceholder":131},[203,14641,14642],{"class":205,"line":2693},[203,14643,2489],{"emptyLinePlaceholder":131},[203,14645,14646,14649],{"class":205,"line":2699},[203,14647,14648],{"class":272},"    \u002F\u002Ffunc2(10);",[203,14650,14651],{"class":272}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[203,14653,14654],{"class":205,"line":2705},[203,14655,2489],{"emptyLinePlaceholder":131},[203,14657,14658,14660,14662,14664],{"class":205,"line":2710},[203,14659,2392],{"class":2052},[203,14661,214],{"class":213},[203,14663,2397],{"class":318},[203,14665,2808],{"class":213},[203,14667,14668],{"class":205,"line":8038},[203,14669,2489],{"emptyLinePlaceholder":131},[203,14671,14672,14674,14676],{"class":205,"line":8062},[203,14673,4179],{"class":209},[203,14675,4182],{"class":262},[203,14677,1380],{"class":213},[203,14679,14680],{"class":205,"line":8067},[203,14681,1654],{"class":213},[5216,14683,14684],{},"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":27,"searchDepth":124,"depth":124,"links":14686},[14687,14688,14689],{"id":13619,"depth":124,"text":13620},{"id":13876,"depth":124,"text":13877},{"id":13998,"depth":124,"text":13999,"children":14690},[14691,14692],{"id":14005,"depth":1269,"text":14006},{"id":14375,"depth":1269,"text":14376},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13611,"description":27},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14699,"title":14700,"body":14701,"description":23455,"extension":129,"meta":23456,"navigation":131,"path":23457,"seo":23458,"stem":23459,"__hash__":23460},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14702,"toc":23436},[14703,14706,14712,14719,14724,14727,14730,14733,14737,14741,14744,14747,14755,14760,14763,14770,14775,14934,14937,15190,15193,15196,15199,15204,15207,15210,15221,15226,15462,15466,15476,15479,15487,15634,15638,15641,15644,15648,16093,16097,16105,16113,17025,17032,17037,17665,17668,17671,17674,17793,17796,17883,17886,18012,18015,18109,18112,18465,18469,18477,18481,18488,18491,18494,18505,18511,18516,18528,18536,18556,18564,18581,18767,18770,18774,18777,18780,18783,18786,18789,18792,18795,19255,19261,19265,19268,19279,19866,19869,20358,20362,20365,20368,20371,20374,20377,20385,20781,20785,20788,20791,21238,21241,21244,21249,21252,21257,21260,21264,21267,21269,21275,21278,21584,21594,21635,21639,21642,21644,21677,21680,21987,21989,22004,22007,22030,22039,22045,22048,22052,22055,22058,22063,22074,22079,22087,22092,22222,22225,22228,22403,22408,22620,22624,22627,22741,22746,22985,22989,22993,22996,22999,23004,23109,23112,23115,23118,23122,23233,23236,23239,23244,23296,23299,23302,23307,23353,23356,23361,23429,23431,23434],[10,14704,14700],{"id":14705},"_8类和对象",[19,14707,14708,14709],{},"C++面向对象的三大特性为",[363,14710,14711],{},"封装、继承、多态",[19,14713,14714,14715,14718],{},"C++认为",[363,14716,14717],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,14720,14721],{},[363,14722,14723],{},"例如：",[19,14725,14726],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,14728,14729],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,14731,14732],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,14734,14736],{"id":14735},"_81封装","8.1封装",[174,14738,14740],{"id":14739},"_811封装的意义","8.1.1封装的意义",[19,14742,14743],{},"封装是C++面向对象三大特性之一",[19,14745,14746],{},"封装的意义：",[1221,14748,14749,14752],{},[160,14750,14751],{},"将属性和行为作为一个整体，表现生活中的事物",[160,14753,14754],{},"将属性和行为加以权限控制",[19,14756,14757],{},[363,14758,14759],{},"封装意义一：",[19,14761,14762],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,14764,14765,13885,14767],{},[363,14766,5271],{},[200,14768,14769],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[157,14771,14772],{},[160,14773,14774],{},"**示例1：**设计一个圆类，求圆的周长",[194,14776,14778],{"className":196,"code":14777,"language":198,"meta":27,"style":27},"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",[200,14779,14780,14788,14792,14797,14802,14807,14812,14819,14824,14834,14838,14856,14860,14864,14872,14876,14881,14886,14891,14896,14907,14930],{"__ignoreMap":27},[203,14781,14782,14785],{"class":205,"line":206},[203,14783,14784],{"class":209},"class",[203,14786,14787],{"class":2052}," Circle\n",[203,14789,14790],{"class":205,"line":124},[203,14791,1635],{"class":213},[203,14793,14794],{"class":205,"line":1269},[203,14795,14796],{"class":272},"    \u002F\u002F访问权限\n",[203,14798,14799],{"class":205,"line":1284},[203,14800,14801],{"class":272},"    \u002F\u002F公共权限\n",[203,14803,14804],{"class":205,"line":1290},[203,14805,14806],{"class":209},"public:\n",[203,14808,14809],{"class":205,"line":1304},[203,14810,14811],{"class":272},"    \u002F\u002F属性\n",[203,14813,14814,14816],{"class":205,"line":1310},[203,14815,2074],{"class":209},[203,14817,14818],{"class":213}," m_r;\n",[203,14820,14821],{"class":205,"line":1401},[203,14822,14823],{"class":272},"    \u002F\u002F行为\n",[203,14825,14826,14829,14832],{"class":205,"line":1407},[203,14827,14828],{"class":209},"    double",[203,14830,14831],{"class":2052}," calculateZC",[203,14833,2065],{"class":213},[203,14835,14836],{"class":205,"line":1419},[203,14837,2119],{"class":213},[203,14839,14840,14843,14846,14848,14851,14853],{"class":205,"line":1701},[203,14841,14842],{"class":209},"        return",[203,14844,14845],{"class":262}," 2",[203,14847,669],{"class":209},[203,14849,14850],{"class":213},"PI",[203,14852,669],{"class":209},[203,14854,14855],{"class":213},"m_r;\n",[203,14857,14858],{"class":205,"line":1706},[203,14859,2276],{"class":213},[203,14861,14862],{"class":205,"line":1712},[203,14863,4084],{"class":213},[203,14865,14866,14868,14870],{"class":205,"line":1717},[203,14867,217],{"class":209},[203,14869,2062],{"class":2052},[203,14871,2065],{"class":213},[203,14873,14874],{"class":205,"line":1731},[203,14875,1635],{"class":213},[203,14877,14878],{"class":205,"line":1736},[203,14879,14880],{"class":272},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[203,14882,14883],{"class":205,"line":1742},[203,14884,14885],{"class":272},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[203,14887,14888],{"class":205,"line":1763},[203,14889,14890],{"class":213},"    Circle c1;\n",[203,14892,14893],{"class":205,"line":1768},[203,14894,14895],{"class":272},"    \u002F\u002F给圆对象 的属性进行赋值\n",[203,14897,14898,14901,14903,14905],{"class":205,"line":1782},[203,14899,14900],{"class":213},"    c1.m_r",[203,14902,259],{"class":209},[203,14904,660],{"class":262},[203,14906,1380],{"class":213},[203,14908,14909,14911,14913,14916,14918,14921,14924,14926,14928],{"class":205,"line":1787},[203,14910,1640],{"class":213},[203,14912,1258],{"class":209},[203,14914,14915],{"class":318},"\"圆的周长\"",[203,14917,1258],{"class":209},[203,14919,14920],{"class":213},"c1.",[203,14922,14923],{"class":2052},"calculateZC",[203,14925,2516],{"class":213},[203,14927,1258],{"class":209},[203,14929,1281],{"class":213},[203,14931,14932],{"class":205,"line":1816},[203,14933,1654],{"class":213},[19,14935,14936],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[194,14938,14940],{"className":196,"code":14939,"language":198,"meta":27,"style":27},"#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",[200,14941,14942,14948,14958,14964,14970,14974,14978,14983,14990,14995,15013,15017,15027,15031,15036,15052,15056,15066,15070,15075,15083,15087,15119,15123,15127,15135,15139,15144,15149,15163,15177,15186],{"__ignoreMap":27},[203,14943,14944,14946],{"class":205,"line":206},[203,14945,2038],{"class":209},[203,14947,2041],{"class":318},[203,14949,14950,14952,14954,14956],{"class":205,"line":124},[203,14951,2046],{"class":209},[203,14953,2049],{"class":209},[203,14955,2053],{"class":2052},[203,14957,1380],{"class":213},[203,14959,14960,14962],{"class":205,"line":1269},[203,14961,2038],{"class":209},[203,14963,7839],{"class":318},[203,14965,14966,14968],{"class":205,"line":1284},[203,14967,14784],{"class":209},[203,14969,7852],{"class":2052},[203,14971,14972],{"class":205,"line":1290},[203,14973,1635],{"class":213},[203,14975,14976],{"class":205,"line":1304},[203,14977,14806],{"class":209},[203,14979,14980],{"class":205,"line":1310},[203,14981,14982],{"class":213},"    string m_name;\n",[203,14984,14985,14987],{"class":205,"line":1401},[203,14986,2074],{"class":209},[203,14988,14989],{"class":213}," m_id;\n",[203,14991,14992],{"class":205,"line":1407},[203,14993,14994],{"class":272},"    \u002F\u002F赋值姓名\n",[203,14996,14997,15000,15003,15005,15008,15011],{"class":205,"line":1419},[203,14998,14999],{"class":209},"    void",[203,15001,15002],{"class":2052}," setName",[203,15004,214],{"class":213},[203,15006,15007],{"class":2052},"string",[203,15009,15010],{"class":5306}," name",[203,15012,220],{"class":213},[203,15014,15015],{"class":205,"line":1701},[203,15016,2119],{"class":213},[203,15018,15019,15022,15024],{"class":205,"line":1706},[203,15020,15021],{"class":213},"        m_name",[203,15023,259],{"class":209},[203,15025,15026],{"class":213},"name;\n",[203,15028,15029],{"class":205,"line":1712},[203,15030,2276],{"class":213},[203,15032,15033],{"class":205,"line":1717},[203,15034,15035],{"class":272},"    \u002F\u002F赋值学号\n",[203,15037,15038,15040,15043,15045,15047,15050],{"class":205,"line":1731},[203,15039,14999],{"class":209},[203,15041,15042],{"class":2052}," setId",[203,15044,214],{"class":213},[203,15046,217],{"class":209},[203,15048,15049],{"class":5306}," id",[203,15051,220],{"class":213},[203,15053,15054],{"class":205,"line":1736},[203,15055,2119],{"class":213},[203,15057,15058,15061,15063],{"class":205,"line":1742},[203,15059,15060],{"class":213},"        m_id",[203,15062,259],{"class":209},[203,15064,15065],{"class":213},"id;\n",[203,15067,15068],{"class":205,"line":1763},[203,15069,2276],{"class":213},[203,15071,15072],{"class":205,"line":1768},[203,15073,15074],{"class":272},"    \u002F\u002F打印学生信息\n",[203,15076,15077,15079,15081],{"class":205,"line":1782},[203,15078,14999],{"class":209},[203,15080,9705],{"class":2052},[203,15082,2065],{"class":213},[203,15084,15085],{"class":205,"line":1787},[203,15086,2119],{"class":213},[203,15088,15089,15091,15093,15096,15098,15101,15103,15105,15107,15110,15112,15115,15117],{"class":205,"line":1816},[203,15090,3540],{"class":213},[203,15092,1258],{"class":209},[203,15094,15095],{"class":318},"\"姓名：\"",[203,15097,1258],{"class":209},[203,15099,15100],{"class":213},"m_name",[203,15102,1258],{"class":209},[203,15104,4448],{"class":318},[203,15106,1258],{"class":209},[203,15108,15109],{"class":318},"\"学号：\"",[203,15111,1258],{"class":209},[203,15113,15114],{"class":213},"m_id",[203,15116,1258],{"class":209},[203,15118,1281],{"class":213},[203,15120,15121],{"class":205,"line":1821},[203,15122,2276],{"class":213},[203,15124,15125],{"class":205,"line":1838},[203,15126,4084],{"class":213},[203,15128,15129,15131,15133],{"class":205,"line":1843},[203,15130,217],{"class":209},[203,15132,2062],{"class":2052},[203,15134,2065],{"class":213},[203,15136,15137],{"class":205,"line":1848},[203,15138,1635],{"class":213},[203,15140,15141],{"class":205,"line":1853},[203,15142,15143],{"class":272},"    \u002F\u002F实例化\n",[203,15145,15146],{"class":205,"line":1867},[203,15147,15148],{"class":213},"    Student s1;\n",[203,15150,15151,15154,15157,15159,15161],{"class":205,"line":1872},[203,15152,15153],{"class":213},"    s1.",[203,15155,15156],{"class":2052},"setName",[203,15158,214],{"class":213},[203,15160,8006],{"class":318},[203,15162,2808],{"class":213},[203,15164,15165,15167,15170,15172,15175],{"class":205,"line":2666},[203,15166,15153],{"class":213},[203,15168,15169],{"class":2052},"setId",[203,15171,214],{"class":213},[203,15173,15174],{"class":262},"123456",[203,15176,2808],{"class":213},[203,15178,15179,15181,15184],{"class":205,"line":2680},[203,15180,15153],{"class":213},[203,15182,15183],{"class":2052},"printInfo",[203,15185,5726],{"class":213},[203,15187,15188],{"class":205,"line":2688},[203,15189,1654],{"class":213},[19,15191,15192],{},"类中的属性和行为统称为成员",[19,15194,15195],{},"属性：成员属性(成员变量)",[19,15197,15198],{},"方法：成员函数(成员方法)",[19,15200,15201],{},[363,15202,15203],{},"封装意义二：",[19,15205,15206],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15208,15209],{},"访问权限有三种：",[157,15211,15212,15215,15218],{},[160,15213,15214],{},"public        公共权限",[160,15216,15217],{},"protected 保护权限",[160,15219,15220],{},"private      私有权限",[19,15222,15223],{},[363,15224,15225],{},"示例：",[194,15227,15229],{"className":10031,"code":15228,"language":10033,"meta":27,"style":27},"\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",[200,15230,15231,15236,15241,15246,15251,15255,15262,15266,15271,15275,15280,15284,15289,15294,15299,15303,15308,15313,15320,15324,15328,15336,15340,15351,15363,15375,15379,15383,15387,15395,15399,15404,15416,15424,15432,15436,15446,15450,15458],{"__ignoreMap":27},[203,15232,15233],{"class":205,"line":206},[203,15234,15235],{"class":272},"\u002F\u002F三种权限\n",[203,15237,15238],{"class":205,"line":124},[203,15239,15240],{"class":272},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[203,15242,15243],{"class":205,"line":1269},[203,15244,15245],{"class":272},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[203,15247,15248],{"class":205,"line":1284},[203,15249,15250],{"class":272},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[203,15252,15253],{"class":205,"line":1290},[203,15254,2489],{"emptyLinePlaceholder":131},[203,15256,15257,15259],{"class":205,"line":1304},[203,15258,14784],{"class":209},[203,15260,15261],{"class":2052}," Person\n",[203,15263,15264],{"class":205,"line":1310},[203,15265,1635],{"class":213},[203,15267,15268],{"class":205,"line":1401},[203,15269,15270],{"class":272},"    \u002F\u002F姓名  公共权限\n",[203,15272,15273],{"class":205,"line":1407},[203,15274,14806],{"class":209},[203,15276,15277],{"class":205,"line":1419},[203,15278,15279],{"class":213},"    string m_Name;\n",[203,15281,15282],{"class":205,"line":1701},[203,15283,2489],{"emptyLinePlaceholder":131},[203,15285,15286],{"class":205,"line":1706},[203,15287,15288],{"class":272},"    \u002F\u002F汽车  保护权限\n",[203,15290,15291],{"class":205,"line":1712},[203,15292,15293],{"class":209},"protected:\n",[203,15295,15296],{"class":205,"line":1717},[203,15297,15298],{"class":213},"    string m_Car;\n",[203,15300,15301],{"class":205,"line":1731},[203,15302,2489],{"emptyLinePlaceholder":131},[203,15304,15305],{"class":205,"line":1736},[203,15306,15307],{"class":272},"    \u002F\u002F银行卡密码  私有权限\n",[203,15309,15310],{"class":205,"line":1742},[203,15311,15312],{"class":209},"private:\n",[203,15314,15315,15317],{"class":205,"line":1763},[203,15316,2074],{"class":209},[203,15318,15319],{"class":213}," m_Password;\n",[203,15321,15322],{"class":205,"line":1768},[203,15323,2489],{"emptyLinePlaceholder":131},[203,15325,15326],{"class":205,"line":1782},[203,15327,14806],{"class":209},[203,15329,15330,15332,15334],{"class":205,"line":1787},[203,15331,14999],{"class":209},[203,15333,11475],{"class":2052},[203,15335,2065],{"class":213},[203,15337,15338],{"class":205,"line":1816},[203,15339,2119],{"class":213},[203,15341,15342,15345,15347,15349],{"class":205,"line":1821},[203,15343,15344],{"class":213},"        m_Name ",[203,15346,259],{"class":209},[203,15348,9028],{"class":318},[203,15350,1380],{"class":213},[203,15352,15353,15356,15358,15361],{"class":205,"line":1838},[203,15354,15355],{"class":213},"        m_Car ",[203,15357,259],{"class":209},[203,15359,15360],{"class":318}," \"拖拉机\"",[203,15362,1380],{"class":213},[203,15364,15365,15368,15370,15373],{"class":205,"line":1843},[203,15366,15367],{"class":213},"        m_Password ",[203,15369,259],{"class":209},[203,15371,15372],{"class":262}," 123456",[203,15374,1380],{"class":213},[203,15376,15377],{"class":205,"line":1848},[203,15378,2276],{"class":213},[203,15380,15381],{"class":205,"line":1853},[203,15382,4084],{"class":213},[203,15384,15385],{"class":205,"line":1867},[203,15386,2489],{"emptyLinePlaceholder":131},[203,15388,15389,15391,15393],{"class":205,"line":1872},[203,15390,217],{"class":209},[203,15392,2062],{"class":2052},[203,15394,10943],{"class":213},[203,15396,15397],{"class":205,"line":2666},[203,15398,2489],{"emptyLinePlaceholder":131},[203,15400,15401],{"class":205,"line":2680},[203,15402,15403],{"class":213},"    Person p;\n",[203,15405,15406,15409,15411,15414],{"class":205,"line":2688},[203,15407,15408],{"class":213},"    p.m_Name ",[203,15410,259],{"class":209},[203,15412,15413],{"class":318}," \"李四\"",[203,15415,1380],{"class":213},[203,15417,15418,15421],{"class":205,"line":2693},[203,15419,15420],{"class":272},"    \u002F\u002Fp.m_Car = \"奔驰\";",[203,15422,15423],{"class":272},"  \u002F\u002F保护权限类外访问不到\n",[203,15425,15426,15429],{"class":205,"line":2699},[203,15427,15428],{"class":272},"    \u002F\u002Fp.m_Password = 123;",[203,15430,15431],{"class":272}," \u002F\u002F私有权限类外访问不到\n",[203,15433,15434],{"class":205,"line":2705},[203,15435,2489],{"emptyLinePlaceholder":131},[203,15437,15438,15440,15442,15444],{"class":205,"line":2710},[203,15439,2392],{"class":2052},[203,15441,214],{"class":213},[203,15443,2397],{"class":318},[203,15445,2808],{"class":213},[203,15447,15448],{"class":205,"line":8038},[203,15449,2489],{"emptyLinePlaceholder":131},[203,15451,15452,15454,15456],{"class":205,"line":8062},[203,15453,4179],{"class":209},[203,15455,4182],{"class":262},[203,15457,1380],{"class":213},[203,15459,15460],{"class":205,"line":8067},[203,15461,1654],{"class":213},[174,15463,15465],{"id":15464},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,15467,15468,15469,15472,15473],{},"在C++中 struct和class唯一的",[363,15470,15471],{},"区别","就在于 ",[363,15474,15475],{},"默认的访问权限不同",[19,15477,15478],{},"区别：",[1221,15480,15481,15484],{},[160,15482,15483],{},"struct 默认权限为公共",[160,15485,15486],{},"class   默认权限为私有",[194,15488,15490],{"className":10031,"code":15489,"language":10033,"meta":27,"style":27},"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",[200,15491,15492,15499,15503,15513,15517,15521,15528,15532,15542,15546,15550,15558,15562,15567,15581,15585,15590,15604,15608,15618,15622,15630],{"__ignoreMap":27},[203,15493,15494,15496],{"class":205,"line":206},[203,15495,14784],{"class":209},[203,15497,15498],{"class":2052}," C1\n",[203,15500,15501],{"class":205,"line":124},[203,15502,1635],{"class":213},[203,15504,15505,15507,15510],{"class":205,"line":1269},[203,15506,2074],{"class":209},[203,15508,15509],{"class":213},"  m_A;",[203,15511,15512],{"class":272}," \u002F\u002F默认是私有权限\n",[203,15514,15515],{"class":205,"line":1284},[203,15516,4084],{"class":213},[203,15518,15519],{"class":205,"line":1290},[203,15520,2489],{"emptyLinePlaceholder":131},[203,15522,15523,15525],{"class":205,"line":1304},[203,15524,7849],{"class":209},[203,15526,15527],{"class":2052}," C2\n",[203,15529,15530],{"class":205,"line":1310},[203,15531,1635],{"class":213},[203,15533,15534,15536,15539],{"class":205,"line":1401},[203,15535,2074],{"class":209},[203,15537,15538],{"class":213}," m_A;",[203,15540,15541],{"class":272},"  \u002F\u002F默认是公共权限\n",[203,15543,15544],{"class":205,"line":1407},[203,15545,4084],{"class":213},[203,15547,15548],{"class":205,"line":1419},[203,15549,2489],{"emptyLinePlaceholder":131},[203,15551,15552,15554,15556],{"class":205,"line":1701},[203,15553,217],{"class":209},[203,15555,2062],{"class":2052},[203,15557,10943],{"class":213},[203,15559,15560],{"class":205,"line":1706},[203,15561,2489],{"emptyLinePlaceholder":131},[203,15563,15564],{"class":205,"line":1712},[203,15565,15566],{"class":213},"    C1 c1;\n",[203,15568,15569,15572,15574,15576,15578],{"class":205,"line":1717},[203,15570,15571],{"class":213},"    c1.m_A ",[203,15573,259],{"class":209},[203,15575,2127],{"class":262},[203,15577,269],{"class":213},[203,15579,15580],{"class":272}," \u002F\u002F错误，访问权限是私有\n",[203,15582,15583],{"class":205,"line":1731},[203,15584,2489],{"emptyLinePlaceholder":131},[203,15586,15587],{"class":205,"line":1736},[203,15588,15589],{"class":213},"    C2 c2;\n",[203,15591,15592,15595,15597,15599,15601],{"class":205,"line":1742},[203,15593,15594],{"class":213},"    c2.m_A ",[203,15596,259],{"class":209},[203,15598,2127],{"class":262},[203,15600,269],{"class":213},[203,15602,15603],{"class":272}," \u002F\u002F正确，访问权限是公共\n",[203,15605,15606],{"class":205,"line":1763},[203,15607,2489],{"emptyLinePlaceholder":131},[203,15609,15610,15612,15614,15616],{"class":205,"line":1768},[203,15611,2392],{"class":2052},[203,15613,214],{"class":213},[203,15615,2397],{"class":318},[203,15617,2808],{"class":213},[203,15619,15620],{"class":205,"line":1782},[203,15621,2489],{"emptyLinePlaceholder":131},[203,15623,15624,15626,15628],{"class":205,"line":1787},[203,15625,4179],{"class":209},[203,15627,4182],{"class":262},[203,15629,1380],{"class":213},[203,15631,15632],{"class":205,"line":1816},[203,15633,1654],{"class":213},[174,15635,15637],{"id":15636},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,15639,15640],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,15642,15643],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,15645,15646],{},[363,15647,15225],{},[194,15649,15651],{"className":10031,"code":15650,"language":10033,"meta":27,"style":27},"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",[200,15652,15653,15663,15667,15671,15676,15690,15699,15703,15713,15717,15724,15728,15732,15736,15741,15750,15757,15761,15766,15782,15805,15818,15825,15829,15838,15842,15846,15851,15867,15877,15881,15885,15889,15897,15901,15911,15915,15923,15927,15931,15939,15943,15947,15952,15965,15988,15992,15997,16010,16032,16036,16041,16055,16063,16067,16077,16081,16089],{"__ignoreMap":27},[203,15654,15655,15657,15660],{"class":205,"line":206},[203,15656,14784],{"class":209},[203,15658,15659],{"class":2052}," Person",[203,15661,15662],{"class":213}," {\n",[203,15664,15665],{"class":205,"line":124},[203,15666,14806],{"class":209},[203,15668,15669],{"class":205,"line":1269},[203,15670,2489],{"emptyLinePlaceholder":131},[203,15672,15673],{"class":205,"line":1284},[203,15674,15675],{"class":272},"    \u002F\u002F姓名设置可读可写\n",[203,15677,15678,15680,15682,15684,15686,15688],{"class":205,"line":1290},[203,15679,14999],{"class":209},[203,15681,15002],{"class":2052},[203,15683,214],{"class":213},[203,15685,15007],{"class":2052},[203,15687,15010],{"class":5306},[203,15689,12532],{"class":213},[203,15691,15692,15694,15696],{"class":205,"line":1304},[203,15693,15344],{"class":213},[203,15695,259],{"class":209},[203,15697,15698],{"class":213}," name;\n",[203,15700,15701],{"class":205,"line":1310},[203,15702,2276],{"class":213},[203,15704,15705,15708,15711],{"class":205,"line":1401},[203,15706,15707],{"class":2052},"    string",[203,15709,15710],{"class":2052}," getName",[203,15712,2065],{"class":213},[203,15714,15715],{"class":205,"line":1407},[203,15716,2119],{"class":213},[203,15718,15719,15721],{"class":205,"line":1419},[203,15720,14842],{"class":209},[203,15722,15723],{"class":213}," m_Name;\n",[203,15725,15726],{"class":205,"line":1701},[203,15727,2276],{"class":213},[203,15729,15730],{"class":205,"line":1706},[203,15731,2489],{"emptyLinePlaceholder":131},[203,15733,15734],{"class":205,"line":1712},[203,15735,2489],{"emptyLinePlaceholder":131},[203,15737,15738],{"class":205,"line":1717},[203,15739,15740],{"class":272},"    \u002F\u002F获取年龄 \n",[203,15742,15743,15745,15748],{"class":205,"line":1731},[203,15744,2074],{"class":209},[203,15746,15747],{"class":2052}," getAge",[203,15749,10943],{"class":213},[203,15751,15752,15754],{"class":205,"line":1736},[203,15753,14842],{"class":209},[203,15755,15756],{"class":213}," m_Age;\n",[203,15758,15759],{"class":205,"line":1742},[203,15760,2276],{"class":213},[203,15762,15763],{"class":205,"line":1763},[203,15764,15765],{"class":272},"    \u002F\u002F设置年龄\n",[203,15767,15768,15770,15773,15775,15777,15780],{"class":205,"line":1768},[203,15769,14999],{"class":209},[203,15771,15772],{"class":2052}," setAge",[203,15774,214],{"class":213},[203,15776,217],{"class":209},[203,15778,15779],{"class":5306}," age",[203,15781,12532],{"class":213},[203,15783,15784,15786,15789,15791,15793,15795,15798,15800,15803],{"class":205,"line":1782},[203,15785,2586],{"class":209},[203,15787,15788],{"class":213}," (age ",[203,15790,1124],{"class":209},[203,15792,4182],{"class":262},[203,15794,3344],{"class":209},[203,15796,15797],{"class":213}," age ",[203,15799,1174],{"class":209},[203,15801,15802],{"class":262}," 150",[203,15804,12532],{"class":213},[203,15806,15807,15809,15811,15814,15816],{"class":205,"line":1787},[203,15808,9809],{"class":213},[203,15810,1258],{"class":209},[203,15812,15813],{"class":318}," \"你个老妖精!\"",[203,15815,1534],{"class":209},[203,15817,8930],{"class":213},[203,15819,15820,15823],{"class":205,"line":1816},[203,15821,15822],{"class":209},"            return",[203,15824,1380],{"class":213},[203,15826,15827],{"class":205,"line":1821},[203,15828,2618],{"class":213},[203,15830,15831,15834,15836],{"class":205,"line":1838},[203,15832,15833],{"class":213},"        m_Age ",[203,15835,259],{"class":209},[203,15837,7887],{"class":213},[203,15839,15840],{"class":205,"line":1843},[203,15841,2276],{"class":213},[203,15843,15844],{"class":205,"line":1848},[203,15845,2489],{"emptyLinePlaceholder":131},[203,15847,15848],{"class":205,"line":1853},[203,15849,15850],{"class":272},"    \u002F\u002F情人设置为只写\n",[203,15852,15853,15855,15858,15860,15862,15865],{"class":205,"line":1867},[203,15854,14999],{"class":209},[203,15856,15857],{"class":2052}," setLover",[203,15859,214],{"class":213},[203,15861,15007],{"class":2052},[203,15863,15864],{"class":5306}," lover",[203,15866,12532],{"class":213},[203,15868,15869,15872,15874],{"class":205,"line":1872},[203,15870,15871],{"class":213},"        m_Lover ",[203,15873,259],{"class":209},[203,15875,15876],{"class":213}," lover;\n",[203,15878,15879],{"class":205,"line":2666},[203,15880,2276],{"class":213},[203,15882,15883],{"class":205,"line":2680},[203,15884,2489],{"emptyLinePlaceholder":131},[203,15886,15887],{"class":205,"line":2688},[203,15888,15312],{"class":209},[203,15890,15891,15894],{"class":205,"line":2693},[203,15892,15893],{"class":213},"    string m_Name;",[203,15895,15896],{"class":272}," \u002F\u002F可读可写  姓名\n",[203,15898,15899],{"class":205,"line":2699},[203,15900,13300],{"class":213},[203,15902,15903,15905,15908],{"class":205,"line":2705},[203,15904,2074],{"class":209},[203,15906,15907],{"class":213}," m_Age;",[203,15909,15910],{"class":272}," \u002F\u002F只读  年龄\n",[203,15912,15913],{"class":205,"line":2710},[203,15914,2489],{"emptyLinePlaceholder":131},[203,15916,15917,15920],{"class":205,"line":8038},[203,15918,15919],{"class":213},"    string m_Lover;",[203,15921,15922],{"class":272}," \u002F\u002F只写  情人\n",[203,15924,15925],{"class":205,"line":8062},[203,15926,4084],{"class":213},[203,15928,15929],{"class":205,"line":8067},[203,15930,2489],{"emptyLinePlaceholder":131},[203,15932,15933,15935,15937],{"class":205,"line":8073},[203,15934,217],{"class":209},[203,15936,2062],{"class":2052},[203,15938,10943],{"class":213},[203,15940,15941],{"class":205,"line":8100},[203,15942,2489],{"emptyLinePlaceholder":131},[203,15944,15945],{"class":205,"line":8105},[203,15946,15403],{"class":213},[203,15948,15949],{"class":205,"line":8111},[203,15950,15951],{"class":272},"    \u002F\u002F姓名设置\n",[203,15953,15954,15957,15959,15961,15963],{"class":205,"line":8123},[203,15955,15956],{"class":213},"    p.",[203,15958,15156],{"class":2052},[203,15960,214],{"class":213},[203,15962,8006],{"class":318},[203,15964,2808],{"class":213},[203,15966,15967,15969,15971,15974,15976,15979,15982,15984,15986],{"class":205,"line":8135},[203,15968,6619],{"class":213},[203,15970,1258],{"class":209},[203,15972,15973],{"class":318}," \"姓名： \"",[203,15975,1534],{"class":209},[203,15977,15978],{"class":213}," p.",[203,15980,15981],{"class":2052},"getName",[203,15983,13140],{"class":213},[203,15985,1258],{"class":209},[203,15987,8930],{"class":213},[203,15989,15990],{"class":205,"line":8147},[203,15991,2489],{"emptyLinePlaceholder":131},[203,15993,15994],{"class":205,"line":9806},[203,15995,15996],{"class":272},"    \u002F\u002F年龄设置\n",[203,15998,15999,16001,16004,16006,16008],{"class":205,"line":9831},[203,16000,15956],{"class":213},[203,16002,16003],{"class":2052},"setAge",[203,16005,214],{"class":213},[203,16007,870],{"class":262},[203,16009,2808],{"class":213},[203,16011,16012,16014,16016,16019,16021,16023,16026,16028,16030],{"class":205,"line":9854},[203,16013,6619],{"class":213},[203,16015,1258],{"class":209},[203,16017,16018],{"class":318}," \"年龄： \"",[203,16020,1534],{"class":209},[203,16022,15978],{"class":213},[203,16024,16025],{"class":2052},"getAge",[203,16027,13140],{"class":213},[203,16029,1258],{"class":209},[203,16031,8930],{"class":213},[203,16033,16034],{"class":205,"line":9878},[203,16035,2489],{"emptyLinePlaceholder":131},[203,16037,16038],{"class":205,"line":9883},[203,16039,16040],{"class":272},"    \u002F\u002F情人设置\n",[203,16042,16043,16045,16048,16050,16053],{"class":205,"line":9888},[203,16044,15956],{"class":213},[203,16046,16047],{"class":2052},"setLover",[203,16049,214],{"class":213},[203,16051,16052],{"class":318},"\"苍井\"",[203,16054,2808],{"class":213},[203,16056,16057,16060],{"class":205,"line":9893},[203,16058,16059],{"class":272},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[203,16061,16062],{"class":272},"  \u002F\u002F只写属性，不可以读取\n",[203,16064,16065],{"class":205,"line":9902},[203,16066,2489],{"emptyLinePlaceholder":131},[203,16068,16069,16071,16073,16075],{"class":205,"line":9907},[203,16070,2392],{"class":2052},[203,16072,214],{"class":213},[203,16074,2397],{"class":318},[203,16076,2808],{"class":213},[203,16078,16079],{"class":205,"line":9913},[203,16080,2489],{"emptyLinePlaceholder":131},[203,16082,16083,16085,16087],{"class":205,"line":9934},[203,16084,4179],{"class":209},[203,16086,4182],{"class":262},[203,16088,1380],{"class":213},[203,16090,16091],{"class":205,"line":9940},[203,16092,1654],{"class":213},[174,16094,16096],{"id":16095},"_814封装案例","8.1.4封装案例",[157,16098,16099],{},[160,16100,16101,16104],{},[363,16102,16103],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1221,16106,16107,16110],{},[160,16108,16109],{},"求出立方体的面积和体积",[160,16111,16112],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[194,16114,16116],{"className":196,"code":16115,"language":198,"meta":27,"style":27},"#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",[200,16117,16118,16124,16134,16141,16145,16149,16154,16184,16188,16198,16208,16218,16222,16231,16235,16271,16275,16284,16288,16304,16308,16313,16322,16326,16333,16337,16346,16350,16357,16361,16370,16374,16381,16385,16390,16407,16411,16457,16461,16470,16474,16478,16482,16491,16495,16499,16504,16508,16514,16520,16526,16530,16534,16539,16561,16565,16619,16623,16631,16635,16640,16645,16658,16665,16681,16692,16698,16721,16727,16750,16764,16784,16790,16801,16824,16846,16851,16857,16871,16884,16889,16903,16908,16914,16919,16933,16938,16943,16957,16969,16974,16987,16992,16997,17002,17015,17020],{"__ignoreMap":27},[203,16119,16120,16122],{"class":205,"line":206},[203,16121,2038],{"class":209},[203,16123,2041],{"class":318},[203,16125,16126,16128,16130,16132],{"class":205,"line":124},[203,16127,2046],{"class":209},[203,16129,2049],{"class":209},[203,16131,2053],{"class":2052},[203,16133,1380],{"class":213},[203,16135,16136,16138],{"class":205,"line":1269},[203,16137,14784],{"class":209},[203,16139,16140],{"class":2052}," Cube\n",[203,16142,16143],{"class":205,"line":1284},[203,16144,1635],{"class":213},[203,16146,16147],{"class":205,"line":1290},[203,16148,14806],{"class":209},[203,16150,16151],{"class":205,"line":1304},[203,16152,16153],{"class":272},"    \u002F\u002F输入长宽高\n",[203,16155,16156,16158,16161,16163,16165,16168,16170,16172,16175,16177,16179,16182],{"class":205,"line":1310},[203,16157,14999],{"class":209},[203,16159,16160],{"class":2052}," setLwh",[203,16162,214],{"class":213},[203,16164,217],{"class":209},[203,16166,16167],{"class":5306}," l",[203,16169,592],{"class":213},[203,16171,217],{"class":209},[203,16173,16174],{"class":5306}," w",[203,16176,592],{"class":213},[203,16178,217],{"class":209},[203,16180,16181],{"class":5306}," h",[203,16183,220],{"class":213},[203,16185,16186],{"class":205,"line":1401},[203,16187,2119],{"class":213},[203,16189,16190,16193,16195],{"class":205,"line":1407},[203,16191,16192],{"class":213},"        m_L",[203,16194,259],{"class":209},[203,16196,16197],{"class":213},"l;\n",[203,16199,16200,16203,16205],{"class":205,"line":1419},[203,16201,16202],{"class":213},"        m_W",[203,16204,259],{"class":209},[203,16206,16207],{"class":213},"w;\n",[203,16209,16210,16213,16215],{"class":205,"line":1701},[203,16211,16212],{"class":213},"        m_H",[203,16214,259],{"class":209},[203,16216,16217],{"class":213},"h;\n",[203,16219,16220],{"class":205,"line":1706},[203,16221,2276],{"class":213},[203,16223,16224,16226,16229],{"class":205,"line":1712},[203,16225,2074],{"class":209},[203,16227,16228],{"class":2052}," mianji",[203,16230,2065],{"class":213},[203,16232,16233],{"class":205,"line":1717},[203,16234,2119],{"class":213},[203,16236,16237,16239,16241,16243,16246,16248,16251,16253,16256,16258,16261,16263,16266,16268],{"class":205,"line":1731},[203,16238,14842],{"class":209},[203,16240,14845],{"class":262},[203,16242,669],{"class":209},[203,16244,16245],{"class":213},"(m_L",[203,16247,669],{"class":209},[203,16249,16250],{"class":213},"m_W ",[203,16252,695],{"class":209},[203,16254,16255],{"class":213}," m_L",[203,16257,669],{"class":209},[203,16259,16260],{"class":213},"m_H ",[203,16262,695],{"class":209},[203,16264,16265],{"class":213}," m_W",[203,16267,669],{"class":209},[203,16269,16270],{"class":213},"m_H);\n",[203,16272,16273],{"class":205,"line":1736},[203,16274,2276],{"class":213},[203,16276,16277,16279,16282],{"class":205,"line":1742},[203,16278,2074],{"class":209},[203,16280,16281],{"class":2052}," tiji",[203,16283,2065],{"class":213},[203,16285,16286],{"class":205,"line":1763},[203,16287,2119],{"class":213},[203,16289,16290,16292,16294,16296,16299,16301],{"class":205,"line":1768},[203,16291,14842],{"class":209},[203,16293,16255],{"class":213},[203,16295,669],{"class":209},[203,16297,16298],{"class":213},"m_W",[203,16300,669],{"class":209},[203,16302,16303],{"class":213},"m_H;\n",[203,16305,16306],{"class":205,"line":1782},[203,16307,2276],{"class":213},[203,16309,16310],{"class":205,"line":1787},[203,16311,16312],{"class":272},"    \u002F\u002F获取长宽高\n",[203,16314,16315,16317,16320],{"class":205,"line":1816},[203,16316,2074],{"class":209},[203,16318,16319],{"class":2052}," getLength",[203,16321,2065],{"class":213},[203,16323,16324],{"class":205,"line":1821},[203,16325,2119],{"class":213},[203,16327,16328,16330],{"class":205,"line":1838},[203,16329,14842],{"class":209},[203,16331,16332],{"class":213}," m_L;\n",[203,16334,16335],{"class":205,"line":1843},[203,16336,2276],{"class":213},[203,16338,16339,16341,16344],{"class":205,"line":1848},[203,16340,2074],{"class":209},[203,16342,16343],{"class":2052}," getWidth",[203,16345,2065],{"class":213},[203,16347,16348],{"class":205,"line":1853},[203,16349,2119],{"class":213},[203,16351,16352,16354],{"class":205,"line":1867},[203,16353,14842],{"class":209},[203,16355,16356],{"class":213}," m_W;\n",[203,16358,16359],{"class":205,"line":1872},[203,16360,2276],{"class":213},[203,16362,16363,16365,16368],{"class":205,"line":2666},[203,16364,2074],{"class":209},[203,16366,16367],{"class":2052}," getHeight",[203,16369,2065],{"class":213},[203,16371,16372],{"class":205,"line":2680},[203,16373,2119],{"class":213},[203,16375,16376,16378],{"class":205,"line":2688},[203,16377,14842],{"class":209},[203,16379,16380],{"class":213}," m_H;\n",[203,16382,16383],{"class":205,"line":2693},[203,16384,2276],{"class":213},[203,16386,16387],{"class":205,"line":2699},[203,16388,16389],{"class":272},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[203,16391,16392,16395,16398,16400,16403,16405],{"class":205,"line":2705},[203,16393,16394],{"class":209},"    bool",[203,16396,16397],{"class":2052}," isEqual",[203,16399,214],{"class":213},[203,16401,16402],{"class":2052},"Cube",[203,16404,2938],{"class":5306},[203,16406,220],{"class":213},[203,16408,16409],{"class":205,"line":2710},[203,16410,2119],{"class":213},[203,16412,16413,16415,16418,16421,16423,16425,16428,16430,16433,16436,16438,16440,16443,16445,16447,16450,16452,16454],{"class":205,"line":8038},[203,16414,2586],{"class":209},[203,16416,16417],{"class":213}," (c.",[203,16419,16420],{"class":2052},"getLength",[203,16422,13140],{"class":213},[203,16424,3038],{"class":209},[203,16426,16427],{"class":213}," m_L ",[203,16429,1804],{"class":209},[203,16431,16432],{"class":213}," c.",[203,16434,16435],{"class":2052},"getWidth",[203,16437,13140],{"class":213},[203,16439,3038],{"class":209},[203,16441,16442],{"class":213}," m_W ",[203,16444,1804],{"class":209},[203,16446,16432],{"class":213},[203,16448,16449],{"class":2052},"getHeight",[203,16451,13140],{"class":213},[203,16453,3038],{"class":209},[203,16455,16456],{"class":213}," m_H)\n",[203,16458,16459],{"class":205,"line":8062},[203,16460,2599],{"class":213},[203,16462,16463,16465,16468],{"class":205,"line":8067},[203,16464,15822],{"class":209},[203,16466,16467],{"class":262}," true",[203,16469,1380],{"class":213},[203,16471,16472],{"class":205,"line":8073},[203,16473,2618],{"class":213},[203,16475,16476],{"class":205,"line":8100},[203,16477,2659],{"class":209},[203,16479,16480],{"class":205,"line":8105},[203,16481,2599],{"class":213},[203,16483,16484,16486,16489],{"class":205,"line":8111},[203,16485,15822],{"class":209},[203,16487,16488],{"class":262}," false",[203,16490,1380],{"class":213},[203,16492,16493],{"class":205,"line":8123},[203,16494,2618],{"class":213},[203,16496,16497],{"class":205,"line":8135},[203,16498,2276],{"class":213},[203,16500,16501],{"class":205,"line":8147},[203,16502,16503],{"class":272},"    \u002F\u002F私有属性\n",[203,16505,16506],{"class":205,"line":9806},[203,16507,15312],{"class":209},[203,16509,16510,16512],{"class":205,"line":9831},[203,16511,2074],{"class":209},[203,16513,16332],{"class":213},[203,16515,16516,16518],{"class":205,"line":9854},[203,16517,2074],{"class":209},[203,16519,16356],{"class":213},[203,16521,16522,16524],{"class":205,"line":9878},[203,16523,2074],{"class":209},[203,16525,16380],{"class":213},[203,16527,16528],{"class":205,"line":9883},[203,16529,2489],{"emptyLinePlaceholder":131},[203,16531,16532],{"class":205,"line":9888},[203,16533,4084],{"class":213},[203,16535,16536],{"class":205,"line":9893},[203,16537,16538],{"class":272},"\u002F\u002F全局函数判断两个立方体是否相等\n",[203,16540,16541,16543,16545,16547,16549,16552,16554,16556,16559],{"class":205,"line":9902},[203,16542,1444],{"class":209},[203,16544,16397],{"class":2052},[203,16546,214],{"class":213},[203,16548,16402],{"class":2052},[203,16550,16551],{"class":5306}," c1",[203,16553,592],{"class":213},[203,16555,16402],{"class":2052},[203,16557,16558],{"class":5306}," c2",[203,16560,220],{"class":213},[203,16562,16563],{"class":205,"line":9907},[203,16564,1635],{"class":213},[203,16566,16567,16569,16572,16574,16576,16578,16581,16583,16586,16588,16590,16592,16594,16596,16598,16600,16602,16604,16606,16608,16610,16612,16614,16616],{"class":205,"line":9913},[203,16568,4179],{"class":209},[203,16570,16571],{"class":213}," (c1.",[203,16573,16420],{"class":2052},[203,16575,13140],{"class":213},[203,16577,3038],{"class":209},[203,16579,16580],{"class":213}," c2.",[203,16582,16420],{"class":2052},[203,16584,16585],{"class":213},"()) ",[203,16587,1804],{"class":209},[203,16589,16571],{"class":213},[203,16591,16435],{"class":2052},[203,16593,13140],{"class":213},[203,16595,3038],{"class":209},[203,16597,16580],{"class":213},[203,16599,16435],{"class":2052},[203,16601,16585],{"class":213},[203,16603,1804],{"class":209},[203,16605,16571],{"class":213},[203,16607,16449],{"class":2052},[203,16609,13140],{"class":213},[203,16611,3038],{"class":209},[203,16613,16580],{"class":213},[203,16615,16449],{"class":2052},[203,16617,16618],{"class":213},"());\n",[203,16620,16621],{"class":205,"line":9934},[203,16622,1654],{"class":213},[203,16624,16625,16627,16629],{"class":205,"line":9940},[203,16626,217],{"class":209},[203,16628,2062],{"class":2052},[203,16630,2065],{"class":213},[203,16632,16633],{"class":205,"line":9954},[203,16634,1635],{"class":213},[203,16636,16637],{"class":205,"line":9960},[203,16638,16639],{"class":213},"    Cube c1;\n",[203,16641,16642],{"class":205,"line":9987},[203,16643,16644],{"class":272},"    \u002F\u002F输入立方体的长宽高\n",[203,16646,16647,16649,16651,16654,16656],{"class":205,"line":9996},[203,16648,1640],{"class":213},[203,16650,1258],{"class":209},[203,16652,16653],{"class":318},"\"请输入第一个立方体的长、宽、高：\"",[203,16655,1258],{"class":209},[203,16657,1281],{"class":213},[203,16659,16660,16662],{"class":205,"line":10002},[203,16661,2074],{"class":209},[203,16663,16664],{"class":213}," l,w,h,l1,w1,h1;\n",[203,16666,16667,16669,16671,16673,16675,16677,16679],{"class":205,"line":10010},[203,16668,2101],{"class":213},[203,16670,1519],{"class":209},[203,16672,732],{"class":213},[203,16674,1519],{"class":209},[203,16676,1009],{"class":213},[203,16678,1519],{"class":209},[203,16680,16217],{"class":213},[203,16682,16683,16686,16689],{"class":205,"line":10015},[203,16684,16685],{"class":213},"    c1.",[203,16687,16688],{"class":2052},"setLwh",[203,16690,16691],{"class":213},"(l,w,h);\n",[203,16693,16695],{"class":205,"line":16694},66,[203,16696,16697],{"class":272},"    \u002F\u002F面积\n",[203,16699,16701,16703,16705,16708,16710,16712,16715,16717,16719],{"class":205,"line":16700},67,[203,16702,1640],{"class":213},[203,16704,1258],{"class":209},[203,16706,16707],{"class":318},"\"立方体的表面积为：\"",[203,16709,1258],{"class":209},[203,16711,14920],{"class":213},[203,16713,16714],{"class":2052},"mianji",[203,16716,2516],{"class":213},[203,16718,1258],{"class":209},[203,16720,1281],{"class":213},[203,16722,16724],{"class":205,"line":16723},68,[203,16725,16726],{"class":272},"    \u002F\u002F体积\n",[203,16728,16730,16732,16734,16737,16739,16741,16744,16746,16748],{"class":205,"line":16729},69,[203,16731,1640],{"class":213},[203,16733,1258],{"class":209},[203,16735,16736],{"class":318},"\"立方体的体积为：\"",[203,16738,1258],{"class":209},[203,16740,14920],{"class":213},[203,16742,16743],{"class":2052},"tiji",[203,16745,2516],{"class":213},[203,16747,1258],{"class":209},[203,16749,1281],{"class":213},[203,16751,16753,16755,16757,16760,16762],{"class":205,"line":16752},70,[203,16754,1640],{"class":213},[203,16756,1258],{"class":209},[203,16758,16759],{"class":318},"\"请输入第二个立方体的长、宽、高：\"",[203,16761,1258],{"class":209},[203,16763,1281],{"class":213},[203,16765,16767,16769,16771,16774,16776,16779,16781],{"class":205,"line":16766},71,[203,16768,2101],{"class":213},[203,16770,1519],{"class":209},[203,16772,16773],{"class":213},"l1",[203,16775,1519],{"class":209},[203,16777,16778],{"class":213},"w1",[203,16780,1519],{"class":209},[203,16782,16783],{"class":213},"h1;\n",[203,16785,16787],{"class":205,"line":16786},72,[203,16788,16789],{"class":213},"    Cube c2;\n",[203,16791,16793,16796,16798],{"class":205,"line":16792},73,[203,16794,16795],{"class":213},"    c2.",[203,16797,16688],{"class":2052},[203,16799,16800],{"class":213},"(l1,w1,h1);\n",[203,16802,16804,16806,16808,16811,16813,16816,16818,16820,16822],{"class":205,"line":16803},74,[203,16805,1640],{"class":213},[203,16807,1258],{"class":209},[203,16809,16810],{"class":318},"\"第二个立方体的表面积为：\"",[203,16812,1258],{"class":209},[203,16814,16815],{"class":213},"c2.",[203,16817,16714],{"class":2052},[203,16819,2516],{"class":213},[203,16821,1258],{"class":209},[203,16823,1281],{"class":213},[203,16825,16827,16829,16831,16834,16836,16838,16840,16842,16844],{"class":205,"line":16826},75,[203,16828,1640],{"class":213},[203,16830,1258],{"class":209},[203,16832,16833],{"class":318},"\"第二个立方体的体积为：\"",[203,16835,1258],{"class":209},[203,16837,16815],{"class":213},[203,16839,16743],{"class":2052},[203,16841,2516],{"class":213},[203,16843,1258],{"class":209},[203,16845,1281],{"class":213},[203,16847,16849],{"class":205,"line":16848},76,[203,16850,2489],{"emptyLinePlaceholder":131},[203,16852,16854],{"class":205,"line":16853},77,[203,16855,16856],{"class":272},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[203,16858,16860,16862,16864,16867,16869],{"class":205,"line":16859},78,[203,16861,1640],{"class":213},[203,16863,1258],{"class":209},[203,16865,16866],{"class":318},"\"内部函数判断结果：\"",[203,16868,1258],{"class":209},[203,16870,1281],{"class":213},[203,16872,16874,16876,16878,16881],{"class":205,"line":16873},79,[203,16875,3190],{"class":209},[203,16877,16571],{"class":213},[203,16879,16880],{"class":2052},"isEqual",[203,16882,16883],{"class":213},"(c2))\n",[203,16885,16887],{"class":205,"line":16886},80,[203,16888,2119],{"class":213},[203,16890,16892,16894,16896,16899,16901],{"class":205,"line":16891},81,[203,16893,3540],{"class":213},[203,16895,1258],{"class":209},[203,16897,16898],{"class":318},"\"两个立方体相等\"",[203,16900,1258],{"class":209},[203,16902,1281],{"class":213},[203,16904,16906],{"class":205,"line":16905},82,[203,16907,2276],{"class":213},[203,16909,16911],{"class":205,"line":16910},83,[203,16912,16913],{"class":209},"    else\n",[203,16915,16917],{"class":205,"line":16916},84,[203,16918,2119],{"class":213},[203,16920,16922,16924,16926,16929,16931],{"class":205,"line":16921},85,[203,16923,3540],{"class":213},[203,16925,1258],{"class":209},[203,16927,16928],{"class":318},"\"两个立方体不相等\"",[203,16930,1258],{"class":209},[203,16932,1281],{"class":213},[203,16934,16936],{"class":205,"line":16935},86,[203,16937,2276],{"class":213},[203,16939,16941],{"class":205,"line":16940},87,[203,16942,2489],{"emptyLinePlaceholder":131},[203,16944,16946,16948,16950,16953,16955],{"class":205,"line":16945},88,[203,16947,1640],{"class":213},[203,16949,1258],{"class":209},[203,16951,16952],{"class":318},"\"全局函数判断结果：\"",[203,16954,1258],{"class":209},[203,16956,1281],{"class":213},[203,16958,16960,16962,16964,16966],{"class":205,"line":16959},89,[203,16961,3190],{"class":209},[203,16963,1747],{"class":213},[203,16965,16880],{"class":2052},[203,16967,16968],{"class":213},"(c1, c2))\n",[203,16970,16972],{"class":205,"line":16971},90,[203,16973,2119],{"class":213},[203,16975,16977,16979,16981,16983,16985],{"class":205,"line":16976},91,[203,16978,3540],{"class":213},[203,16980,1258],{"class":209},[203,16982,16898],{"class":318},[203,16984,1258],{"class":209},[203,16986,1281],{"class":213},[203,16988,16990],{"class":205,"line":16989},92,[203,16991,2276],{"class":213},[203,16993,16995],{"class":205,"line":16994},93,[203,16996,16913],{"class":209},[203,16998,17000],{"class":205,"line":16999},94,[203,17001,2119],{"class":213},[203,17003,17005,17007,17009,17011,17013],{"class":205,"line":17004},95,[203,17006,3540],{"class":213},[203,17008,1258],{"class":209},[203,17010,16928],{"class":318},[203,17012,1258],{"class":209},[203,17014,1281],{"class":213},[203,17016,17018],{"class":205,"line":17017},96,[203,17019,2276],{"class":213},[203,17021,17023],{"class":205,"line":17022},97,[203,17024,1654],{"class":213},[157,17026,17027],{"start":124},[160,17028,17029],{},[363,17030,17031],{},"练习案例2：点和圆的关系",[1221,17033,17034],{},[160,17035,17036],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[194,17038,17040],{"className":196,"code":17039,"language":198,"meta":27,"style":27},"#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",[200,17041,17042,17048,17058,17065,17072,17076,17080,17085,17119,17124,17140,17154,17158,17162,17169,17176,17180,17186,17190,17194,17198,17220,17243,17248,17262,17277,17281,17285,17291,17296,17301,17305,17331,17335,17365,17393,17421,17438,17442,17455,17459,17463,17467,17480,17484,17488,17496,17500,17504,17508,17513,17517,17528,17535,17544,17554,17565,17572,17585,17596,17606,17617,17624,17638,17643,17653,17661],{"__ignoreMap":27},[203,17043,17044,17046],{"class":205,"line":206},[203,17045,2038],{"class":209},[203,17047,2041],{"class":318},[203,17049,17050,17052,17054,17056],{"class":205,"line":124},[203,17051,2046],{"class":209},[203,17053,2049],{"class":209},[203,17055,2053],{"class":2052},[203,17057,1380],{"class":213},[203,17059,17060,17062],{"class":205,"line":1269},[203,17061,2038],{"class":209},[203,17063,17064],{"class":318},"\u003Ccmath>\n",[203,17066,17067,17069],{"class":205,"line":1284},[203,17068,14784],{"class":209},[203,17070,17071],{"class":2052}," Point\n",[203,17073,17074],{"class":205,"line":1290},[203,17075,1635],{"class":213},[203,17077,17078],{"class":205,"line":1304},[203,17079,14806],{"class":209},[203,17081,17082],{"class":205,"line":1310},[203,17083,17084],{"class":272},"    \u002F\u002F赋值\n",[203,17086,17087,17089,17092,17094,17096,17099,17101,17103,17106,17109,17111,17114,17116],{"class":205,"line":1401},[203,17088,14999],{"class":209},[203,17090,17091],{"class":2052}," setPoint",[203,17093,214],{"class":213},[203,17095,14127],{"class":209},[203,17097,17098],{"class":5306}," x",[203,17100,12525],{"class":213},[203,17102,14127],{"class":209},[203,17104,17105],{"class":5306}," y",[203,17107,17108],{"class":213},") { m_x ",[203,17110,259],{"class":209},[203,17112,17113],{"class":213}," x; m_y ",[203,17115,259],{"class":209},[203,17117,17118],{"class":213}," y; }\n",[203,17120,17121],{"class":205,"line":1407},[203,17122,17123],{"class":272},"    \u002F\u002F获取坐标\n",[203,17125,17126,17128,17131,17134,17137],{"class":205,"line":1419},[203,17127,14828],{"class":209},[203,17129,17130],{"class":2052}," getX",[203,17132,17133],{"class":213},"() { ",[203,17135,17136],{"class":209},"return",[203,17138,17139],{"class":213}," m_x; }\n",[203,17141,17142,17144,17147,17149,17151],{"class":205,"line":1701},[203,17143,14828],{"class":209},[203,17145,17146],{"class":2052}," getY",[203,17148,17133],{"class":213},[203,17150,17136],{"class":209},[203,17152,17153],{"class":213}," m_y; }\n",[203,17155,17156],{"class":205,"line":1706},[203,17157,2489],{"emptyLinePlaceholder":131},[203,17159,17160],{"class":205,"line":1712},[203,17161,15312],{"class":209},[203,17163,17164,17166],{"class":205,"line":1717},[203,17165,14828],{"class":209},[203,17167,17168],{"class":213}," m_x;\n",[203,17170,17171,17173],{"class":205,"line":1731},[203,17172,14828],{"class":209},[203,17174,17175],{"class":213}," m_y;\n",[203,17177,17178],{"class":205,"line":1736},[203,17179,4084],{"class":213},[203,17181,17182,17184],{"class":205,"line":1742},[203,17183,14784],{"class":209},[203,17185,14787],{"class":2052},[203,17187,17188],{"class":205,"line":1763},[203,17189,1635],{"class":213},[203,17191,17192],{"class":205,"line":1768},[203,17193,14806],{"class":209},[203,17195,17196],{"class":205,"line":1782},[203,17197,17084],{"class":272},[203,17199,17200,17202,17205,17207,17209,17212,17215,17217],{"class":205,"line":1787},[203,17201,14999],{"class":209},[203,17203,17204],{"class":2052}," setRadius",[203,17206,214],{"class":213},[203,17208,14127],{"class":209},[203,17210,17211],{"class":5306}," r",[203,17213,17214],{"class":213},") { m_r ",[203,17216,259],{"class":209},[203,17218,17219],{"class":213}," r; }\n",[203,17221,17222,17224,17227,17229,17232,17235,17238,17240],{"class":205,"line":1816},[203,17223,14999],{"class":209},[203,17225,17226],{"class":2052}," setCenter",[203,17228,214],{"class":213},[203,17230,17231],{"class":2052},"Point",[203,17233,17234],{"class":5306}," center",[203,17236,17237],{"class":213},") { m_center ",[203,17239,259],{"class":209},[203,17241,17242],{"class":213}," center; }\n",[203,17244,17245],{"class":205,"line":1821},[203,17246,17247],{"class":272},"    \u002F\u002F获取属性\n",[203,17249,17250,17252,17255,17257,17259],{"class":205,"line":1838},[203,17251,14828],{"class":209},[203,17253,17254],{"class":2052}," getRadius",[203,17256,17133],{"class":213},[203,17258,17136],{"class":209},[203,17260,17261],{"class":213}," m_r; }\n",[203,17263,17264,17267,17270,17272,17274],{"class":205,"line":1843},[203,17265,17266],{"class":2052},"    Point",[203,17268,17269],{"class":2052}," getCenter",[203,17271,17133],{"class":213},[203,17273,17136],{"class":209},[203,17275,17276],{"class":213}," m_center; }\n",[203,17278,17279],{"class":205,"line":1848},[203,17280,2489],{"emptyLinePlaceholder":131},[203,17282,17283],{"class":205,"line":1853},[203,17284,15312],{"class":209},[203,17286,17287,17289],{"class":205,"line":1867},[203,17288,14828],{"class":209},[203,17290,14818],{"class":213},[203,17292,17293],{"class":205,"line":1872},[203,17294,17295],{"class":272},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[203,17297,17298],{"class":205,"line":2666},[203,17299,17300],{"class":213},"    Point m_center;\n",[203,17302,17303],{"class":205,"line":2680},[203,17304,4084],{"class":213},[203,17306,17307,17309,17312,17314,17317,17319,17321,17323,17325,17327,17329],{"class":205,"line":2688},[203,17308,5454],{"class":209},[203,17310,17311],{"class":2052}," isInCircle",[203,17313,214],{"class":213},[203,17315,17316],{"class":2052},"Circle",[203,17318,10674],{"class":209},[203,17320,502],{"class":5306},[203,17322,592],{"class":213},[203,17324,17231],{"class":2052},[203,17326,10674],{"class":209},[203,17328,19],{"class":5306},[203,17330,220],{"class":213},[203,17332,17333],{"class":205,"line":2693},[203,17334,1635],{"class":213},[203,17336,17337,17339,17342,17344,17346,17349,17352,17355,17357,17359,17361,17363],{"class":205,"line":2699},[203,17338,14828],{"class":209},[203,17340,17341],{"class":213}," dx ",[203,17343,259],{"class":209},[203,17345,16432],{"class":213},[203,17347,17348],{"class":2052},"getCenter",[203,17350,17351],{"class":213},"().",[203,17353,17354],{"class":2052},"getX",[203,17356,13140],{"class":213},[203,17358,746],{"class":209},[203,17360,15978],{"class":213},[203,17362,17354],{"class":2052},[203,17364,5726],{"class":213},[203,17366,17367,17369,17372,17374,17376,17378,17380,17383,17385,17387,17389,17391],{"class":205,"line":2705},[203,17368,14828],{"class":209},[203,17370,17371],{"class":213}," dy ",[203,17373,259],{"class":209},[203,17375,16432],{"class":213},[203,17377,17348],{"class":2052},[203,17379,17351],{"class":213},[203,17381,17382],{"class":2052},"getY",[203,17384,13140],{"class":213},[203,17386,746],{"class":209},[203,17388,15978],{"class":213},[203,17390,17382],{"class":2052},[203,17392,5726],{"class":213},[203,17394,17395,17397,17400,17402,17405,17408,17410,17412,17414,17416,17418],{"class":205,"line":2710},[203,17396,14828],{"class":209},[203,17398,17399],{"class":213}," distance ",[203,17401,259],{"class":209},[203,17403,17404],{"class":2052}," sqrt",[203,17406,17407],{"class":213},"(dx ",[203,17409,669],{"class":209},[203,17411,17341],{"class":213},[203,17413,695],{"class":209},[203,17415,17371],{"class":213},[203,17417,669],{"class":209},[203,17419,17420],{"class":213}," dy);\n",[203,17422,17423,17425,17428,17430,17432,17435],{"class":205,"line":8038},[203,17424,3190],{"class":209},[203,17426,17427],{"class":213}," (distance ",[203,17429,1124],{"class":209},[203,17431,16432],{"class":213},[203,17433,17434],{"class":2052},"getRadius",[203,17436,17437],{"class":213},"())\n",[203,17439,17440],{"class":205,"line":8062},[203,17441,2119],{"class":213},[203,17443,17444,17446,17448,17451,17453],{"class":205,"line":8067},[203,17445,9759],{"class":213},[203,17447,1258],{"class":209},[203,17449,17450],{"class":318}," \"点在圆内\"",[203,17452,1534],{"class":209},[203,17454,8930],{"class":213},[203,17456,17457],{"class":205,"line":8073},[203,17458,2276],{"class":213},[203,17460,17461],{"class":205,"line":8100},[203,17462,16913],{"class":209},[203,17464,17465],{"class":205,"line":8105},[203,17466,2119],{"class":213},[203,17468,17469,17471,17473,17476,17478],{"class":205,"line":8111},[203,17470,9759],{"class":213},[203,17472,1258],{"class":209},[203,17474,17475],{"class":318}," \"点在圆外\"",[203,17477,1534],{"class":209},[203,17479,8930],{"class":213},[203,17481,17482],{"class":205,"line":8123},[203,17483,2276],{"class":213},[203,17485,17486],{"class":205,"line":8135},[203,17487,1654],{"class":213},[203,17489,17490,17492,17494],{"class":205,"line":8147},[203,17491,217],{"class":209},[203,17493,2062],{"class":2052},[203,17495,2065],{"class":213},[203,17497,17498],{"class":205,"line":9806},[203,17499,1635],{"class":213},[203,17501,17502],{"class":205,"line":9831},[203,17503,15143],{"class":272},[203,17505,17506],{"class":205,"line":9854},[203,17507,14890],{"class":213},[203,17509,17510],{"class":205,"line":9878},[203,17511,17512],{"class":213},"    Point p1;\n",[203,17514,17515],{"class":205,"line":9883},[203,17516,17084],{"class":272},[203,17518,17519,17521,17523,17526],{"class":205,"line":9888},[203,17520,1640],{"class":213},[203,17522,1258],{"class":209},[203,17524,17525],{"class":318},"\"请输入圆的半径：\"",[203,17527,1380],{"class":213},[203,17529,17530,17532],{"class":205,"line":9893},[203,17531,14828],{"class":209},[203,17533,17534],{"class":213}," r;\n",[203,17536,17537,17539,17541],{"class":205,"line":9902},[203,17538,2101],{"class":213},[203,17540,1519],{"class":209},[203,17542,17543],{"class":213},"r;\n",[203,17545,17546,17548,17551],{"class":205,"line":9907},[203,17547,16685],{"class":213},[203,17549,17550],{"class":2052},"setRadius",[203,17552,17553],{"class":213},"(r);\n",[203,17555,17556,17558,17560,17563],{"class":205,"line":9913},[203,17557,1640],{"class":213},[203,17559,1258],{"class":209},[203,17561,17562],{"class":318},"\"请输入圆心坐标：\"",[203,17564,1380],{"class":213},[203,17566,17567,17569],{"class":205,"line":9934},[203,17568,14828],{"class":209},[203,17570,17571],{"class":213}," x, y;\n",[203,17573,17574,17576,17578,17580,17582],{"class":205,"line":9940},[203,17575,2101],{"class":213},[203,17577,1519],{"class":209},[203,17579,1034],{"class":213},[203,17581,1519],{"class":209},[203,17583,17584],{"class":213},"y;\n",[203,17586,17587,17590,17593],{"class":205,"line":9954},[203,17588,17589],{"class":213},"    p1.",[203,17591,17592],{"class":2052},"setPoint",[203,17594,17595],{"class":213},"(x, y);\n",[203,17597,17598,17600,17603],{"class":205,"line":9960},[203,17599,16685],{"class":213},[203,17601,17602],{"class":2052},"setCenter",[203,17604,17605],{"class":213},"(p1);\n",[203,17607,17608,17610,17612,17615],{"class":205,"line":9987},[203,17609,1640],{"class":213},[203,17611,1258],{"class":209},[203,17613,17614],{"class":318},"\"请输入测试点坐标：\"",[203,17616,1380],{"class":213},[203,17618,17619,17621],{"class":205,"line":9996},[203,17620,14828],{"class":209},[203,17622,17623],{"class":213}," x1, y1;\n",[203,17625,17626,17628,17630,17633,17635],{"class":205,"line":10002},[203,17627,2101],{"class":213},[203,17629,1519],{"class":209},[203,17631,17632],{"class":213},"x1",[203,17634,1519],{"class":209},[203,17636,17637],{"class":213},"y1;\n",[203,17639,17640],{"class":205,"line":10010},[203,17641,17642],{"class":213},"    Point p2;\n",[203,17644,17645,17648,17650],{"class":205,"line":10015},[203,17646,17647],{"class":213},"    p2.",[203,17649,17592],{"class":2052},[203,17651,17652],{"class":213},"(x1, y1);\n",[203,17654,17655,17658],{"class":205,"line":16694},[203,17656,17657],{"class":2052},"    isInCircle",[203,17659,17660],{"class":213},"(c1, p2);\n",[203,17662,17663],{"class":205,"line":16700},[203,17664,1654],{"class":213},[19,17666,17667],{},"在类中可以让另一个类作为本来的成员",[19,17669,17670],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,17672,17673],{},"创建point.h",[194,17675,17677],{"className":196,"code":17676,"language":198,"meta":27,"style":27},"#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",[200,17678,17679,17690,17696,17706,17712,17716,17721,17725,17729,17749,17753,17761,17769,17773,17777,17783,17789],{"__ignoreMap":27},[203,17680,17681,17684,17687],{"class":205,"line":206},[203,17682,17683],{"class":209},"#pragma",[203,17685,17686],{"class":2052}," once",[203,17688,17689],{"class":272}," \u002F\u002F防止头文件重复包含\n",[203,17691,17692,17694],{"class":205,"line":124},[203,17693,2038],{"class":209},[203,17695,2041],{"class":318},[203,17697,17698,17700,17702,17704],{"class":205,"line":1269},[203,17699,2046],{"class":209},[203,17701,2049],{"class":209},[203,17703,2053],{"class":2052},[203,17705,1380],{"class":213},[203,17707,17708,17710],{"class":205,"line":1284},[203,17709,14784],{"class":209},[203,17711,17071],{"class":2052},[203,17713,17714],{"class":205,"line":1290},[203,17715,1635],{"class":213},[203,17717,17718],{"class":205,"line":1304},[203,17719,17720],{"class":272},"\u002F\u002F做好声明与变量定义就可以\n",[203,17722,17723],{"class":205,"line":1310},[203,17724,14806],{"class":209},[203,17726,17727],{"class":205,"line":1401},[203,17728,17084],{"class":272},[203,17730,17731,17733,17735,17737,17739,17741,17743,17745,17747],{"class":205,"line":1407},[203,17732,14999],{"class":209},[203,17734,17091],{"class":2052},[203,17736,214],{"class":213},[203,17738,14127],{"class":209},[203,17740,17098],{"class":5306},[203,17742,12525],{"class":213},[203,17744,14127],{"class":209},[203,17746,17105],{"class":5306},[203,17748,2808],{"class":213},[203,17750,17751],{"class":205,"line":1419},[203,17752,17123],{"class":272},[203,17754,17755,17757,17759],{"class":205,"line":1701},[203,17756,14828],{"class":209},[203,17758,17130],{"class":2052},[203,17760,5726],{"class":213},[203,17762,17763,17765,17767],{"class":205,"line":1706},[203,17764,14828],{"class":209},[203,17766,17146],{"class":2052},[203,17768,5726],{"class":213},[203,17770,17771],{"class":205,"line":1712},[203,17772,2489],{"emptyLinePlaceholder":131},[203,17774,17775],{"class":205,"line":1717},[203,17776,15312],{"class":209},[203,17778,17779,17781],{"class":205,"line":1731},[203,17780,14828],{"class":209},[203,17782,17168],{"class":213},[203,17784,17785,17787],{"class":205,"line":1736},[203,17786,14828],{"class":209},[203,17788,17175],{"class":213},[203,17790,17791],{"class":205,"line":1742},[203,17792,4084],{"class":213},[19,17794,17795],{},"创建point.cpp",[194,17797,17799],{"className":196,"code":17798,"language":198,"meta":27,"style":27},"#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",[200,17800,17801,17808,17813,17847,17851,17867],{"__ignoreMap":27},[203,17802,17803,17805],{"class":205,"line":206},[203,17804,2038],{"class":209},[203,17806,17807],{"class":318},"\u003Cpoint.h>\n",[203,17809,17810],{"class":205,"line":124},[203,17811,17812],{"class":272},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[203,17814,17815,17817,17820,17823,17825,17827,17829,17831,17833,17835,17837,17839,17841,17843,17845],{"class":205,"line":1269},[203,17816,14999],{"class":209},[203,17818,17819],{"class":2052}," Point",[203,17821,17822],{"class":213},"::",[203,17824,17592],{"class":2052},[203,17826,214],{"class":213},[203,17828,14127],{"class":209},[203,17830,17098],{"class":5306},[203,17832,12525],{"class":213},[203,17834,14127],{"class":209},[203,17836,17105],{"class":5306},[203,17838,17108],{"class":213},[203,17840,259],{"class":209},[203,17842,17113],{"class":213},[203,17844,259],{"class":209},[203,17846,17118],{"class":213},[203,17848,17849],{"class":205,"line":1284},[203,17850,17123],{"class":272},[203,17852,17853,17855,17857,17859,17861,17863,17865],{"class":205,"line":1290},[203,17854,14828],{"class":209},[203,17856,17819],{"class":2052},[203,17858,17822],{"class":213},[203,17860,17354],{"class":2052},[203,17862,17133],{"class":213},[203,17864,17136],{"class":209},[203,17866,17139],{"class":213},[203,17868,17869,17871,17873,17875,17877,17879,17881],{"class":205,"line":1304},[203,17870,14828],{"class":209},[203,17872,17819],{"class":2052},[203,17874,17822],{"class":213},[203,17876,17382],{"class":2052},[203,17878,17133],{"class":213},[203,17880,17136],{"class":209},[203,17882,17153],{"class":213},[19,17884,17885],{},"创建circle.h",[194,17887,17889],{"className":196,"code":17888,"language":198,"meta":27,"style":27},"#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",[200,17890,17891,17898,17904,17914,17920,17926,17930,17934,17938,17952,17966,17970,17978,17986,17990,17994,18000,18004,18008],{"__ignoreMap":27},[203,17892,17893,17895],{"class":205,"line":206},[203,17894,17683],{"class":209},[203,17896,17897],{"class":2052}," once\n",[203,17899,17900,17902],{"class":205,"line":124},[203,17901,2038],{"class":209},[203,17903,2041],{"class":318},[203,17905,17906,17908,17910,17912],{"class":205,"line":1269},[203,17907,2046],{"class":209},[203,17909,2049],{"class":209},[203,17911,2053],{"class":2052},[203,17913,1380],{"class":213},[203,17915,17916,17918],{"class":205,"line":1284},[203,17917,2038],{"class":209},[203,17919,17807],{"class":318},[203,17921,17922,17924],{"class":205,"line":1290},[203,17923,14784],{"class":209},[203,17925,14787],{"class":2052},[203,17927,17928],{"class":205,"line":1304},[203,17929,1635],{"class":213},[203,17931,17932],{"class":205,"line":1310},[203,17933,14806],{"class":209},[203,17935,17936],{"class":205,"line":1401},[203,17937,17084],{"class":272},[203,17939,17940,17942,17944,17946,17948,17950],{"class":205,"line":1407},[203,17941,14999],{"class":209},[203,17943,17204],{"class":2052},[203,17945,214],{"class":213},[203,17947,14127],{"class":209},[203,17949,17211],{"class":5306},[203,17951,2808],{"class":213},[203,17953,17954,17956,17958,17960,17962,17964],{"class":205,"line":1419},[203,17955,14999],{"class":209},[203,17957,17226],{"class":2052},[203,17959,214],{"class":213},[203,17961,17231],{"class":2052},[203,17963,17234],{"class":5306},[203,17965,2808],{"class":213},[203,17967,17968],{"class":205,"line":1701},[203,17969,17247],{"class":272},[203,17971,17972,17974,17976],{"class":205,"line":1706},[203,17973,14828],{"class":209},[203,17975,17254],{"class":2052},[203,17977,5726],{"class":213},[203,17979,17980,17982,17984],{"class":205,"line":1712},[203,17981,17266],{"class":2052},[203,17983,17269],{"class":2052},[203,17985,5726],{"class":213},[203,17987,17988],{"class":205,"line":1717},[203,17989,2489],{"emptyLinePlaceholder":131},[203,17991,17992],{"class":205,"line":1731},[203,17993,15312],{"class":209},[203,17995,17996,17998],{"class":205,"line":1736},[203,17997,14828],{"class":209},[203,17999,14818],{"class":213},[203,18001,18002],{"class":205,"line":1742},[203,18003,17295],{"class":272},[203,18005,18006],{"class":205,"line":1763},[203,18007,17300],{"class":213},[203,18009,18010],{"class":205,"line":1768},[203,18011,4084],{"class":213},[19,18013,18014],{},"创建circle.cpp",[194,18016,18018],{"className":196,"code":18017,"language":198,"meta":27,"style":27},"#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",[200,18019,18020,18027,18050,18072,18077,18093],{"__ignoreMap":27},[203,18021,18022,18024],{"class":205,"line":206},[203,18023,2038],{"class":209},[203,18025,18026],{"class":318},"\u003Ccircle.h>\n",[203,18028,18029,18031,18034,18036,18038,18040,18042,18044,18046,18048],{"class":205,"line":124},[203,18030,5454],{"class":209},[203,18032,18033],{"class":2052}," Circle",[203,18035,17822],{"class":213},[203,18037,17550],{"class":2052},[203,18039,214],{"class":213},[203,18041,14127],{"class":209},[203,18043,17211],{"class":5306},[203,18045,17214],{"class":213},[203,18047,259],{"class":209},[203,18049,17219],{"class":213},[203,18051,18052,18054,18056,18058,18060,18062,18064,18066,18068,18070],{"class":205,"line":1269},[203,18053,5454],{"class":209},[203,18055,18033],{"class":2052},[203,18057,17822],{"class":213},[203,18059,17602],{"class":2052},[203,18061,214],{"class":213},[203,18063,17231],{"class":2052},[203,18065,17234],{"class":5306},[203,18067,17237],{"class":213},[203,18069,259],{"class":209},[203,18071,17242],{"class":213},[203,18073,18074],{"class":205,"line":1284},[203,18075,18076],{"class":272},"\u002F\u002F获取属性\n",[203,18078,18079,18081,18083,18085,18087,18089,18091],{"class":205,"line":1290},[203,18080,14127],{"class":209},[203,18082,18033],{"class":2052},[203,18084,17822],{"class":213},[203,18086,17434],{"class":2052},[203,18088,17133],{"class":213},[203,18090,17136],{"class":209},[203,18092,17261],{"class":213},[203,18094,18095,18097,18099,18101,18103,18105,18107],{"class":205,"line":1304},[203,18096,17231],{"class":2052},[203,18098,18033],{"class":2052},[203,18100,17822],{"class":213},[203,18102,17348],{"class":2052},[203,18104,17133],{"class":213},[203,18106,17136],{"class":209},[203,18108,17276],{"class":213},[19,18110,18111],{},"使用封装的类",[194,18113,18115],{"className":196,"code":18114,"language":198,"meta":27,"style":27},"#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",[200,18116,18117,18123,18133,18139,18145,18169,18173,18199,18225,18249,18263,18267,18279,18283,18287,18291,18303,18307,18311,18319,18323,18327,18331,18335,18339,18349,18355,18363,18371,18381,18387,18399,18407,18415,18425,18431,18443,18447,18455,18461],{"__ignoreMap":27},[203,18118,18119,18121],{"class":205,"line":206},[203,18120,2038],{"class":209},[203,18122,2041],{"class":318},[203,18124,18125,18127,18129,18131],{"class":205,"line":124},[203,18126,2046],{"class":209},[203,18128,2049],{"class":209},[203,18130,2053],{"class":2052},[203,18132,1380],{"class":213},[203,18134,18135,18137],{"class":205,"line":1269},[203,18136,2038],{"class":209},[203,18138,18026],{"class":318},[203,18140,18141,18143],{"class":205,"line":1284},[203,18142,2038],{"class":209},[203,18144,17807],{"class":318},[203,18146,18147,18149,18151,18153,18155,18157,18159,18161,18163,18165,18167],{"class":205,"line":1290},[203,18148,5454],{"class":209},[203,18150,17311],{"class":2052},[203,18152,214],{"class":213},[203,18154,17316],{"class":2052},[203,18156,10674],{"class":209},[203,18158,502],{"class":5306},[203,18160,592],{"class":213},[203,18162,17231],{"class":2052},[203,18164,10674],{"class":209},[203,18166,19],{"class":5306},[203,18168,220],{"class":213},[203,18170,18171],{"class":205,"line":1304},[203,18172,1635],{"class":213},[203,18174,18175,18177,18179,18181,18183,18185,18187,18189,18191,18193,18195,18197],{"class":205,"line":1310},[203,18176,14828],{"class":209},[203,18178,17341],{"class":213},[203,18180,259],{"class":209},[203,18182,16432],{"class":213},[203,18184,17348],{"class":2052},[203,18186,17351],{"class":213},[203,18188,17354],{"class":2052},[203,18190,13140],{"class":213},[203,18192,746],{"class":209},[203,18194,15978],{"class":213},[203,18196,17354],{"class":2052},[203,18198,5726],{"class":213},[203,18200,18201,18203,18205,18207,18209,18211,18213,18215,18217,18219,18221,18223],{"class":205,"line":1401},[203,18202,14828],{"class":209},[203,18204,17371],{"class":213},[203,18206,259],{"class":209},[203,18208,16432],{"class":213},[203,18210,17348],{"class":2052},[203,18212,17351],{"class":213},[203,18214,17382],{"class":2052},[203,18216,13140],{"class":213},[203,18218,746],{"class":209},[203,18220,15978],{"class":213},[203,18222,17382],{"class":2052},[203,18224,5726],{"class":213},[203,18226,18227,18229,18231,18233,18235,18237,18239,18241,18243,18245,18247],{"class":205,"line":1407},[203,18228,14828],{"class":209},[203,18230,17399],{"class":213},[203,18232,259],{"class":209},[203,18234,17404],{"class":2052},[203,18236,17407],{"class":213},[203,18238,669],{"class":209},[203,18240,17341],{"class":213},[203,18242,695],{"class":209},[203,18244,17371],{"class":213},[203,18246,669],{"class":209},[203,18248,17420],{"class":213},[203,18250,18251,18253,18255,18257,18259,18261],{"class":205,"line":1419},[203,18252,3190],{"class":209},[203,18254,17427],{"class":213},[203,18256,1124],{"class":209},[203,18258,16432],{"class":213},[203,18260,17434],{"class":2052},[203,18262,17437],{"class":213},[203,18264,18265],{"class":205,"line":1701},[203,18266,2119],{"class":213},[203,18268,18269,18271,18273,18275,18277],{"class":205,"line":1706},[203,18270,9759],{"class":213},[203,18272,1258],{"class":209},[203,18274,17450],{"class":318},[203,18276,1534],{"class":209},[203,18278,8930],{"class":213},[203,18280,18281],{"class":205,"line":1712},[203,18282,2276],{"class":213},[203,18284,18285],{"class":205,"line":1717},[203,18286,16913],{"class":209},[203,18288,18289],{"class":205,"line":1731},[203,18290,2119],{"class":213},[203,18292,18293,18295,18297,18299,18301],{"class":205,"line":1736},[203,18294,9759],{"class":213},[203,18296,1258],{"class":209},[203,18298,17475],{"class":318},[203,18300,1534],{"class":209},[203,18302,8930],{"class":213},[203,18304,18305],{"class":205,"line":1742},[203,18306,2276],{"class":213},[203,18308,18309],{"class":205,"line":1763},[203,18310,1654],{"class":213},[203,18312,18313,18315,18317],{"class":205,"line":1768},[203,18314,217],{"class":209},[203,18316,2062],{"class":2052},[203,18318,2065],{"class":213},[203,18320,18321],{"class":205,"line":1782},[203,18322,1635],{"class":213},[203,18324,18325],{"class":205,"line":1787},[203,18326,15143],{"class":272},[203,18328,18329],{"class":205,"line":1816},[203,18330,14890],{"class":213},[203,18332,18333],{"class":205,"line":1821},[203,18334,17512],{"class":213},[203,18336,18337],{"class":205,"line":1838},[203,18338,17084],{"class":272},[203,18340,18341,18343,18345,18347],{"class":205,"line":1843},[203,18342,1640],{"class":213},[203,18344,1258],{"class":209},[203,18346,17525],{"class":318},[203,18348,1380],{"class":213},[203,18350,18351,18353],{"class":205,"line":1848},[203,18352,14828],{"class":209},[203,18354,17534],{"class":213},[203,18356,18357,18359,18361],{"class":205,"line":1853},[203,18358,2101],{"class":213},[203,18360,1519],{"class":209},[203,18362,17543],{"class":213},[203,18364,18365,18367,18369],{"class":205,"line":1867},[203,18366,16685],{"class":213},[203,18368,17550],{"class":2052},[203,18370,17553],{"class":213},[203,18372,18373,18375,18377,18379],{"class":205,"line":1872},[203,18374,1640],{"class":213},[203,18376,1258],{"class":209},[203,18378,17562],{"class":318},[203,18380,1380],{"class":213},[203,18382,18383,18385],{"class":205,"line":2666},[203,18384,14828],{"class":209},[203,18386,17571],{"class":213},[203,18388,18389,18391,18393,18395,18397],{"class":205,"line":2680},[203,18390,2101],{"class":213},[203,18392,1519],{"class":209},[203,18394,1034],{"class":213},[203,18396,1519],{"class":209},[203,18398,17584],{"class":213},[203,18400,18401,18403,18405],{"class":205,"line":2688},[203,18402,17589],{"class":213},[203,18404,17592],{"class":2052},[203,18406,17595],{"class":213},[203,18408,18409,18411,18413],{"class":205,"line":2693},[203,18410,16685],{"class":213},[203,18412,17602],{"class":2052},[203,18414,17605],{"class":213},[203,18416,18417,18419,18421,18423],{"class":205,"line":2699},[203,18418,1640],{"class":213},[203,18420,1258],{"class":209},[203,18422,17614],{"class":318},[203,18424,1380],{"class":213},[203,18426,18427,18429],{"class":205,"line":2705},[203,18428,14828],{"class":209},[203,18430,17623],{"class":213},[203,18432,18433,18435,18437,18439,18441],{"class":205,"line":2710},[203,18434,2101],{"class":213},[203,18436,1519],{"class":209},[203,18438,17632],{"class":213},[203,18440,1519],{"class":209},[203,18442,17637],{"class":213},[203,18444,18445],{"class":205,"line":8038},[203,18446,17642],{"class":213},[203,18448,18449,18451,18453],{"class":205,"line":8062},[203,18450,17647],{"class":213},[203,18452,17592],{"class":2052},[203,18454,17652],{"class":213},[203,18456,18457,18459],{"class":205,"line":8067},[203,18458,17657],{"class":2052},[203,18460,17660],{"class":213},[203,18462,18463],{"class":205,"line":8073},[203,18464,1654],{"class":213},[14,18466,18468],{"id":18467},"_82对象的初始化清理","8.2对象的初始化清理",[1221,18470,18471,18474],{},[160,18472,18473],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[160,18475,18476],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[174,18478,18480],{"id":18479},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,18482,18483,18484,18487],{},"对象的",[363,18485,18486],{},"初始化和清理","也是两个非常重要的安全问题",[19,18489,18490],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,18492,18493],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,18495,18496,18497,18500,18501,18504],{},"c++利用了",[363,18498,18499],{},"构造函数","和",[363,18502,18503],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,18506,18507,18508],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[363,18509,18510],{},"我们不提供构造和析构，编译器会提供",[19,18512,18513],{},[363,18514,18515],{},"编译器提供的构造函数和析构函数是空实现。",[1221,18517,18518,18521],{},[160,18519,18520],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[160,18522,18523,18524,18527],{},"析构函数：主要作用在于对象",[363,18525,18526],{},"销毁前","系统自动调用，执行一些清理工作。",[19,18529,18530,18533],{},[363,18531,18532],{},"构造函数语法：",[200,18534,18535],{},"类名(){}",[157,18537,18538,18541,18544,18547,18550],{},[160,18539,18540],{},"构造函数，没有返回值也不写void",[160,18542,18543],{},"函数名称与类名相同",[160,18545,18546],{},"构造函数可以有参数，因此可以发生重载",[160,18548,18549],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[160,18551,18552,18553,643],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[200,18554,18555],{},"Person(){}",[19,18557,18558,13885,18561],{},[363,18559,18560],{},"析构函数语法：",[200,18562,18563],{},"~类名(){}",[157,18565,18566,18569,18572,18578],{},[160,18567,18568],{},"析构函数，没有返回值也不写void",[160,18570,18571],{},"函数名称与类名相同,在名称前加上符号  ~",[160,18573,18574,18575],{},"析构函数不可以有参数，因此",[363,18576,18577],{},"不可以发生重载",[160,18579,18580],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[194,18582,18584],{"className":196,"code":18583,"language":198,"meta":27,"style":27},"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",[200,18585,18586,18592,18596,18600,18605,18612,18616,18629,18633,18638,18645,18649,18662,18666,18670,18674,18678,18686,18690,18698,18702,18706,18714,18718,18723,18727,18734,18738,18751,18755,18763],{"__ignoreMap":27},[203,18587,18588,18590],{"class":205,"line":206},[203,18589,14784],{"class":209},[203,18591,15261],{"class":2052},[203,18593,18594],{"class":205,"line":124},[203,18595,1635],{"class":213},[203,18597,18598],{"class":205,"line":1269},[203,18599,14806],{"class":209},[203,18601,18602],{"class":205,"line":1284},[203,18603,18604],{"class":272},"    \u002F\u002F构造函数\n",[203,18606,18607,18610],{"class":205,"line":1290},[203,18608,18609],{"class":2052},"    Person",[203,18611,2065],{"class":213},[203,18613,18614],{"class":205,"line":1304},[203,18615,2119],{"class":213},[203,18617,18618,18620,18622,18625,18627],{"class":205,"line":1310},[203,18619,9759],{"class":213},[203,18621,1258],{"class":209},[203,18623,18624],{"class":318}," \"Person的构造函数调用\"",[203,18626,1534],{"class":209},[203,18628,8930],{"class":213},[203,18630,18631],{"class":205,"line":1401},[203,18632,2276],{"class":213},[203,18634,18635],{"class":205,"line":1407},[203,18636,18637],{"class":272},"    \u002F\u002F析构函数\n",[203,18639,18640,18643],{"class":205,"line":1419},[203,18641,18642],{"class":2052},"    ~Person",[203,18644,2065],{"class":213},[203,18646,18647],{"class":205,"line":1701},[203,18648,2119],{"class":213},[203,18650,18651,18653,18655,18658,18660],{"class":205,"line":1706},[203,18652,9759],{"class":213},[203,18654,1258],{"class":209},[203,18656,18657],{"class":318}," \"Person的析构函数调用\"",[203,18659,1534],{"class":209},[203,18661,8930],{"class":213},[203,18663,18664],{"class":205,"line":1712},[203,18665,2276],{"class":213},[203,18667,18668],{"class":205,"line":1717},[203,18669,2489],{"emptyLinePlaceholder":131},[203,18671,18672],{"class":205,"line":1731},[203,18673,4084],{"class":213},[203,18675,18676],{"class":205,"line":1736},[203,18677,2489],{"emptyLinePlaceholder":131},[203,18679,18680,18682,18684],{"class":205,"line":1742},[203,18681,5454],{"class":209},[203,18683,5678],{"class":2052},[203,18685,2065],{"class":213},[203,18687,18688],{"class":205,"line":1763},[203,18689,1635],{"class":213},[203,18691,18692,18695],{"class":205,"line":1768},[203,18693,18694],{"class":213},"    Person p;",[203,18696,18697],{"class":272},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[203,18699,18700],{"class":205,"line":1782},[203,18701,1654],{"class":213},[203,18703,18704],{"class":205,"line":1787},[203,18705,2489],{"emptyLinePlaceholder":131},[203,18707,18708,18710,18712],{"class":205,"line":1816},[203,18709,217],{"class":209},[203,18711,2062],{"class":2052},[203,18713,10943],{"class":213},[203,18715,18716],{"class":205,"line":1821},[203,18717,13300],{"class":213},[203,18719,18720],{"class":205,"line":1838},[203,18721,18722],{"class":272},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[203,18724,18725],{"class":205,"line":1843},[203,18726,2489],{"emptyLinePlaceholder":131},[203,18728,18729,18731],{"class":205,"line":1848},[203,18730,18694],{"class":213},[203,18732,18733],{"class":272},"\u002F\u002F只有构造函数\n",[203,18735,18736],{"class":205,"line":1853},[203,18737,2489],{"emptyLinePlaceholder":131},[203,18739,18740,18742,18744,18746,18748],{"class":205,"line":1867},[203,18741,2392],{"class":2052},[203,18743,214],{"class":213},[203,18745,2397],{"class":318},[203,18747,6056],{"class":213},[203,18749,18750],{"class":272},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[203,18752,18753],{"class":205,"line":1872},[203,18754,2489],{"emptyLinePlaceholder":131},[203,18756,18757,18759,18761],{"class":205,"line":2666},[203,18758,4179],{"class":209},[203,18760,4182],{"class":262},[203,18762,1380],{"class":213},[203,18764,18765],{"class":205,"line":2680},[203,18766,1654],{"class":213},[19,18768,18769],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[174,18771,18773],{"id":18772},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,18775,18776],{},"两种分类方式：",[19,18778,18779],{},"​\t按参数分为： 有参构造和无参构造",[19,18781,18782],{},"​\t按类型分为： 普通构造和拷贝构造",[19,18784,18785],{},"三种调用方式：",[19,18787,18788],{},"​\t括号法",[19,18790,18791],{},"​\t显示法",[19,18793,18794],{},"​\t隐式转换法",[194,18796,18798],{"className":196,"code":18797,"language":198,"meta":27,"style":27},"#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",[200,18799,18800,18806,18816,18821,18826,18831,18836,18840,18848,18852,18856,18860,18866,18870,18883,18887,18899,18903,18912,18925,18929,18933,18939,18943,18956,18960,18965,18981,18985,18990,18999,19012,19016,19022,19026,19031,19039,19043,19048,19052,19060,19064,19069,19074,19079,19084,19089,19093,19098,19103,19108,19113,19117,19122,19127,19143,19155,19160,19164,19169,19174,19179,19183,19188,19202,19215,19219,19227,19231,19237,19243,19251],{"__ignoreMap":27},[203,18801,18802,18804],{"class":205,"line":206},[203,18803,2038],{"class":209},[203,18805,2041],{"class":318},[203,18807,18808,18810,18812,18814],{"class":205,"line":124},[203,18809,2046],{"class":209},[203,18811,2049],{"class":209},[203,18813,2053],{"class":2052},[203,18815,1380],{"class":213},[203,18817,18818],{"class":205,"line":1269},[203,18819,18820],{"class":272},"\u002F\u002F1.构造函数的分类及调用\n",[203,18822,18823],{"class":205,"line":1284},[203,18824,18825],{"class":272},"\u002F\u002F分类\n",[203,18827,18828],{"class":205,"line":1290},[203,18829,18830],{"class":272},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[203,18832,18833],{"class":205,"line":1304},[203,18834,18835],{"class":272},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[203,18837,18838],{"class":205,"line":1310},[203,18839,2489],{"emptyLinePlaceholder":131},[203,18841,18842,18844,18846],{"class":205,"line":1401},[203,18843,14784],{"class":209},[203,18845,15659],{"class":2052},[203,18847,2763],{"class":213},[203,18849,18850],{"class":205,"line":1407},[203,18851,1635],{"class":213},[203,18853,18854],{"class":205,"line":1419},[203,18855,14806],{"class":209},[203,18857,18858],{"class":205,"line":1701},[203,18859,18604],{"class":272},[203,18861,18862,18864],{"class":205,"line":1706},[203,18863,18609],{"class":2052},[203,18865,2065],{"class":213},[203,18867,18868],{"class":205,"line":1712},[203,18869,2119],{"class":213},[203,18871,18872,18874,18876,18879,18881],{"class":205,"line":1717},[203,18873,3540],{"class":213},[203,18875,1258],{"class":209},[203,18877,18878],{"class":318},"\"Person构造函数无参构造\"",[203,18880,1258],{"class":209},[203,18882,1281],{"class":213},[203,18884,18885],{"class":205,"line":1731},[203,18886,2276],{"class":213},[203,18888,18889,18891,18893,18895,18897],{"class":205,"line":1736},[203,18890,18609],{"class":2052},[203,18892,214],{"class":213},[203,18894,217],{"class":209},[203,18896,1488],{"class":5306},[203,18898,220],{"class":213},[203,18900,18901],{"class":205,"line":1742},[203,18902,2119],{"class":213},[203,18904,18905,18908,18910],{"class":205,"line":1763},[203,18906,18907],{"class":213},"        age",[203,18909,259],{"class":209},[203,18911,6287],{"class":213},[203,18913,18914,18916,18918,18921,18923],{"class":205,"line":1768},[203,18915,3540],{"class":213},[203,18917,1258],{"class":209},[203,18919,18920],{"class":318},"\"Person构造函数有参构造\"",[203,18922,1258],{"class":209},[203,18924,1281],{"class":213},[203,18926,18927],{"class":205,"line":1782},[203,18928,2276],{"class":213},[203,18930,18931],{"class":205,"line":1787},[203,18932,18637],{"class":272},[203,18934,18935,18937],{"class":205,"line":1816},[203,18936,18642],{"class":2052},[203,18938,2065],{"class":213},[203,18940,18941],{"class":205,"line":1821},[203,18942,2119],{"class":213},[203,18944,18945,18947,18949,18952,18954],{"class":205,"line":1838},[203,18946,3540],{"class":213},[203,18948,1258],{"class":209},[203,18950,18951],{"class":318},"\"Person析构函数被调用\"",[203,18953,1258],{"class":209},[203,18955,1281],{"class":213},[203,18957,18958],{"class":205,"line":1843},[203,18959,2276],{"class":213},[203,18961,18962],{"class":205,"line":1848},[203,18963,18964],{"class":272},"    \u002F\u002F拷贝构造函数\n",[203,18966,18967,18969,18971,18973,18975,18977,18979],{"class":205,"line":1853},[203,18968,18609],{"class":2052},[203,18970,214],{"class":213},[203,18972,6882],{"class":209},[203,18974,15659],{"class":2052},[203,18976,10674],{"class":209},[203,18978,19],{"class":5306},[203,18980,220],{"class":213},[203,18982,18983],{"class":205,"line":1867},[203,18984,2119],{"class":213},[203,18986,18987],{"class":205,"line":1872},[203,18988,18989],{"class":272},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[203,18991,18992,18994,18996],{"class":205,"line":2666},[203,18993,18907],{"class":213},[203,18995,259],{"class":209},[203,18997,18998],{"class":213},"p.age;\n",[203,19000,19001,19003,19005,19008,19010],{"class":205,"line":2680},[203,19002,3540],{"class":213},[203,19004,1258],{"class":209},[203,19006,19007],{"class":318},"\"Person拷贝构造函数被调用\"",[203,19009,1258],{"class":209},[203,19011,1281],{"class":213},[203,19013,19014],{"class":205,"line":2688},[203,19015,2276],{"class":213},[203,19017,19018,19020],{"class":205,"line":2693},[203,19019,2074],{"class":209},[203,19021,7887],{"class":213},[203,19023,19024],{"class":205,"line":2699},[203,19025,4084],{"class":213},[203,19027,19028],{"class":205,"line":2705},[203,19029,19030],{"class":272},"\u002F\u002F调用\n",[203,19032,19033,19035,19037],{"class":205,"line":2710},[203,19034,5454],{"class":209},[203,19036,5678],{"class":2052},[203,19038,2065],{"class":213},[203,19040,19041],{"class":205,"line":8038},[203,19042,1635],{"class":213},[203,19044,19045],{"class":205,"line":8062},[203,19046,19047],{"class":272},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[203,19049,19050],{"class":205,"line":8067},[203,19051,1654],{"class":213},[203,19053,19054,19056,19058],{"class":205,"line":8073},[203,19055,5454],{"class":209},[203,19057,5747],{"class":2052},[203,19059,2065],{"class":213},[203,19061,19062],{"class":205,"line":8100},[203,19063,1635],{"class":213},[203,19065,19066],{"class":205,"line":8105},[203,19067,19068],{"class":272},"    \u002F\u002F1.括号法\n",[203,19070,19071],{"class":205,"line":8111},[203,19072,19073],{"class":272},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[203,19075,19076],{"class":205,"line":8123},[203,19077,19078],{"class":272},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[203,19080,19081],{"class":205,"line":8135},[203,19082,19083],{"class":272},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[203,19085,19086],{"class":205,"line":8147},[203,19087,19088],{"class":272},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[203,19090,19091],{"class":205,"line":9806},[203,19092,2489],{"emptyLinePlaceholder":131},[203,19094,19095],{"class":205,"line":9831},[203,19096,19097],{"class":272},"    \u002F\u002F注意事项\n",[203,19099,19100],{"class":205,"line":9854},[203,19101,19102],{"class":272},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[203,19104,19105],{"class":205,"line":9878},[203,19106,19107],{"class":272},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[203,19109,19110],{"class":205,"line":9883},[203,19111,19112],{"class":272},"    \u002F\u002F Person p4();\n",[203,19114,19115],{"class":205,"line":9888},[203,19116,2489],{"emptyLinePlaceholder":131},[203,19118,19119],{"class":205,"line":9893},[203,19120,19121],{"class":272},"    \u002F\u002F2.显示法\n",[203,19123,19124],{"class":205,"line":9902},[203,19125,19126],{"class":213},"    Person p1;\n",[203,19128,19129,19132,19134,19137,19139,19141],{"class":205,"line":9907},[203,19130,19131],{"class":213},"    Person p2",[203,19133,259],{"class":209},[203,19135,19136],{"class":2052},"Person",[203,19138,214],{"class":213},[203,19140,660],{"class":262},[203,19142,2808],{"class":213},[203,19144,19145,19148,19150,19152],{"class":205,"line":9913},[203,19146,19147],{"class":213},"    Person p3",[203,19149,259],{"class":209},[203,19151,19136],{"class":2052},[203,19153,19154],{"class":213},"(p2);\n",[203,19156,19157],{"class":205,"line":9934},[203,19158,19159],{"class":272},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[203,19161,19162],{"class":205,"line":9940},[203,19163,2489],{"emptyLinePlaceholder":131},[203,19165,19166],{"class":205,"line":9954},[203,19167,19168],{"class":272},"    \u002F\u002F 注意事项2\n",[203,19170,19171],{"class":205,"line":9960},[203,19172,19173],{"class":272},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[203,19175,19176],{"class":205,"line":9987},[203,19177,19178],{"class":272},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[203,19180,19181],{"class":205,"line":9996},[203,19182,2489],{"emptyLinePlaceholder":131},[203,19184,19185],{"class":205,"line":10002},[203,19186,19187],{"class":272},"    \u002F\u002F3.隐士转换法\n",[203,19189,19190,19193,19195,19197,19199],{"class":205,"line":10010},[203,19191,19192],{"class":213},"    Person p4",[203,19194,259],{"class":209},[203,19196,660],{"class":262},[203,19198,269],{"class":213},[203,19200,19201],{"class":272},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[203,19203,19204,19207,19209,19212],{"class":205,"line":10015},[203,19205,19206],{"class":213},"    Person p5",[203,19208,259],{"class":209},[203,19210,19211],{"class":213},"p4;",[203,19213,19214],{"class":272}," \u002F\u002F 这里会调用拷贝构造函数\n",[203,19216,19217],{"class":205,"line":16694},[203,19218,1654],{"class":213},[203,19220,19221,19223,19225],{"class":205,"line":16700},[203,19222,217],{"class":209},[203,19224,2062],{"class":2052},[203,19226,2065],{"class":213},[203,19228,19229],{"class":205,"line":16723},[203,19230,1635],{"class":213},[203,19232,19233,19235],{"class":205,"line":16729},[203,19234,5723],{"class":2052},[203,19236,5726],{"class":213},[203,19238,19239,19241],{"class":205,"line":16752},[203,19240,5792],{"class":2052},[203,19242,5726],{"class":213},[203,19244,19245,19247,19249],{"class":205,"line":16766},[203,19246,4179],{"class":209},[203,19248,4182],{"class":262},[203,19250,1380],{"class":213},[203,19252,19253],{"class":205,"line":16786},[203,19254,1654],{"class":213},[19,19256,19257,19260],{},[363,19258,19259],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[174,19262,19264],{"id":19263},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19266,19267],{},"C++中拷贝构造函数调用时机通常有三种情况",[1221,19269,19270,19273,19276],{},[160,19271,19272],{},"使用一个已经创建完毕的对象来初始化一个新对象",[160,19274,19275],{},"值传递的方式给函数参数传值",[160,19277,19278],{},"以值方式返回局部对象",[194,19280,19282],{"className":196,"code":19281,"language":198,"meta":27,"style":27},"#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",[200,19283,19284,19290,19300,19304,19309,19313,19318,19323,19328,19334,19338,19342,19348,19352,19365,19369,19374,19386,19390,19398,19411,19415,19419,19435,19439,19448,19461,19465,19471,19475,19487,19491,19497,19501,19505,19513,19517,19530,19538,19556,19560,19565,19570,19585,19589,19602,19606,19614,19618,19622,19630,19634,19639,19648,19652,19656,19681,19691,19695,19703,19707,19718,19743,19747,19751,19755,19763,19767,19772,19777,19784,19789,19794,19799,19804,19808,19813,19817,19822,19826,19831,19836,19840,19844,19849,19854,19862],{"__ignoreMap":27},[203,19285,19286,19288],{"class":205,"line":206},[203,19287,2038],{"class":209},[203,19289,2041],{"class":318},[203,19291,19292,19294,19296,19298],{"class":205,"line":124},[203,19293,2046],{"class":209},[203,19295,2049],{"class":209},[203,19297,2053],{"class":2052},[203,19299,1380],{"class":213},[203,19301,19302],{"class":205,"line":1269},[203,19303,2489],{"emptyLinePlaceholder":131},[203,19305,19306],{"class":205,"line":1284},[203,19307,19308],{"class":272},"\u002F\u002F拷贝构造函数调用时机\n",[203,19310,19311],{"class":205,"line":1290},[203,19312,2489],{"emptyLinePlaceholder":131},[203,19314,19315],{"class":205,"line":1304},[203,19316,19317],{"class":272},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[203,19319,19320],{"class":205,"line":1310},[203,19321,19322],{"class":272},"\u002F\u002F2.值传递的方式给函数参数传值\n",[203,19324,19325],{"class":205,"line":1401},[203,19326,19327],{"class":272},"\u002F\u002F3.以值方式返回局部对象\n",[203,19329,19330,19332],{"class":205,"line":1407},[203,19331,14784],{"class":209},[203,19333,15261],{"class":2052},[203,19335,19336],{"class":205,"line":1419},[203,19337,1635],{"class":213},[203,19339,19340],{"class":205,"line":1701},[203,19341,14806],{"class":209},[203,19343,19344,19346],{"class":205,"line":1706},[203,19345,18609],{"class":2052},[203,19347,2065],{"class":213},[203,19349,19350],{"class":205,"line":1712},[203,19351,2119],{"class":213},[203,19353,19354,19356,19358,19361,19363],{"class":205,"line":1717},[203,19355,9759],{"class":213},[203,19357,1258],{"class":209},[203,19359,19360],{"class":318}," \"Person的默认构造函数调用\"",[203,19362,1534],{"class":209},[203,19364,8930],{"class":213},[203,19366,19367],{"class":205,"line":1731},[203,19368,2276],{"class":213},[203,19370,19371],{"class":205,"line":1736},[203,19372,19373],{"class":272},"    \u002F\u002F有参构造\n",[203,19375,19376,19378,19380,19382,19384],{"class":205,"line":1742},[203,19377,18609],{"class":2052},[203,19379,214],{"class":213},[203,19381,217],{"class":209},[203,19383,15779],{"class":5306},[203,19385,220],{"class":213},[203,19387,19388],{"class":205,"line":1763},[203,19389,2119],{"class":213},[203,19391,19392,19394,19396],{"class":205,"line":1768},[203,19393,15833],{"class":213},[203,19395,259],{"class":209},[203,19397,7887],{"class":213},[203,19399,19400,19402,19404,19407,19409],{"class":205,"line":1782},[203,19401,9759],{"class":213},[203,19403,1258],{"class":209},[203,19405,19406],{"class":318}," \"Person的有参构造函数调用\"",[203,19408,1534],{"class":209},[203,19410,8930],{"class":213},[203,19412,19413],{"class":205,"line":1787},[203,19414,2276],{"class":213},[203,19416,19417],{"class":205,"line":1816},[203,19418,18964],{"class":272},[203,19420,19421,19423,19425,19427,19429,19431,19433],{"class":205,"line":1821},[203,19422,18609],{"class":2052},[203,19424,214],{"class":213},[203,19426,6882],{"class":209},[203,19428,15659],{"class":2052},[203,19430,10674],{"class":209},[203,19432,19],{"class":5306},[203,19434,220],{"class":213},[203,19436,19437],{"class":205,"line":1838},[203,19438,2119],{"class":213},[203,19440,19441,19443,19445],{"class":205,"line":1843},[203,19442,15833],{"class":213},[203,19444,259],{"class":209},[203,19446,19447],{"class":213}," p.m_Age;\n",[203,19449,19450,19452,19454,19457,19459],{"class":205,"line":1848},[203,19451,9759],{"class":213},[203,19453,1258],{"class":209},[203,19455,19456],{"class":318}," \"Person的拷贝构造函数调用\"",[203,19458,1534],{"class":209},[203,19460,8930],{"class":213},[203,19462,19463],{"class":205,"line":1853},[203,19464,2276],{"class":213},[203,19466,19467,19469],{"class":205,"line":1867},[203,19468,18642],{"class":2052},[203,19470,2065],{"class":213},[203,19472,19473],{"class":205,"line":1872},[203,19474,2119],{"class":213},[203,19476,19477,19479,19481,19483,19485],{"class":205,"line":2666},[203,19478,9759],{"class":213},[203,19480,1258],{"class":209},[203,19482,18657],{"class":318},[203,19484,1534],{"class":209},[203,19486,8930],{"class":213},[203,19488,19489],{"class":205,"line":2680},[203,19490,2276],{"class":213},[203,19492,19493,19495],{"class":205,"line":2688},[203,19494,2074],{"class":209},[203,19496,15756],{"class":213},[203,19498,19499],{"class":205,"line":2693},[203,19500,4084],{"class":213},[203,19502,19503],{"class":205,"line":2699},[203,19504,19317],{"class":272},[203,19506,19507,19509,19511],{"class":205,"line":2705},[203,19508,5454],{"class":209},[203,19510,5678],{"class":2052},[203,19512,2065],{"class":213},[203,19514,19515],{"class":205,"line":2710},[203,19516,1635],{"class":213},[203,19518,19519,19522,19524,19526,19528],{"class":205,"line":8038},[203,19520,19521],{"class":213},"    Person ",[203,19523,7220],{"class":2052},[203,19525,214],{"class":213},[203,19527,914],{"class":262},[203,19529,2808],{"class":213},[203,19531,19532,19534,19536],{"class":205,"line":8062},[203,19533,19521],{"class":213},[203,19535,7123],{"class":2052},[203,19537,17605],{"class":213},[203,19539,19540,19542,19544,19547,19549,19552,19554],{"class":205,"line":8067},[203,19541,1640],{"class":213},[203,19543,1258],{"class":209},[203,19545,19546],{"class":318},"\"P2的年龄为：\"",[203,19548,1258],{"class":209},[203,19550,19551],{"class":213},"p2.m_Age",[203,19553,1258],{"class":209},[203,19555,1281],{"class":213},[203,19557,19558],{"class":205,"line":8073},[203,19559,1654],{"class":213},[203,19561,19562],{"class":205,"line":8100},[203,19563,19564],{"class":272},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[203,19566,19567],{"class":205,"line":8105},[203,19568,19569],{"class":272},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[203,19571,19572,19574,19577,19579,19581,19583],{"class":205,"line":8111},[203,19573,5454],{"class":209},[203,19575,19576],{"class":2052}," doWork",[203,19578,214],{"class":213},[203,19580,19136],{"class":2052},[203,19582,6915],{"class":5306},[203,19584,220],{"class":213},[203,19586,19587],{"class":205,"line":8123},[203,19588,1635],{"class":213},[203,19590,19591,19593,19595,19598,19600],{"class":205,"line":8135},[203,19592,6619],{"class":213},[203,19594,1258],{"class":209},[203,19596,19597],{"class":318}," \"doWork函数调用\"",[203,19599,1534],{"class":209},[203,19601,8930],{"class":213},[203,19603,19604],{"class":205,"line":8147},[203,19605,1654],{"class":213},[203,19607,19608,19610,19612],{"class":205,"line":9806},[203,19609,5454],{"class":209},[203,19611,5747],{"class":2052},[203,19613,2065],{"class":213},[203,19615,19616],{"class":205,"line":9831},[203,19617,1635],{"class":213},[203,19619,19620],{"class":205,"line":9854},[203,19621,15403],{"class":213},[203,19623,19624,19627],{"class":205,"line":9878},[203,19625,19626],{"class":2052},"    doWork",[203,19628,19629],{"class":213},"(p);\n",[203,19631,19632],{"class":205,"line":9883},[203,19633,1654],{"class":213},[203,19635,19636],{"class":205,"line":9888},[203,19637,19638],{"class":272},"\u002F\u002F 3.以值方式返回局部对象\n",[203,19640,19641,19643,19646],{"class":205,"line":9893},[203,19642,19136],{"class":2052},[203,19644,19645],{"class":2052}," doWork2",[203,19647,2065],{"class":213},[203,19649,19650],{"class":205,"line":9902},[203,19651,1635],{"class":213},[203,19653,19654],{"class":205,"line":9907},[203,19655,19126],{"class":213},[203,19657,19658,19660,19662,19664,19666,19668,19670,19672,19674,19676,19678],{"class":205,"line":9913},[203,19659,1640],{"class":213},[203,19661,1258],{"class":209},[203,19663,214],{"class":213},[203,19665,217],{"class":209},[203,19667,6608],{"class":209},[203,19669,643],{"class":213},[203,19671,567],{"class":209},[203,19673,7220],{"class":213},[203,19675,1258],{"class":209},[203,19677,1328],{"class":213},[203,19679,19680],{"class":272},"\u002F\u002F打印p1的地址\n",[203,19682,19683,19685,19688],{"class":205,"line":9934},[203,19684,4179],{"class":209},[203,19686,19687],{"class":213}," p1;",[203,19689,19690],{"class":272},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[203,19692,19693],{"class":205,"line":9940},[203,19694,1654],{"class":213},[203,19696,19697,19699,19701],{"class":205,"line":9954},[203,19698,5454],{"class":209},[203,19700,5819],{"class":2052},[203,19702,2065],{"class":213},[203,19704,19705],{"class":205,"line":9960},[203,19706,1635],{"class":213},[203,19708,19709,19712,19714,19716],{"class":205,"line":9987},[203,19710,19711],{"class":213},"    Person p ",[203,19713,259],{"class":209},[203,19715,19645],{"class":2052},[203,19717,5726],{"class":213},[203,19719,19720,19722,19724,19726,19728,19730,19732,19734,19736,19738,19740],{"class":205,"line":9996},[203,19721,1640],{"class":213},[203,19723,1258],{"class":209},[203,19725,214],{"class":213},[203,19727,217],{"class":209},[203,19729,6608],{"class":209},[203,19731,643],{"class":213},[203,19733,567],{"class":209},[203,19735,19],{"class":213},[203,19737,1258],{"class":209},[203,19739,1328],{"class":213},[203,19741,19742],{"class":272},"\u002F\u002F打印p的地址\n",[203,19744,19745],{"class":205,"line":10002},[203,19746,1654],{"class":213},[203,19748,19749],{"class":205,"line":10010},[203,19750,2489],{"emptyLinePlaceholder":131},[203,19752,19753],{"class":205,"line":10015},[203,19754,2489],{"emptyLinePlaceholder":131},[203,19756,19757,19759,19761],{"class":205,"line":16694},[203,19758,217],{"class":209},[203,19760,2062],{"class":2052},[203,19762,2065],{"class":213},[203,19764,19765],{"class":205,"line":16700},[203,19766,1635],{"class":213},[203,19768,19769],{"class":205,"line":16723},[203,19770,19771],{"class":272},"    \u002F\u002F test01();\n",[203,19773,19774],{"class":205,"line":16729},[203,19775,19776],{"class":272},"    \u002F\u002F test02();\n",[203,19778,19779,19782],{"class":205,"line":16752},[203,19780,19781],{"class":2052},"    test03",[203,19783,5726],{"class":213},[203,19785,19786],{"class":205,"line":16766},[203,19787,19788],{"class":272},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[203,19790,19791],{"class":205,"line":16786},[203,19792,19793],{"class":272},"\u002F\u002F 输出结果如下：\n",[203,19795,19796],{"class":205,"line":16792},[203,19797,19798],{"class":272},"\u002F\u002F Person的默认构造函数调用\n",[203,19800,19801],{"class":205,"line":16803},[203,19802,19803],{"class":272},"\u002F\u002F 0x7fffffffceec\n",[203,19805,19806],{"class":205,"line":16826},[203,19807,19803],{"class":272},[203,19809,19810],{"class":205,"line":16848},[203,19811,19812],{"class":272},"\u002F\u002F Person的析构函数调用\n",[203,19814,19815],{"class":205,"line":16853},[203,19816,2489],{"emptyLinePlaceholder":131},[203,19818,19819],{"class":205,"line":16859},[203,19820,19821],{"class":272},"\u002F\u002F 之前的输出结果如下：\n",[203,19823,19824],{"class":205,"line":16873},[203,19825,19798],{"class":272},[203,19827,19828],{"class":205,"line":16886},[203,19829,19830],{"class":272},"\u002F\u002F 地址\n",[203,19832,19833],{"class":205,"line":16891},[203,19834,19835],{"class":272},"\u002F\u002F Person的拷贝构造函数调用\n",[203,19837,19838],{"class":205,"line":16905},[203,19839,19812],{"class":272},[203,19841,19842],{"class":205,"line":16910},[203,19843,19830],{"class":272},[203,19845,19846],{"class":205,"line":16916},[203,19847,19848],{"class":272},"\u002F\u002F (这两次输出的地址也是不同的) \n",[203,19850,19851],{"class":205,"line":16921},[203,19852,19853],{"class":272},"\u002F\u002F Person的析构函数调用     \n",[203,19855,19856,19858,19860],{"class":205,"line":16935},[203,19857,4179],{"class":209},[203,19859,4182],{"class":262},[203,19861,1380],{"class":213},[203,19863,19864],{"class":205,"line":16940},[203,19865,1654],{"class":213},[19,19867,19868],{},"简化版理解",[194,19870,19872],{"className":196,"code":19871,"language":198,"meta":27,"style":27},"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",[200,19873,19874,19882,19886,19892,19905,19916,19920,19932,19945,19953,19957,19973,19986,19995,19999,20004,20010,20023,20027,20031,20038,20042,20046,20051,20059,20063,20079,20092,20105,20109,20114,20122,20126,20130,20135,20140,20156,20164,20171,20177,20181,20185,20190,20198,20202,20206,20229,20236,20240,20244,20252,20256,20266,20288,20292,20296,20300,20308,20312,20317,20322,20328,20332,20342,20346,20354],{"__ignoreMap":27},[203,19875,19876,19878,19880],{"class":205,"line":206},[203,19877,14784],{"class":209},[203,19879,15659],{"class":2052},[203,19881,15662],{"class":213},[203,19883,19884],{"class":205,"line":124},[203,19885,14806],{"class":209},[203,19887,19888,19890],{"class":205,"line":1269},[203,19889,18609],{"class":2052},[203,19891,10943],{"class":213},[203,19893,19894,19896,19898,19901,19903],{"class":205,"line":1284},[203,19895,9759],{"class":213},[203,19897,1258],{"class":209},[203,19899,19900],{"class":318}," \"无参构造函数!\"",[203,19902,1534],{"class":209},[203,19904,8930],{"class":213},[203,19906,19907,19910,19912,19914],{"class":205,"line":1290},[203,19908,19909],{"class":213},"        mAge ",[203,19911,259],{"class":209},[203,19913,4182],{"class":262},[203,19915,1380],{"class":213},[203,19917,19918],{"class":205,"line":1304},[203,19919,2276],{"class":213},[203,19921,19922,19924,19926,19928,19930],{"class":205,"line":1310},[203,19923,18609],{"class":2052},[203,19925,214],{"class":213},[203,19927,217],{"class":209},[203,19929,15779],{"class":5306},[203,19931,12532],{"class":213},[203,19933,19934,19936,19938,19941,19943],{"class":205,"line":1401},[203,19935,9759],{"class":213},[203,19937,1258],{"class":209},[203,19939,19940],{"class":318}," \"有参构造函数!\"",[203,19942,1534],{"class":209},[203,19944,8930],{"class":213},[203,19946,19947,19949,19951],{"class":205,"line":1407},[203,19948,19909],{"class":213},[203,19950,259],{"class":209},[203,19952,7887],{"class":213},[203,19954,19955],{"class":205,"line":1419},[203,19956,2276],{"class":213},[203,19958,19959,19961,19963,19965,19967,19969,19971],{"class":205,"line":1701},[203,19960,18609],{"class":2052},[203,19962,214],{"class":213},[203,19964,6882],{"class":209},[203,19966,15659],{"class":2052},[203,19968,567],{"class":209},[203,19970,6915],{"class":5306},[203,19972,12532],{"class":213},[203,19974,19975,19977,19979,19982,19984],{"class":205,"line":1706},[203,19976,9759],{"class":213},[203,19978,1258],{"class":209},[203,19980,19981],{"class":318}," \"拷贝构造函数!\"",[203,19983,1534],{"class":209},[203,19985,8930],{"class":213},[203,19987,19988,19990,19992],{"class":205,"line":1712},[203,19989,19909],{"class":213},[203,19991,259],{"class":209},[203,19993,19994],{"class":213}," p.mAge;\n",[203,19996,19997],{"class":205,"line":1717},[203,19998,2276],{"class":213},[203,20000,20001],{"class":205,"line":1731},[203,20002,20003],{"class":272},"    \u002F\u002F析构函数在释放内存之前调用\n",[203,20005,20006,20008],{"class":205,"line":1736},[203,20007,18642],{"class":2052},[203,20009,10943],{"class":213},[203,20011,20012,20014,20016,20019,20021],{"class":205,"line":1742},[203,20013,9759],{"class":213},[203,20015,1258],{"class":209},[203,20017,20018],{"class":318}," \"析构函数!\"",[203,20020,1534],{"class":209},[203,20022,8930],{"class":213},[203,20024,20025],{"class":205,"line":1763},[203,20026,2276],{"class":213},[203,20028,20029],{"class":205,"line":1768},[203,20030,14806],{"class":209},[203,20032,20033,20035],{"class":205,"line":1782},[203,20034,2074],{"class":209},[203,20036,20037],{"class":213}," mAge;\n",[203,20039,20040],{"class":205,"line":1787},[203,20041,4084],{"class":213},[203,20043,20044],{"class":205,"line":1816},[203,20045,2489],{"emptyLinePlaceholder":131},[203,20047,20048],{"class":205,"line":1821},[203,20049,20050],{"class":272},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[203,20052,20053,20055,20057],{"class":205,"line":1838},[203,20054,5454],{"class":209},[203,20056,5678],{"class":2052},[203,20058,10943],{"class":213},[203,20060,20061],{"class":205,"line":1843},[203,20062,2489],{"emptyLinePlaceholder":131},[203,20064,20065,20067,20070,20072,20074,20076],{"class":205,"line":1848},[203,20066,19521],{"class":213},[203,20068,20069],{"class":2052},"man",[203,20071,214],{"class":213},[203,20073,525],{"class":262},[203,20075,6056],{"class":213},[203,20077,20078],{"class":272}," \u002F\u002Fp对象已经创建完毕\n",[203,20080,20081,20083,20086,20089],{"class":205,"line":1853},[203,20082,19521],{"class":213},[203,20084,20085],{"class":2052},"newman",[203,20087,20088],{"class":213},"(man);",[203,20090,20091],{"class":272}," \u002F\u002F调用拷贝构造函数\n",[203,20093,20094,20097,20099,20102],{"class":205,"line":1867},[203,20095,20096],{"class":213},"    Person newman2 ",[203,20098,259],{"class":209},[203,20100,20101],{"class":213}," man;",[203,20103,20104],{"class":272}," \u002F\u002F拷贝构造\n",[203,20106,20107],{"class":205,"line":1872},[203,20108,2489],{"emptyLinePlaceholder":131},[203,20110,20111],{"class":205,"line":2666},[203,20112,20113],{"class":272},"    \u002F\u002FPerson newman3;\n",[203,20115,20116,20119],{"class":205,"line":2680},[203,20117,20118],{"class":272},"    \u002F\u002Fnewman3 = man;",[203,20120,20121],{"class":272}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[203,20123,20124],{"class":205,"line":2688},[203,20125,1654],{"class":213},[203,20127,20128],{"class":205,"line":2693},[203,20129,2489],{"emptyLinePlaceholder":131},[203,20131,20132],{"class":205,"line":2699},[203,20133,20134],{"class":272},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[203,20136,20137],{"class":205,"line":2705},[203,20138,20139],{"class":272},"\u002F\u002F相当于Person p1 = p;\n",[203,20141,20142,20144,20146,20148,20150,20153],{"class":205,"line":2710},[203,20143,5454],{"class":209},[203,20145,19576],{"class":2052},[203,20147,214],{"class":213},[203,20149,19136],{"class":2052},[203,20151,20152],{"class":5306}," p1",[203,20154,20155],{"class":213},") {}\n",[203,20157,20158,20160,20162],{"class":205,"line":8038},[203,20159,5454],{"class":209},[203,20161,5747],{"class":2052},[203,20163,10943],{"class":213},[203,20165,20166,20168],{"class":205,"line":8062},[203,20167,18694],{"class":213},[203,20169,20170],{"class":272}," \u002F\u002F无参构造函数\n",[203,20172,20173,20175],{"class":205,"line":8067},[203,20174,19626],{"class":2052},[203,20176,19629],{"class":213},[203,20178,20179],{"class":205,"line":8073},[203,20180,1654],{"class":213},[203,20182,20183],{"class":205,"line":8100},[203,20184,2489],{"emptyLinePlaceholder":131},[203,20186,20187],{"class":205,"line":8105},[203,20188,20189],{"class":272},"\u002F\u002F3. 以值方式返回局部对象\n",[203,20191,20192,20194,20196],{"class":205,"line":8111},[203,20193,19136],{"class":2052},[203,20195,19645],{"class":2052},[203,20197,2065],{"class":213},[203,20199,20200],{"class":205,"line":8123},[203,20201,1635],{"class":213},[203,20203,20204],{"class":205,"line":8135},[203,20205,19126],{"class":213},[203,20207,20208,20210,20212,20214,20216,20218,20220,20222,20225,20227],{"class":205,"line":8147},[203,20209,6619],{"class":213},[203,20211,1258],{"class":209},[203,20213,1747],{"class":213},[203,20215,217],{"class":209},[203,20217,6608],{"class":209},[203,20219,643],{"class":213},[203,20221,567],{"class":209},[203,20223,20224],{"class":213},"p1 ",[203,20226,1258],{"class":209},[203,20228,8930],{"class":213},[203,20230,20231,20233],{"class":205,"line":9806},[203,20232,4179],{"class":209},[203,20234,20235],{"class":213}," p1;\n",[203,20237,20238],{"class":205,"line":9831},[203,20239,1654],{"class":213},[203,20241,20242],{"class":205,"line":9854},[203,20243,2489],{"emptyLinePlaceholder":131},[203,20245,20246,20248,20250],{"class":205,"line":9878},[203,20247,5454],{"class":209},[203,20249,5819],{"class":2052},[203,20251,2065],{"class":213},[203,20253,20254],{"class":205,"line":9883},[203,20255,1635],{"class":213},[203,20257,20258,20260,20262,20264],{"class":205,"line":9888},[203,20259,19711],{"class":213},[203,20261,259],{"class":209},[203,20263,19645],{"class":2052},[203,20265,5726],{"class":213},[203,20267,20268,20270,20272,20274,20276,20278,20280,20282,20284,20286],{"class":205,"line":9893},[203,20269,6619],{"class":213},[203,20271,1258],{"class":209},[203,20273,1747],{"class":213},[203,20275,217],{"class":209},[203,20277,6608],{"class":209},[203,20279,643],{"class":213},[203,20281,567],{"class":209},[203,20283,11538],{"class":213},[203,20285,1258],{"class":209},[203,20287,8930],{"class":213},[203,20289,20290],{"class":205,"line":9902},[203,20291,1654],{"class":213},[203,20293,20294],{"class":205,"line":9907},[203,20295,2489],{"emptyLinePlaceholder":131},[203,20297,20298],{"class":205,"line":9913},[203,20299,2489],{"emptyLinePlaceholder":131},[203,20301,20302,20304,20306],{"class":205,"line":9934},[203,20303,217],{"class":209},[203,20305,2062],{"class":2052},[203,20307,10943],{"class":213},[203,20309,20310],{"class":205,"line":9940},[203,20311,2489],{"emptyLinePlaceholder":131},[203,20313,20314],{"class":205,"line":9954},[203,20315,20316],{"class":272},"    \u002F\u002Ftest01();\n",[203,20318,20319],{"class":205,"line":9960},[203,20320,20321],{"class":272},"    \u002F\u002Ftest02();\n",[203,20323,20324,20326],{"class":205,"line":9987},[203,20325,19781],{"class":2052},[203,20327,5726],{"class":213},[203,20329,20330],{"class":205,"line":9996},[203,20331,2489],{"emptyLinePlaceholder":131},[203,20333,20334,20336,20338,20340],{"class":205,"line":10002},[203,20335,2392],{"class":2052},[203,20337,214],{"class":213},[203,20339,2397],{"class":318},[203,20341,2808],{"class":213},[203,20343,20344],{"class":205,"line":10010},[203,20345,2489],{"emptyLinePlaceholder":131},[203,20347,20348,20350,20352],{"class":205,"line":10015},[203,20349,4179],{"class":209},[203,20351,4182],{"class":262},[203,20353,1380],{"class":213},[203,20355,20356],{"class":205,"line":16694},[203,20357,1654],{"class":213},[174,20359,20361],{"id":20360},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20363,20364],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20366,20367],{},"1．默认构造函数(无参，函数体为空)",[19,20369,20370],{},"2．默认析构函数(无参，函数体为空)",[19,20372,20373],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,20375,20376],{},"构造函数调用规则如下：",[1221,20378,20379,20382],{},[160,20380,20381],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[160,20383,20384],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[194,20386,20388],{"className":196,"code":20387,"language":198,"meta":27,"style":27},"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",[200,20389,20390,20398,20402,20407,20413,20425,20429,20434,20446,20455,20467,20471,20475,20491,20500,20512,20516,20520,20526,20538,20542,20546,20552,20556,20560,20568,20572,20584,20589,20597,20601,20619,20623,20627,20635,20639,20644,20652,20667,20680,20684,20689,20696,20712,20725,20729,20733,20741,20745,20751,20755,20765,20769,20777],{"__ignoreMap":27},[203,20391,20392,20394,20396],{"class":205,"line":206},[203,20393,14784],{"class":209},[203,20395,15659],{"class":2052},[203,20397,15662],{"class":213},[203,20399,20400],{"class":205,"line":124},[203,20401,14806],{"class":209},[203,20403,20404],{"class":205,"line":1269},[203,20405,20406],{"class":272},"    \u002F\u002F无参（默认）构造函数\n",[203,20408,20409,20411],{"class":205,"line":1284},[203,20410,18609],{"class":2052},[203,20412,10943],{"class":213},[203,20414,20415,20417,20419,20421,20423],{"class":205,"line":1290},[203,20416,9759],{"class":213},[203,20418,1258],{"class":209},[203,20420,19900],{"class":318},[203,20422,1534],{"class":209},[203,20424,8930],{"class":213},[203,20426,20427],{"class":205,"line":1304},[203,20428,2276],{"class":213},[203,20430,20431],{"class":205,"line":1310},[203,20432,20433],{"class":272},"    \u002F\u002F有参构造函数\n",[203,20435,20436,20438,20440,20442,20444],{"class":205,"line":1401},[203,20437,18609],{"class":2052},[203,20439,214],{"class":213},[203,20441,217],{"class":209},[203,20443,1488],{"class":5306},[203,20445,12532],{"class":213},[203,20447,20448,20451,20453],{"class":205,"line":1407},[203,20449,20450],{"class":213},"        age ",[203,20452,259],{"class":209},[203,20454,1522],{"class":213},[203,20456,20457,20459,20461,20463,20465],{"class":205,"line":1419},[203,20458,9759],{"class":213},[203,20460,1258],{"class":209},[203,20462,19940],{"class":318},[203,20464,1534],{"class":209},[203,20466,8930],{"class":213},[203,20468,20469],{"class":205,"line":1701},[203,20470,2276],{"class":213},[203,20472,20473],{"class":205,"line":1706},[203,20474,18964],{"class":272},[203,20476,20477,20479,20481,20483,20485,20487,20489],{"class":205,"line":1712},[203,20478,18609],{"class":2052},[203,20480,214],{"class":213},[203,20482,6882],{"class":209},[203,20484,15659],{"class":2052},[203,20486,567],{"class":209},[203,20488,6915],{"class":5306},[203,20490,12532],{"class":213},[203,20492,20493,20495,20497],{"class":205,"line":1717},[203,20494,20450],{"class":213},[203,20496,259],{"class":209},[203,20498,20499],{"class":213}," p.age;\n",[203,20501,20502,20504,20506,20508,20510],{"class":205,"line":1731},[203,20503,9759],{"class":213},[203,20505,1258],{"class":209},[203,20507,19981],{"class":318},[203,20509,1534],{"class":209},[203,20511,8930],{"class":213},[203,20513,20514],{"class":205,"line":1736},[203,20515,2276],{"class":213},[203,20517,20518],{"class":205,"line":1742},[203,20519,18637],{"class":272},[203,20521,20522,20524],{"class":205,"line":1763},[203,20523,18642],{"class":2052},[203,20525,10943],{"class":213},[203,20527,20528,20530,20532,20534,20536],{"class":205,"line":1768},[203,20529,9759],{"class":213},[203,20531,1258],{"class":209},[203,20533,20018],{"class":318},[203,20535,1534],{"class":209},[203,20537,8930],{"class":213},[203,20539,20540],{"class":205,"line":1782},[203,20541,2276],{"class":213},[203,20543,20544],{"class":205,"line":1787},[203,20545,14806],{"class":209},[203,20547,20548,20550],{"class":205,"line":1816},[203,20549,2074],{"class":209},[203,20551,7887],{"class":213},[203,20553,20554],{"class":205,"line":1821},[203,20555,4084],{"class":213},[203,20557,20558],{"class":205,"line":1838},[203,20559,2489],{"emptyLinePlaceholder":131},[203,20561,20562,20564,20566],{"class":205,"line":1843},[203,20563,5454],{"class":209},[203,20565,5678],{"class":2052},[203,20567,2065],{"class":213},[203,20569,20570],{"class":205,"line":1848},[203,20571,1635],{"class":213},[203,20573,20574,20576,20578,20580,20582],{"class":205,"line":1853},[203,20575,19521],{"class":213},[203,20577,7220],{"class":2052},[203,20579,214],{"class":213},[203,20581,864],{"class":262},[203,20583,2808],{"class":213},[203,20585,20586],{"class":205,"line":1867},[203,20587,20588],{"class":272},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[203,20590,20591,20593,20595],{"class":205,"line":1872},[203,20592,19521],{"class":213},[203,20594,7123],{"class":2052},[203,20596,17605],{"class":213},[203,20598,20599],{"class":205,"line":2666},[203,20600,2489],{"emptyLinePlaceholder":131},[203,20602,20603,20605,20607,20610,20612,20615,20617],{"class":205,"line":2680},[203,20604,6619],{"class":213},[203,20606,1258],{"class":209},[203,20608,20609],{"class":318}," \"p2的年龄为： \"",[203,20611,1534],{"class":209},[203,20613,20614],{"class":213}," p2.age ",[203,20616,1258],{"class":209},[203,20618,8930],{"class":213},[203,20620,20621],{"class":205,"line":2688},[203,20622,1654],{"class":213},[203,20624,20625],{"class":205,"line":2693},[203,20626,2489],{"emptyLinePlaceholder":131},[203,20628,20629,20631,20633],{"class":205,"line":2699},[203,20630,5454],{"class":209},[203,20632,5747],{"class":2052},[203,20634,2065],{"class":213},[203,20636,20637],{"class":205,"line":2705},[203,20638,1635],{"class":213},[203,20640,20641],{"class":205,"line":2710},[203,20642,20643],{"class":272},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[203,20645,20646,20649],{"class":205,"line":8038},[203,20647,20648],{"class":213},"    Person p1;",[203,20650,20651],{"class":272}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[203,20653,20654,20656,20658,20660,20662,20664],{"class":205,"line":8062},[203,20655,19521],{"class":213},[203,20657,7123],{"class":2052},[203,20659,214],{"class":213},[203,20661,660],{"class":262},[203,20663,6056],{"class":213},[203,20665,20666],{"class":272}," \u002F\u002F用户提供的有参\n",[203,20668,20669,20671,20674,20677],{"class":205,"line":8067},[203,20670,19521],{"class":213},[203,20672,20673],{"class":2052},"p3",[203,20675,20676],{"class":213},"(p2);",[203,20678,20679],{"class":272}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[203,20681,20682],{"class":205,"line":8073},[203,20683,2489],{"emptyLinePlaceholder":131},[203,20685,20686],{"class":205,"line":8100},[203,20687,20688],{"class":272},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[203,20690,20691,20694],{"class":205,"line":8105},[203,20692,20693],{"class":213},"    Person p4;",[203,20695,20651],{"class":272},[203,20697,20698,20700,20703,20705,20707,20709],{"class":205,"line":8111},[203,20699,19521],{"class":213},[203,20701,20702],{"class":2052},"p5",[203,20704,214],{"class":213},[203,20706,660],{"class":262},[203,20708,6056],{"class":213},[203,20710,20711],{"class":272}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[203,20713,20714,20716,20719,20722],{"class":205,"line":8123},[203,20715,19521],{"class":213},[203,20717,20718],{"class":2052},"p6",[203,20720,20721],{"class":213},"(p5);",[203,20723,20724],{"class":272}," \u002F\u002F用户自己提供拷贝构造\n",[203,20726,20727],{"class":205,"line":8135},[203,20728,1654],{"class":213},[203,20730,20731],{"class":205,"line":8147},[203,20732,2489],{"emptyLinePlaceholder":131},[203,20734,20735,20737,20739],{"class":205,"line":9806},[203,20736,217],{"class":209},[203,20738,2062],{"class":2052},[203,20740,10943],{"class":213},[203,20742,20743],{"class":205,"line":9831},[203,20744,2489],{"emptyLinePlaceholder":131},[203,20746,20747,20749],{"class":205,"line":9854},[203,20748,5723],{"class":2052},[203,20750,5726],{"class":213},[203,20752,20753],{"class":205,"line":9878},[203,20754,2489],{"emptyLinePlaceholder":131},[203,20756,20757,20759,20761,20763],{"class":205,"line":9883},[203,20758,2392],{"class":2052},[203,20760,214],{"class":213},[203,20762,2397],{"class":318},[203,20764,2808],{"class":213},[203,20766,20767],{"class":205,"line":9888},[203,20768,2489],{"emptyLinePlaceholder":131},[203,20770,20771,20773,20775],{"class":205,"line":9893},[203,20772,4179],{"class":209},[203,20774,4182],{"class":262},[203,20776,1380],{"class":213},[203,20778,20779],{"class":205,"line":9902},[203,20780,1654],{"class":213},[174,20782,20784],{"id":20783},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,20786,20787],{},"浅拷贝：简单的赋值拷贝操作",[19,20789,20790],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[194,20792,20794],{"className":196,"code":20793,"language":198,"meta":27,"style":27},"#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",[200,20795,20796,20802,20812,20818,20822,20826,20831,20837,20841,20854,20858,20862,20869,20873,20883,20898,20911,20915,20920,20925,20941,20945,20958,20963,20968,20973,20982,20987,21002,21006,21010,21014,21020,21024,21029,21044,21048,21059,21073,21077,21086,21090,21096,21108,21112,21120,21124,21141,21172,21180,21208,21212,21216,21224,21228,21234],{"__ignoreMap":27},[203,20797,20798,20800],{"class":205,"line":206},[203,20799,2038],{"class":209},[203,20801,2041],{"class":318},[203,20803,20804,20806,20808,20810],{"class":205,"line":124},[203,20805,2046],{"class":209},[203,20807,2049],{"class":209},[203,20809,2053],{"class":2052},[203,20811,1380],{"class":213},[203,20813,20814,20816],{"class":205,"line":1269},[203,20815,14784],{"class":209},[203,20817,15261],{"class":2052},[203,20819,20820],{"class":205,"line":1284},[203,20821,1635],{"class":213},[203,20823,20824],{"class":205,"line":1290},[203,20825,14806],{"class":209},[203,20827,20828],{"class":205,"line":1304},[203,20829,20830],{"class":272},"    \u002F\u002F默认构造函数\n",[203,20832,20833,20835],{"class":205,"line":1310},[203,20834,18609],{"class":2052},[203,20836,2065],{"class":213},[203,20838,20839],{"class":205,"line":1401},[203,20840,2119],{"class":213},[203,20842,20843,20845,20847,20850,20852],{"class":205,"line":1407},[203,20844,3540],{"class":213},[203,20846,1258],{"class":209},[203,20848,20849],{"class":318},"\"默认构造函数\"",[203,20851,1258],{"class":209},[203,20853,1281],{"class":213},[203,20855,20856],{"class":205,"line":1419},[203,20857,2276],{"class":213},[203,20859,20860],{"class":205,"line":1701},[203,20861,20433],{"class":272},[203,20863,20864,20866],{"class":205,"line":1706},[203,20865,18642],{"class":2052},[203,20867,20868],{"class":213},"(int age,int height)\n",[203,20870,20871],{"class":205,"line":1712},[203,20872,2119],{"class":213},[203,20874,20875,20878,20880],{"class":205,"line":1717},[203,20876,20877],{"class":213},"        m_Age",[203,20879,259],{"class":209},[203,20881,20882],{"class":213},"age;\n",[203,20884,20885,20888,20890,20892,20895],{"class":205,"line":1731},[203,20886,20887],{"class":213},"        m_Height",[203,20889,11807],{"class":209},[203,20891,2471],{"class":209},[203,20893,20894],{"class":213},"(height);",[203,20896,20897],{"class":272},"\u002F\u002F放到堆区\n",[203,20899,20900,20902,20904,20907,20909],{"class":205,"line":1736},[203,20901,3540],{"class":213},[203,20903,1258],{"class":209},[203,20905,20906],{"class":318},"\"有参构造函数\"",[203,20908,1258],{"class":209},[203,20910,1281],{"class":213},[203,20912,20913],{"class":205,"line":1742},[203,20914,2276],{"class":213},[203,20916,20917],{"class":205,"line":1763},[203,20918,20919],{"class":272},"    \u002F\u002F深拷贝解决上述问题\n",[203,20921,20922],{"class":205,"line":1768},[203,20923,20924],{"class":272},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[203,20926,20927,20929,20931,20933,20935,20937,20939],{"class":205,"line":1782},[203,20928,18609],{"class":2052},[203,20930,214],{"class":213},[203,20932,6882],{"class":209},[203,20934,15659],{"class":2052},[203,20936,10674],{"class":209},[203,20938,19],{"class":5306},[203,20940,220],{"class":213},[203,20942,20943],{"class":205,"line":1787},[203,20944,2119],{"class":213},[203,20946,20947,20949,20951,20954,20956],{"class":205,"line":1816},[203,20948,3540],{"class":213},[203,20950,1258],{"class":209},[203,20952,20953],{"class":318},"\"拷贝构造函数\"",[203,20955,1258],{"class":209},[203,20957,1281],{"class":213},[203,20959,20960],{"class":205,"line":1821},[203,20961,20962],{"class":272},"        \u002F\u002F编译器默认的写如下注释部分\n",[203,20964,20965],{"class":205,"line":1838},[203,20966,20967],{"class":272},"        \u002F\u002Fm_Age=p.m_Age;\n",[203,20969,20970],{"class":205,"line":1843},[203,20971,20972],{"class":272},"        \u002F\u002Fm_Height=p.m_Height;\n",[203,20974,20975,20977,20979],{"class":205,"line":1848},[203,20976,20877],{"class":213},[203,20978,259],{"class":209},[203,20980,20981],{"class":213},"p.m_Age;\n",[203,20983,20984],{"class":205,"line":1853},[203,20985,20986],{"class":272},"        \u002F\u002F深拷贝操作\n",[203,20988,20989,20991,20993,20995,20997,20999],{"class":205,"line":1867},[203,20990,20887],{"class":213},[203,20992,11807],{"class":209},[203,20994,2471],{"class":209},[203,20996,214],{"class":213},[203,20998,669],{"class":209},[203,21000,21001],{"class":213},"p.m_Height);\n",[203,21003,21004],{"class":205,"line":1872},[203,21005,2276],{"class":213},[203,21007,21008],{"class":205,"line":2666},[203,21009,2489],{"emptyLinePlaceholder":131},[203,21011,21012],{"class":205,"line":2680},[203,21013,18637],{"class":272},[203,21015,21016,21018],{"class":205,"line":2688},[203,21017,18642],{"class":2052},[203,21019,2065],{"class":213},[203,21021,21022],{"class":205,"line":2693},[203,21023,2119],{"class":213},[203,21025,21026],{"class":205,"line":2699},[203,21027,21028],{"class":272},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[203,21030,21031,21033,21036,21039,21042],{"class":205,"line":2705},[203,21032,2586],{"class":209},[203,21034,21035],{"class":213},"(m_Height ",[203,21037,21038],{"class":209},"!=",[203,21040,21041],{"class":262}," NULL",[203,21043,220],{"class":213},[203,21045,21046],{"class":205,"line":2710},[203,21047,2599],{"class":213},[203,21049,21050,21053,21056],{"class":205,"line":8038},[203,21051,21052],{"class":209},"            delete",[203,21054,21055],{"class":213}," m_Height;",[203,21057,21058],{"class":272}," \u002F\u002F释放堆区内存\n",[203,21060,21061,21064,21066,21068,21070],{"class":205,"line":8062},[203,21062,21063],{"class":213},"            m_Height",[203,21065,259],{"class":209},[203,21067,2481],{"class":262},[203,21069,269],{"class":213},[203,21071,21072],{"class":272}," \u002F\u002F防止野指针\n",[203,21074,21075],{"class":205,"line":8067},[203,21076,2618],{"class":213},[203,21078,21079,21081,21083],{"class":205,"line":8073},[203,21080,3540],{"class":213},[203,21082,1258],{"class":209},[203,21084,21085],{"class":318},"\"Person的析构函数调用\"\n",[203,21087,21088],{"class":205,"line":8100},[203,21089,2276],{"class":213},[203,21091,21092,21094],{"class":205,"line":8105},[203,21093,2074],{"class":209},[203,21095,15756],{"class":213},[203,21097,21098,21100,21102,21105],{"class":205,"line":8111},[203,21099,2074],{"class":209},[203,21101,6608],{"class":209},[203,21103,21104],{"class":213},"m_Height;",[203,21106,21107],{"class":272}," \u002F\u002F定义一个指针，指向身高\n",[203,21109,21110],{"class":205,"line":8123},[203,21111,4084],{"class":213},[203,21113,21114,21116,21118],{"class":205,"line":8135},[203,21115,5454],{"class":209},[203,21117,5678],{"class":2052},[203,21119,2065],{"class":213},[203,21121,21122],{"class":205,"line":8147},[203,21123,1635],{"class":213},[203,21125,21126,21128,21130,21132,21134,21136,21139],{"class":205,"line":9806},[203,21127,19521],{"class":213},[203,21129,7220],{"class":2052},[203,21131,214],{"class":213},[203,21133,864],{"class":262},[203,21135,592],{"class":213},[203,21137,21138],{"class":262},"160",[203,21140,2808],{"class":213},[203,21142,21143,21145,21147,21150,21152,21155,21157,21160,21162,21165,21167,21169],{"class":205,"line":9831},[203,21144,1640],{"class":213},[203,21146,1258],{"class":209},[203,21148,21149],{"class":318},"\"p1的年龄为:\"",[203,21151,1258],{"class":209},[203,21153,21154],{"class":213},"p1.m_Age",[203,21156,1258],{"class":209},[203,21158,21159],{"class":318},"\"身高为：\"",[203,21161,6509],{"class":209},[203,21163,21164],{"class":213},"p1.m_Height",[203,21166,1258],{"class":209},[203,21168,1328],{"class":213},[203,21170,21171],{"class":272},"  \u002F\u002F18\n",[203,21173,21174,21176,21178],{"class":205,"line":9854},[203,21175,19521],{"class":213},[203,21177,7123],{"class":2052},[203,21179,17605],{"class":213},[203,21181,21182,21184,21186,21189,21191,21193,21195,21197,21199,21202,21204,21206],{"class":205,"line":9878},[203,21183,1640],{"class":213},[203,21185,1258],{"class":209},[203,21187,21188],{"class":318},"\"p2的年龄为：\"",[203,21190,1258],{"class":209},[203,21192,19551],{"class":213},[203,21194,1258],{"class":209},[203,21196,21159],{"class":318},[203,21198,6509],{"class":209},[203,21200,21201],{"class":213},"p2.m_Height",[203,21203,1258],{"class":209},[203,21205,1328],{"class":213},[203,21207,21171],{"class":272},[203,21209,21210],{"class":205,"line":9883},[203,21211,13300],{"class":213},[203,21213,21214],{"class":205,"line":9888},[203,21215,1654],{"class":213},[203,21217,21218,21220,21222],{"class":205,"line":9893},[203,21219,217],{"class":209},[203,21221,2062],{"class":2052},[203,21223,2065],{"class":213},[203,21225,21226],{"class":205,"line":9902},[203,21227,1635],{"class":213},[203,21229,21230,21232],{"class":205,"line":9907},[203,21231,5723],{"class":2052},[203,21233,5726],{"class":213},[203,21235,21236],{"class":205,"line":9913},[203,21237,1654],{"class":213},[19,21239,21240],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21242,21243],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21245,21246],{},[25,21247],{"alt":27,"src":21248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21250,21251],{},"浅拷贝问题要使用深拷贝来解决",[19,21253,21254],{},[25,21255],{"alt":27,"src":21256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21258,21259],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[174,21261,21263],{"id":21262},"_826初始化列表","8.2.6初始化列表",[19,21265,21266],{},"作用：初始化属性",[19,21268,5271],{},[194,21270,21273],{"className":21271,"code":21272,"language":5277},[5275],"构造函数():属性1(值1),属性2(值2).....{}\n",[200,21274,21272],{"__ignoreMap":27},[19,21276,21277],{},"例子",[194,21279,21281],{"className":196,"code":21280,"language":198,"meta":27,"style":27},"#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",[200,21282,21283,21289,21299,21305,21309,21314,21318,21323,21328,21333,21338,21343,21348,21352,21357,21362,21405,21414,21432,21450,21468,21472,21476,21483,21490,21497,21501,21505,21513,21517,21521,21541,21550,21554,21558,21568,21572,21580],{"__ignoreMap":27},[203,21284,21285,21287],{"class":205,"line":206},[203,21286,2038],{"class":209},[203,21288,2041],{"class":318},[203,21290,21291,21293,21295,21297],{"class":205,"line":124},[203,21292,2046],{"class":209},[203,21294,2049],{"class":209},[203,21296,2053],{"class":2052},[203,21298,1380],{"class":213},[203,21300,21301,21303],{"class":205,"line":1269},[203,21302,14784],{"class":209},[203,21304,15261],{"class":2052},[203,21306,21307],{"class":205,"line":1284},[203,21308,1635],{"class":213},[203,21310,21311],{"class":205,"line":1290},[203,21312,21313],{"class":209},"    public:\n",[203,21315,21316],{"class":205,"line":1304},[203,21317,2489],{"emptyLinePlaceholder":131},[203,21319,21320],{"class":205,"line":1310},[203,21321,21322],{"class":272},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[203,21324,21325],{"class":205,"line":1401},[203,21326,21327],{"class":272},"    \u002F\u002FPerson(int a, int b, int c) {\n",[203,21329,21330],{"class":205,"line":1407},[203,21331,21332],{"class":272},"    \u002F\u002F  m_A = a;\n",[203,21334,21335],{"class":205,"line":1419},[203,21336,21337],{"class":272},"    \u002F\u002F  m_B = b;\n",[203,21339,21340],{"class":205,"line":1701},[203,21341,21342],{"class":272},"    \u002F\u002F  m_C = c;\n",[203,21344,21345],{"class":205,"line":1706},[203,21346,21347],{"class":272},"    \u002F\u002F}\n",[203,21349,21350],{"class":205,"line":1712},[203,21351,2489],{"emptyLinePlaceholder":131},[203,21353,21354],{"class":205,"line":1717},[203,21355,21356],{"class":272},"    \u002F\u002F初始化列表方式初始化\n",[203,21358,21359],{"class":205,"line":1731},[203,21360,21361],{"class":272},"    \u002F\u002F使用有参构造函数\n",[203,21363,21364,21366,21368,21370,21372,21374,21376,21378,21380,21382,21384,21387,21390,21393,21396,21399,21402],{"class":205,"line":1736},[203,21365,18609],{"class":2052},[203,21367,214],{"class":213},[203,21369,217],{"class":209},[203,21371,1488],{"class":5306},[203,21373,12525],{"class":213},[203,21375,217],{"class":209},[203,21377,2922],{"class":5306},[203,21379,12525],{"class":213},[203,21381,217],{"class":209},[203,21383,2938],{"class":5306},[203,21385,21386],{"class":213},") :",[203,21388,21389],{"class":2052},"m_A",[203,21391,21392],{"class":213},"(a), ",[203,21394,21395],{"class":2052},"m_B",[203,21397,21398],{"class":213},"(b), ",[203,21400,21401],{"class":2052},"m_C",[203,21403,21404],{"class":213},"(c) {}\n",[203,21406,21407,21409,21412],{"class":205,"line":1742},[203,21408,14999],{"class":209},[203,21410,21411],{"class":2052}," PrintPerson",[203,21413,10943],{"class":213},[203,21415,21416,21418,21420,21423,21425,21428,21430],{"class":205,"line":1763},[203,21417,9759],{"class":213},[203,21419,1258],{"class":209},[203,21421,21422],{"class":318}," \"mA:\"",[203,21424,1534],{"class":209},[203,21426,21427],{"class":213}," m_A ",[203,21429,1258],{"class":209},[203,21431,8930],{"class":213},[203,21433,21434,21436,21438,21441,21443,21446,21448],{"class":205,"line":1768},[203,21435,9759],{"class":213},[203,21437,1258],{"class":209},[203,21439,21440],{"class":318}," \"mB:\"",[203,21442,1534],{"class":209},[203,21444,21445],{"class":213}," m_B ",[203,21447,1258],{"class":209},[203,21449,8930],{"class":213},[203,21451,21452,21454,21456,21459,21461,21464,21466],{"class":205,"line":1782},[203,21453,9759],{"class":213},[203,21455,1258],{"class":209},[203,21457,21458],{"class":318}," \"mC:\"",[203,21460,1534],{"class":209},[203,21462,21463],{"class":213}," m_C ",[203,21465,1258],{"class":209},[203,21467,8930],{"class":213},[203,21469,21470],{"class":205,"line":1787},[203,21471,2276],{"class":213},[203,21473,21474],{"class":205,"line":1816},[203,21475,15312],{"class":209},[203,21477,21478,21480],{"class":205,"line":1821},[203,21479,2074],{"class":209},[203,21481,21482],{"class":213}," m_A;\n",[203,21484,21485,21487],{"class":205,"line":1838},[203,21486,2074],{"class":209},[203,21488,21489],{"class":213}," m_B;\n",[203,21491,21492,21494],{"class":205,"line":1843},[203,21493,2074],{"class":209},[203,21495,21496],{"class":213}," m_C;\n",[203,21498,21499],{"class":205,"line":1848},[203,21500,4084],{"class":213},[203,21502,21503],{"class":205,"line":1853},[203,21504,2489],{"emptyLinePlaceholder":131},[203,21506,21507,21509,21511],{"class":205,"line":1867},[203,21508,217],{"class":209},[203,21510,2062],{"class":2052},[203,21512,6068],{"class":213},[203,21514,21515],{"class":205,"line":1872},[203,21516,1635],{"class":213},[203,21518,21519],{"class":205,"line":2666},[203,21520,2489],{"emptyLinePlaceholder":131},[203,21522,21523,21525,21527,21529,21531,21533,21535,21537,21539],{"class":205,"line":2680},[203,21524,19521],{"class":213},[203,21526,19],{"class":2052},[203,21528,214],{"class":213},[203,21530,431],{"class":262},[203,21532,12525],{"class":213},[203,21534,291],{"class":262},[203,21536,12525],{"class":213},[203,21538,285],{"class":262},[203,21540,2808],{"class":213},[203,21542,21543,21545,21548],{"class":205,"line":2688},[203,21544,15956],{"class":213},[203,21546,21547],{"class":2052},"PrintPerson",[203,21549,5726],{"class":213},[203,21551,21552],{"class":205,"line":2693},[203,21553,2489],{"emptyLinePlaceholder":131},[203,21555,21556],{"class":205,"line":2699},[203,21557,2489],{"emptyLinePlaceholder":131},[203,21559,21560,21562,21564,21566],{"class":205,"line":2705},[203,21561,2392],{"class":2052},[203,21563,214],{"class":213},[203,21565,2397],{"class":318},[203,21567,2808],{"class":213},[203,21569,21570],{"class":205,"line":2710},[203,21571,2489],{"emptyLinePlaceholder":131},[203,21573,21574,21576,21578],{"class":205,"line":8038},[203,21575,4179],{"class":209},[203,21577,4182],{"class":262},[203,21579,1380],{"class":213},[203,21581,21582],{"class":205,"line":8062},[203,21583,1654],{"class":213},[19,21585,21586,21587,21590,21591],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[363,21588,21589],{},"参数名就是定义的对象属性","，",[363,21592,21593],{},"属性后面的值为有参构造函数的形参",[194,21595,21597],{"className":196,"code":21596,"language":198,"meta":27,"style":27},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[200,21598,21599],{"__ignoreMap":27},[203,21600,21601,21603,21605,21607,21610,21612,21615,21617,21620,21622,21625,21627,21630,21632],{"class":205,"line":206},[203,21602,19136],{"class":2052},[203,21604,214],{"class":213},[203,21606,217],{"class":209},[203,21608,21609],{"class":213}," a.",[203,21611,217],{"class":209},[203,21613,21614],{"class":213}," b,",[203,21616,217],{"class":209},[203,21618,21619],{"class":213}," b):",[203,21621,21389],{"class":2052},[203,21623,21624],{"class":213},"(a),",[203,21626,21395],{"class":2052},[203,21628,21629],{"class":213},"(c),",[203,21631,21401],{"class":2052},[203,21633,21634],{"class":213},"(b) {}\n",[174,21636,21638],{"id":21637},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,21640,21641],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,21643,14723],{},[194,21645,21647],{"className":196,"code":21646,"language":198,"meta":27,"style":27},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[200,21648,21649,21654,21659,21663,21668,21672],{"__ignoreMap":27},[203,21650,21651],{"class":205,"line":206},[203,21652,21653],{"class":213},"A{};\n",[203,21655,21656],{"class":205,"line":124},[203,21657,21658],{"class":213},"B\n",[203,21660,21661],{"class":205,"line":1269},[203,21662,1635],{"class":213},[203,21664,21665],{"class":205,"line":1284},[203,21666,21667],{"class":213},"    A a;\n",[203,21669,21670],{"class":205,"line":1290},[203,21671,1654],{"class":213},[203,21673,21674],{"class":205,"line":1304},[203,21675,21676],{"class":272},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,21678,21679],{},"案例",[194,21681,21683],{"className":196,"code":21682,"language":198,"meta":27,"style":27},"\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",[200,21684,21685,21690,21697,21701,21706,21711,21725,21729,21739,21750,21754,21761,21765,21778,21782,21787,21792,21796,21802,21806,21810,21814,21845,21849,21860,21864,21870,21874,21887,21891,21895,21899,21904,21909,21913,21921,21925,21942,21961,21965,21973,21977,21983],{"__ignoreMap":27},[203,21686,21687],{"class":205,"line":206},[203,21688,21689],{"class":272},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[203,21691,21692,21694],{"class":205,"line":124},[203,21693,14784],{"class":209},[203,21695,21696],{"class":2052}," Phone\n",[203,21698,21699],{"class":205,"line":1269},[203,21700,1635],{"class":213},[203,21702,21703],{"class":205,"line":1284},[203,21704,21705],{"class":213},"public：\n",[203,21707,21708],{"class":205,"line":1290},[203,21709,21710],{"class":272},"    \u002F\u002F 赋值(构造函数)\n",[203,21712,21713,21716,21718,21720,21723],{"class":205,"line":1304},[203,21714,21715],{"class":2052},"    Phone",[203,21717,214],{"class":213},[203,21719,15007],{"class":2052},[203,21721,21722],{"class":5306}," pName",[203,21724,220],{"class":213},[203,21726,21727],{"class":205,"line":1310},[203,21728,2119],{"class":213},[203,21730,21731,21734,21736],{"class":205,"line":1401},[203,21732,21733],{"class":213},"        m_pName",[203,21735,259],{"class":209},[203,21737,21738],{"class":213},"pName;\n",[203,21740,21741,21743,21745,21748],{"class":205,"line":1407},[203,21742,3540],{"class":213},[203,21744,1258],{"class":209},[203,21746,21747],{"class":318},"\"Phone的构造函数调用\"",[203,21749,1380],{"class":213},[203,21751,21752],{"class":205,"line":1419},[203,21753,2276],{"class":213},[203,21755,21756,21759],{"class":205,"line":1701},[203,21757,21758],{"class":2052},"    ~Phone",[203,21760,2065],{"class":213},[203,21762,21763],{"class":205,"line":1706},[203,21764,2119],{"class":213},[203,21766,21767,21769,21771,21774,21776],{"class":205,"line":1712},[203,21768,3540],{"class":213},[203,21770,1258],{"class":209},[203,21772,21773],{"class":318},"\"Phone析构函数调用\"",[203,21775,1258],{"class":209},[203,21777,1281],{"class":213},[203,21779,21780],{"class":205,"line":1717},[203,21781,2276],{"class":213},[203,21783,21784],{"class":205,"line":1731},[203,21785,21786],{"class":272},"    \u002F\u002F\n",[203,21788,21789],{"class":205,"line":1736},[203,21790,21791],{"class":213},"    string m_PName;\n",[203,21793,21794],{"class":205,"line":1742},[203,21795,4084],{"class":213},[203,21797,21798,21800],{"class":205,"line":1763},[203,21799,14784],{"class":209},[203,21801,15261],{"class":2052},[203,21803,21804],{"class":205,"line":1768},[203,21805,1635],{"class":213},[203,21807,21808],{"class":205,"line":1782},[203,21809,14806],{"class":209},[203,21811,21812],{"class":205,"line":1787},[203,21813,17084],{"class":272},[203,21815,21816,21818,21820,21822,21824,21826,21828,21831,21834,21836,21839,21842],{"class":205,"line":1816},[203,21817,18609],{"class":2052},[203,21819,214],{"class":213},[203,21821,15007],{"class":2052},[203,21823,15010],{"class":5306},[203,21825,592],{"class":213},[203,21827,15007],{"class":2052},[203,21829,21830],{"class":5306}," pname",[203,21832,21833],{"class":213},"):",[203,21835,15100],{"class":2052},[203,21837,21838],{"class":213},"(name),m_phone.",[203,21840,21841],{"class":2052},"m_PName",[203,21843,21844],{"class":213},"(pname) \n",[203,21846,21847],{"class":205,"line":1821},[203,21848,2119],{"class":213},[203,21850,21851,21853,21855,21858],{"class":205,"line":1838},[203,21852,3540],{"class":213},[203,21854,1258],{"class":209},[203,21856,21857],{"class":318},"\"Person的构造函数调用\"",[203,21859,1380],{"class":213},[203,21861,21862],{"class":205,"line":1843},[203,21863,2276],{"class":213},[203,21865,21866,21868],{"class":205,"line":1848},[203,21867,18642],{"class":2052},[203,21869,2065],{"class":213},[203,21871,21872],{"class":205,"line":1853},[203,21873,2119],{"class":213},[203,21875,21876,21878,21880,21883,21885],{"class":205,"line":1867},[203,21877,3540],{"class":213},[203,21879,1258],{"class":209},[203,21881,21882],{"class":318},"\"Person析构函数调用\"",[203,21884,1258],{"class":209},[203,21886,1281],{"class":213},[203,21888,21889],{"class":205,"line":1872},[203,21890,2276],{"class":213},[203,21892,21893],{"class":205,"line":2666},[203,21894,7870],{"class":272},[203,21896,21897],{"class":205,"line":2680},[203,21898,14982],{"class":213},[203,21900,21901],{"class":205,"line":2688},[203,21902,21903],{"class":272},"    \u002F\u002F手机\n",[203,21905,21906],{"class":205,"line":2693},[203,21907,21908],{"class":213},"    Phone m_Phone;\n",[203,21910,21911],{"class":205,"line":2699},[203,21912,4084],{"class":213},[203,21914,21915,21917,21919],{"class":205,"line":2705},[203,21916,5454],{"class":209},[203,21918,5678],{"class":2052},[203,21920,2065],{"class":213},[203,21922,21923],{"class":205,"line":2710},[203,21924,1635],{"class":213},[203,21926,21927,21929,21931,21933,21935,21937,21940],{"class":205,"line":8038},[203,21928,19521],{"class":213},[203,21930,19],{"class":2052},[203,21932,214],{"class":213},[203,21934,8006],{"class":318},[203,21936,592],{"class":213},[203,21938,21939],{"class":318},"\"安卓\"",[203,21941,2808],{"class":213},[203,21943,21944,21946,21948,21951,21953,21956,21958],{"class":205,"line":8062},[203,21945,1640],{"class":213},[203,21947,1258],{"class":209},[203,21949,21950],{"class":213},"p.Name",[203,21952,1258],{"class":209},[203,21954,21955],{"class":318},"\"拿着：\"",[203,21957,1258],{"class":209},[203,21959,21960],{"class":213},"p.m_phone.m_PName;\n",[203,21962,21963],{"class":205,"line":8067},[203,21964,1654],{"class":213},[203,21966,21967,21969,21971],{"class":205,"line":8073},[203,21968,217],{"class":209},[203,21970,2062],{"class":2052},[203,21972,2065],{"class":213},[203,21974,21975],{"class":205,"line":8100},[203,21976,1635],{"class":213},[203,21978,21979,21981],{"class":205,"line":8105},[203,21980,5723],{"class":2052},[203,21982,5726],{"class":213},[203,21984,21985],{"class":205,"line":8111},[203,21986,1654],{"class":213},[19,21988,9115],{},[194,21990,21992],{"className":196,"code":21991,"language":198,"meta":27,"style":27},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[200,21993,21994,21999],{"__ignoreMap":27},[203,21995,21996],{"class":205,"line":206},[203,21997,21998],{"class":272},"    \u002F\u002F不需要写这个：\n",[203,22000,22001],{"class":205,"line":124},[203,22002,22003],{"class":272},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22005,22006],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[194,22008,22010],{"className":196,"code":22009,"language":198,"meta":27,"style":27},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[200,22011,22012],{"__ignoreMap":27},[203,22013,22014,22016,22019,22021,22024,22027],{"class":205,"line":206},[203,22015,19136],{"class":2052},[203,22017,22018],{"class":213},"(string name.string pname):",[203,22020,15100],{"class":2052},[203,22022,22023],{"class":213},"(name),",[203,22025,22026],{"class":2052},"m_phone",[203,22028,22029],{"class":213},"(pname) {}\n",[19,22031,22032,22033,259,22036],{},"采用的是隐式转换法，实际为如下：\n",[200,22034,22035],{},"m_phone(pname)",[200,22037,22038],{},"Phone m_phone=pname",[19,22040,22041,22044],{},[363,22042,22043],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22046,22047],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[174,22049,22051],{"id":22050},"_828静态对象","8.2.8静态对象",[19,22053,22054],{},"静态对象在成员对象前static，称为静态对象",[19,22056,22057],{},"静态对象分为两类：",[157,22059,22060],{},[160,22061,22062],{},"静态成员变量",[1221,22064,22065,22068,22071],{},[160,22066,22067],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[160,22069,22070],{},"②在编译阶段分配内存",[160,22072,22073],{},"③类内声明，类外初始化",[157,22075,22076],{"start":124},[160,22077,22078],{},"静态成员函数",[1221,22080,22081,22084],{},[160,22082,22083],{},"①所有对象共享同一个函数",[160,22085,22086],{},"②静态成员函数只能访问静态成员变量",[22088,22089,22091],"h4",{"id":22090},"_8281静态成员变量","8.2.8.1静态成员变量",[194,22093,22095],{"className":196,"code":22094,"language":198,"meta":27,"style":27},"#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",[200,22096,22097,22103,22113,22119,22123,22127,22132,22137,22142,22150,22154,22158,22162,22170,22174,22178,22183,22196,22200,22208,22212,22218],{"__ignoreMap":27},[203,22098,22099,22101],{"class":205,"line":206},[203,22100,2038],{"class":209},[203,22102,2041],{"class":318},[203,22104,22105,22107,22109,22111],{"class":205,"line":124},[203,22106,2046],{"class":209},[203,22108,2049],{"class":209},[203,22110,2053],{"class":2052},[203,22112,1380],{"class":213},[203,22114,22115,22117],{"class":205,"line":1269},[203,22116,14784],{"class":209},[203,22118,15261],{"class":2052},[203,22120,22121],{"class":205,"line":1284},[203,22122,1635],{"class":213},[203,22124,22125],{"class":205,"line":1290},[203,22126,14806],{"class":209},[203,22128,22129],{"class":205,"line":1304},[203,22130,22131],{"class":272},"    \u002F\u002F非静态成员变量\n",[203,22133,22134],{"class":205,"line":1310},[203,22135,22136],{"class":272},"    \u002F\u002F int m_A;\n",[203,22138,22139],{"class":205,"line":1401},[203,22140,22141],{"class":272},"    \u002F\u002F定义静态成员变量\n",[203,22143,22144,22146,22148],{"class":205,"line":1407},[203,22145,11110],{"class":209},[203,22147,2471],{"class":209},[203,22149,21482],{"class":213},[203,22151,22152],{"class":205,"line":1419},[203,22153,2489],{"emptyLinePlaceholder":131},[203,22155,22156],{"class":205,"line":1701},[203,22157,2489],{"emptyLinePlaceholder":131},[203,22159,22160],{"class":205,"line":1706},[203,22161,4084],{"class":213},[203,22163,22164,22166,22168],{"class":205,"line":1712},[203,22165,5454],{"class":209},[203,22167,5678],{"class":2052},[203,22169,2065],{"class":213},[203,22171,22172],{"class":205,"line":1717},[203,22173,1635],{"class":213},[203,22175,22176],{"class":205,"line":1731},[203,22177,15403],{"class":213},[203,22179,22180],{"class":205,"line":1736},[203,22181,22182],{"class":272},"    \u002F\u002F输出类成员变量这块内存\n",[203,22184,22185,22187,22189,22192,22194],{"class":205,"line":1742},[203,22186,1640],{"class":213},[203,22188,1258],{"class":209},[203,22190,22191],{"class":213},"p.m_A",[203,22193,1258],{"class":209},[203,22195,1281],{"class":213},[203,22197,22198],{"class":205,"line":1763},[203,22199,1654],{"class":213},[203,22201,22202,22204,22206],{"class":205,"line":1768},[203,22203,217],{"class":209},[203,22205,2062],{"class":2052},[203,22207,2065],{"class":213},[203,22209,22210],{"class":205,"line":1782},[203,22211,1635],{"class":213},[203,22213,22214,22216],{"class":205,"line":1787},[203,22215,5723],{"class":2052},[203,22217,2065],{"class":213},[203,22219,22220],{"class":205,"line":1816},[203,22221,1654],{"class":213},[19,22223,22224],{},"此时输出是报错的：无法解析外部命令",[19,22226,22227],{},"解决这一问题：必须用到类内声明，类外初始化操作",[194,22229,22231],{"className":196,"code":22230,"language":198,"meta":27,"style":27},"#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",[200,22232,22233,22239,22249,22255,22259,22263,22268,22276,22280,22285,22300,22308,22312,22316,22321,22326,22338,22343,22354,22359,22364,22377,22381,22389,22393,22399],{"__ignoreMap":27},[203,22234,22235,22237],{"class":205,"line":206},[203,22236,2038],{"class":209},[203,22238,2041],{"class":318},[203,22240,22241,22243,22245,22247],{"class":205,"line":124},[203,22242,2046],{"class":209},[203,22244,2049],{"class":209},[203,22246,2053],{"class":2052},[203,22248,1380],{"class":213},[203,22250,22251,22253],{"class":205,"line":1269},[203,22252,14784],{"class":209},[203,22254,15261],{"class":2052},[203,22256,22257],{"class":205,"line":1284},[203,22258,1635],{"class":213},[203,22260,22261],{"class":205,"line":1290},[203,22262,14806],{"class":209},[203,22264,22265],{"class":205,"line":1304},[203,22266,22267],{"class":272},"    \u002F\u002F类内声明\n",[203,22269,22270,22272,22274],{"class":205,"line":1310},[203,22271,11110],{"class":209},[203,22273,2471],{"class":209},[203,22275,21482],{"class":213},[203,22277,22278],{"class":205,"line":1401},[203,22279,4084],{"class":213},[203,22281,22282],{"class":205,"line":1407},[203,22283,22284],{"class":272},"\u002F\u002F类外初始化\n",[203,22286,22287,22289,22291,22294,22296,22298],{"class":205,"line":1419},[203,22288,217],{"class":209},[203,22290,15659],{"class":2052},[203,22292,22293],{"class":213},"::m_A",[203,22295,259],{"class":209},[203,22297,660],{"class":262},[203,22299,1380],{"class":213},[203,22301,22302,22304,22306],{"class":205,"line":1701},[203,22303,5454],{"class":209},[203,22305,5678],{"class":2052},[203,22307,2065],{"class":213},[203,22309,22310],{"class":205,"line":1706},[203,22311,1635],{"class":213},[203,22313,22314],{"class":205,"line":1712},[203,22315,15403],{"class":213},[203,22317,22318],{"class":205,"line":1717},[203,22319,22320],{"class":272},"    \u002F\u002F访问变量的原内存空间\n",[203,22322,22323],{"class":205,"line":1731},[203,22324,22325],{"class":272},"    \u002F\u002F100\n",[203,22327,22328,22330,22332,22334,22336],{"class":205,"line":1736},[203,22329,1640],{"class":213},[203,22331,1258],{"class":209},[203,22333,22191],{"class":213},[203,22335,1258],{"class":209},[203,22337,1281],{"class":213},[203,22339,22340],{"class":205,"line":1742},[203,22341,22342],{"class":213},"    Person p2;\n",[203,22344,22345,22348,22350,22352],{"class":205,"line":1763},[203,22346,22347],{"class":213},"    p2.m_A",[203,22349,259],{"class":209},[203,22351,1811],{"class":262},[203,22353,1380],{"class":213},[203,22355,22356],{"class":205,"line":1768},[203,22357,22358],{"class":272},"    \u002F\u002F继续访问这片空间\n",[203,22360,22361],{"class":205,"line":1782},[203,22362,22363],{"class":272},"    \u002F\u002F200\n",[203,22365,22366,22368,22370,22373,22375],{"class":205,"line":1787},[203,22367,1640],{"class":213},[203,22369,1258],{"class":209},[203,22371,22372],{"class":213},"p2.m_A",[203,22374,1258],{"class":209},[203,22376,1281],{"class":213},[203,22378,22379],{"class":205,"line":1816},[203,22380,1654],{"class":213},[203,22382,22383,22385,22387],{"class":205,"line":1821},[203,22384,217],{"class":209},[203,22386,2062],{"class":2052},[203,22388,2065],{"class":213},[203,22390,22391],{"class":205,"line":1838},[203,22392,1635],{"class":213},[203,22394,22395,22397],{"class":205,"line":1843},[203,22396,5723],{"class":2052},[203,22398,5726],{"class":213},[203,22400,22401],{"class":205,"line":1848},[203,22402,1654],{"class":213},[19,22404,22405],{},[363,22406,22407],{},"静态变量的访问",[194,22409,22411],{"className":196,"code":22410,"language":198,"meta":27,"style":27},"#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",[200,22412,22413,22419,22429,22435,22439,22443,22447,22455,22459,22464,22472,22476,22480,22494,22509,22517,22521,22526,22531,22536,22541,22553,22558,22563,22577,22594,22598,22606,22610,22616],{"__ignoreMap":27},[203,22414,22415,22417],{"class":205,"line":206},[203,22416,2038],{"class":209},[203,22418,2041],{"class":318},[203,22420,22421,22423,22425,22427],{"class":205,"line":124},[203,22422,2046],{"class":209},[203,22424,2049],{"class":209},[203,22426,2053],{"class":2052},[203,22428,1380],{"class":213},[203,22430,22431,22433],{"class":205,"line":1269},[203,22432,14784],{"class":209},[203,22434,15261],{"class":2052},[203,22436,22437],{"class":205,"line":1284},[203,22438,1635],{"class":213},[203,22440,22441],{"class":205,"line":1290},[203,22442,14806],{"class":209},[203,22444,22445],{"class":205,"line":1304},[203,22446,22267],{"class":272},[203,22448,22449,22451,22453],{"class":205,"line":1310},[203,22450,11110],{"class":209},[203,22452,2471],{"class":209},[203,22454,21482],{"class":213},[203,22456,22457],{"class":205,"line":1401},[203,22458,15312],{"class":209},[203,22460,22461],{"class":205,"line":1407},[203,22462,22463],{"class":272},"    \u002F\u002F静态成员变量也是有访问权限的\n",[203,22465,22466,22468,22470],{"class":205,"line":1419},[203,22467,11110],{"class":209},[203,22469,2471],{"class":209},[203,22471,21489],{"class":213},[203,22473,22474],{"class":205,"line":1701},[203,22475,4084],{"class":213},[203,22477,22478],{"class":205,"line":1706},[203,22479,22284],{"class":272},[203,22481,22482,22484,22486,22488,22490,22492],{"class":205,"line":1712},[203,22483,217],{"class":209},[203,22485,15659],{"class":2052},[203,22487,22293],{"class":213},[203,22489,259],{"class":209},[203,22491,660],{"class":262},[203,22493,1380],{"class":213},[203,22495,22496,22498,22500,22503,22505,22507],{"class":205,"line":1717},[203,22497,217],{"class":209},[203,22499,15659],{"class":2052},[203,22501,22502],{"class":213},"::m_B",[203,22504,259],{"class":209},[203,22506,914],{"class":262},[203,22508,1380],{"class":213},[203,22510,22511,22513,22515],{"class":205,"line":1731},[203,22512,5454],{"class":209},[203,22514,5747],{"class":2052},[203,22516,2065],{"class":213},[203,22518,22519],{"class":205,"line":1736},[203,22520,1635],{"class":213},[203,22522,22523],{"class":205,"line":1742},[203,22524,22525],{"class":272},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[203,22527,22528],{"class":205,"line":1763},[203,22529,22530],{"class":272},"    \u002F\u002F静态成员变量有两种访问方式：\n",[203,22532,22533],{"class":205,"line":1768},[203,22534,22535],{"class":272},"    \u002F\u002F1.通过对象进行访问\n",[203,22537,22538],{"class":205,"line":1782},[203,22539,22540],{"class":213},"    Person p;  \n",[203,22542,22543,22545,22547,22549,22551],{"class":205,"line":1787},[203,22544,1640],{"class":213},[203,22546,1258],{"class":209},[203,22548,22191],{"class":213},[203,22550,1258],{"class":209},[203,22552,1281],{"class":213},[203,22554,22555],{"class":205,"line":1816},[203,22556,22557],{"class":272},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[203,22559,22560],{"class":205,"line":1821},[203,22561,22562],{"class":272},"    \u002F\u002F2.通过类名进行访问\n",[203,22564,22565,22567,22569,22571,22573,22575],{"class":205,"line":1838},[203,22566,1640],{"class":213},[203,22568,1258],{"class":209},[203,22570,19136],{"class":2052},[203,22572,22293],{"class":213},[203,22574,1258],{"class":209},[203,22576,1281],{"class":213},[203,22578,22579,22581,22583,22585,22587,22589,22591],{"class":205,"line":1843},[203,22580,1640],{"class":213},[203,22582,1258],{"class":209},[203,22584,19136],{"class":2052},[203,22586,22502],{"class":213},[203,22588,1258],{"class":209},[203,22590,1328],{"class":213},[203,22592,22593],{"class":272}," \u002F\u002F没有访问权限，报错\n",[203,22595,22596],{"class":205,"line":1848},[203,22597,1654],{"class":213},[203,22599,22600,22602,22604],{"class":205,"line":1853},[203,22601,217],{"class":209},[203,22603,2062],{"class":2052},[203,22605,2065],{"class":213},[203,22607,22608],{"class":205,"line":1867},[203,22609,1635],{"class":213},[203,22611,22612,22614],{"class":205,"line":1872},[203,22613,5792],{"class":2052},[203,22615,5726],{"class":213},[203,22617,22618],{"class":205,"line":2666},[203,22619,1654],{"class":213},[22088,22621,22623],{"id":22622},"_8282静态成员函数","8.2.8.2静态成员函数",[19,22625,22626],{},"1.静态成员函数定义与访问",[194,22628,22630],{"className":196,"code":22629,"language":198,"meta":27,"style":27},"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",[200,22631,22632,22638,22642,22646,22651,22662,22666,22680,22684,22688,22696,22700,22705,22710,22714,22722,22727,22737],{"__ignoreMap":27},[203,22633,22634,22636],{"class":205,"line":206},[203,22635,14784],{"class":209},[203,22637,15261],{"class":2052},[203,22639,22640],{"class":205,"line":124},[203,22641,1635],{"class":213},[203,22643,22644],{"class":205,"line":1269},[203,22645,14806],{"class":209},[203,22647,22648],{"class":205,"line":1284},[203,22649,22650],{"class":272},"    \u002F\u002F在公共权限下定义静态成员函数\n",[203,22652,22653,22655,22658,22660],{"class":205,"line":1290},[203,22654,11110],{"class":209},[203,22656,22657],{"class":209}," void",[203,22659,11475],{"class":2052},[203,22661,2065],{"class":213},[203,22663,22664],{"class":205,"line":1304},[203,22665,2119],{"class":213},[203,22667,22668,22671,22673,22676,22678],{"class":205,"line":1310},[203,22669,22670],{"class":213},"        coout",[203,22672,1258],{"class":209},[203,22674,22675],{"class":318},"\"静态成员函数的调用\"",[203,22677,1258],{"class":209},[203,22679,1281],{"class":213},[203,22681,22682],{"class":205,"line":1401},[203,22683,2276],{"class":213},[203,22685,22686],{"class":205,"line":1407},[203,22687,4084],{"class":213},[203,22689,22690,22692,22694],{"class":205,"line":1419},[203,22691,5454],{"class":209},[203,22693,5678],{"class":2052},[203,22695,2065],{"class":213},[203,22697,22698],{"class":205,"line":1701},[203,22699,1635],{"class":213},[203,22701,22702],{"class":205,"line":1706},[203,22703,22704],{"class":272},"    \u002F\u002F静态成员函数的调用方式:\n",[203,22706,22707],{"class":205,"line":1712},[203,22708,22709],{"class":272},"    \u002F\u002F1.通过对象访问\n",[203,22711,22712],{"class":205,"line":1717},[203,22713,15403],{"class":213},[203,22715,22716,22718,22720],{"class":205,"line":1731},[203,22717,15956],{"class":213},[203,22719,11641],{"class":2052},[203,22721,5726],{"class":213},[203,22723,22724],{"class":205,"line":1736},[203,22725,22726],{"class":272},"    \u002F\u002F2.通过类名访问\n",[203,22728,22729,22731,22733,22735],{"class":205,"line":1742},[203,22730,18609],{"class":2052},[203,22732,17822],{"class":213},[203,22734,11641],{"class":2052},[203,22736,5726],{"class":213},[203,22738,22739],{"class":205,"line":1763},[203,22740,1654],{"class":213},[157,22742,22743],{"start":124},[160,22744,22745],{},"静态成员函数只能访问静态成员变量",[194,22747,22749],{"className":196,"code":22748,"language":198,"meta":27,"style":27},"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",[200,22750,22751,22757,22761,22765,22769,22779,22783,22797,22802,22814,22818,22829,22839,22843,22847,22851,22861,22865,22878,22882,22886,22890,22894,22908,22916,22920,22924,22928,22932,22940,22944,22954,22959,22963,22971,22975,22981],{"__ignoreMap":27},[203,22752,22753,22755],{"class":205,"line":206},[203,22754,14784],{"class":209},[203,22756,15261],{"class":2052},[203,22758,22759],{"class":205,"line":124},[203,22760,1635],{"class":213},[203,22762,22763],{"class":205,"line":1269},[203,22764,14806],{"class":209},[203,22766,22767],{"class":205,"line":1284},[203,22768,22650],{"class":272},[203,22770,22771,22773,22775,22777],{"class":205,"line":1290},[203,22772,11110],{"class":209},[203,22774,22657],{"class":209},[203,22776,11475],{"class":2052},[203,22778,2065],{"class":213},[203,22780,22781],{"class":205,"line":1304},[203,22782,2119],{"class":213},[203,22784,22785,22788,22790,22792,22794],{"class":205,"line":1310},[203,22786,22787],{"class":213},"        m_A",[203,22789,259],{"class":209},[203,22791,525],{"class":262},[203,22793,269],{"class":213},[203,22795,22796],{"class":272}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[203,22798,22799],{"class":205,"line":1401},[203,22800,22801],{"class":272},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[203,22803,22804,22806,22808,22810,22812],{"class":205,"line":1407},[203,22805,22670],{"class":213},[203,22807,1258],{"class":209},[203,22809,22675],{"class":318},[203,22811,1258],{"class":209},[203,22813,1281],{"class":213},[203,22815,22816],{"class":205,"line":1419},[203,22817,2276],{"class":213},[203,22819,22820,22822,22824,22826],{"class":205,"line":1701},[203,22821,11110],{"class":209},[203,22823,2471],{"class":209},[203,22825,15538],{"class":213},[203,22827,22828],{"class":272}," \u002F\u002F静态成员变量\n",[203,22830,22831,22833,22836],{"class":205,"line":1706},[203,22832,2074],{"class":209},[203,22834,22835],{"class":213}," m_B;",[203,22837,22838],{"class":272}," \u002F\u002F非静态成员变量\n",[203,22840,22841],{"class":205,"line":1712},[203,22842,2489],{"emptyLinePlaceholder":131},[203,22844,22845],{"class":205,"line":1717},[203,22846,15312],{"class":209},[203,22848,22849],{"class":205,"line":1731},[203,22850,22463],{"class":272},[203,22852,22853,22855,22857,22859],{"class":205,"line":1736},[203,22854,11110],{"class":209},[203,22856,22657],{"class":209},[203,22858,13708],{"class":2052},[203,22860,2065],{"class":213},[203,22862,22863],{"class":205,"line":1742},[203,22864,2119],{"class":213},[203,22866,22867,22869,22871,22874,22876],{"class":205,"line":1763},[203,22868,3540],{"class":213},[203,22870,1258],{"class":209},[203,22872,22873],{"class":318},"\"这是私有权限下的静态函数调用\"",[203,22875,1258],{"class":209},[203,22877,1281],{"class":213},[203,22879,22880],{"class":205,"line":1768},[203,22881,2276],{"class":213},[203,22883,22884],{"class":205,"line":1782},[203,22885,2489],{"emptyLinePlaceholder":131},[203,22887,22888],{"class":205,"line":1787},[203,22889,2489],{"emptyLinePlaceholder":131},[203,22891,22892],{"class":205,"line":1816},[203,22893,4084],{"class":213},[203,22895,22896,22898,22900,22902,22904,22906],{"class":205,"line":1821},[203,22897,217],{"class":209},[203,22899,15659],{"class":2052},[203,22901,22293],{"class":213},[203,22903,259],{"class":209},[203,22905,405],{"class":262},[203,22907,1380],{"class":213},[203,22909,22910,22912,22914],{"class":205,"line":1838},[203,22911,5454],{"class":209},[203,22913,5678],{"class":2052},[203,22915,2065],{"class":213},[203,22917,22918],{"class":205,"line":1843},[203,22919,1635],{"class":213},[203,22921,22922],{"class":205,"line":1848},[203,22923,22704],{"class":272},[203,22925,22926],{"class":205,"line":1853},[203,22927,22709],{"class":272},[203,22929,22930],{"class":205,"line":1867},[203,22931,15403],{"class":213},[203,22933,22934,22936,22938],{"class":205,"line":1872},[203,22935,15956],{"class":213},[203,22937,11641],{"class":2052},[203,22939,5726],{"class":213},[203,22941,22942],{"class":205,"line":2666},[203,22943,22726],{"class":272},[203,22945,22946,22948,22950,22952],{"class":205,"line":2680},[203,22947,18609],{"class":2052},[203,22949,17822],{"class":213},[203,22951,11641],{"class":2052},[203,22953,5726],{"class":213},[203,22955,22956],{"class":205,"line":2688},[203,22957,22958],{"class":272},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[203,22960,22961],{"class":205,"line":2693},[203,22962,1654],{"class":213},[203,22964,22965,22967,22969],{"class":205,"line":2699},[203,22966,217],{"class":209},[203,22968,2062],{"class":2052},[203,22970,2065],{"class":213},[203,22972,22973],{"class":205,"line":2705},[203,22974,1635],{"class":213},[203,22976,22977,22979],{"class":205,"line":2710},[203,22978,5723],{"class":2052},[203,22980,5726],{"class":213},[203,22982,22983],{"class":205,"line":8038},[203,22984,1654],{"class":213},[174,22986,22988],{"id":22987},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22088,22990,22992],{"id":22991},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,22994,22995],{},"在c++中，类内的成员变量和成员函数分开存储",[19,22997,22998],{},"只有非静态成员变量才属于类的对象上",[23000,23001,23003],"h5",{"id":23002},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[194,23005,23007],{"className":196,"code":23006,"language":198,"meta":27,"style":27},"#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",[200,23008,23009,23016,23026,23032,23036,23040,23044,23052,23056,23060,23083,23087,23095,23099,23105],{"__ignoreMap":27},[203,23010,23011,23013],{"class":205,"line":206},[203,23012,2038],{"class":209},[203,23014,23015],{"class":318},"\u003Ciostraem>\n",[203,23017,23018,23020,23022,23024],{"class":205,"line":124},[203,23019,2046],{"class":209},[203,23021,2049],{"class":209},[203,23023,2053],{"class":2052},[203,23025,1380],{"class":213},[203,23027,23028,23030],{"class":205,"line":1269},[203,23029,14784],{"class":209},[203,23031,15261],{"class":2052},[203,23033,23034],{"class":205,"line":1284},[203,23035,1635],{"class":213},[203,23037,23038],{"class":205,"line":1290},[203,23039,2489],{"emptyLinePlaceholder":131},[203,23041,23042],{"class":205,"line":1304},[203,23043,4084],{"class":213},[203,23045,23046,23048,23050],{"class":205,"line":1310},[203,23047,5454],{"class":209},[203,23049,5678],{"class":2052},[203,23051,2065],{"class":213},[203,23053,23054],{"class":205,"line":1401},[203,23055,1635],{"class":213},[203,23057,23058],{"class":205,"line":1407},[203,23059,15403],{"class":213},[203,23061,23062,23064,23066,23069,23071,23074,23076,23078,23080],{"class":205,"line":1419},[203,23063,1640],{"class":213},[203,23065,1258],{"class":209},[203,23067,23068],{"class":318},"\"size of p=\"",[203,23070,1258],{"class":209},[203,23072,23073],{"class":2052},"sizeoif",[203,23075,6629],{"class":213},[203,23077,1258],{"class":209},[203,23079,1328],{"class":213},[203,23081,23082],{"class":272}," \u002F\u002F查看这个空类的占用的内存空间\n",[203,23084,23085],{"class":205,"line":1701},[203,23086,1654],{"class":213},[203,23088,23089,23091,23093],{"class":205,"line":1706},[203,23090,217],{"class":209},[203,23092,2062],{"class":2052},[203,23094,2065],{"class":213},[203,23096,23097],{"class":205,"line":1712},[203,23098,1635],{"class":213},[203,23100,23101,23103],{"class":205,"line":1717},[203,23102,5723],{"class":2052},[203,23104,5726],{"class":213},[203,23106,23107],{"class":205,"line":1731},[203,23108,1654],{"class":213},[19,23110,23111],{},"输出结果为：size of p=1",[19,23113,23114],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23116,23117],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23000,23119,23121],{"id":23120},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[194,23123,23125],{"className":196,"code":23124,"language":198,"meta":27,"style":27},"#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",[200,23126,23127,23133,23143,23151,23155,23164,23168,23176,23180,23184,23203,23207,23211,23219,23223,23229],{"__ignoreMap":27},[203,23128,23129,23131],{"class":205,"line":206},[203,23130,2038],{"class":209},[203,23132,2041],{"class":318},[203,23134,23135,23137,23139,23141],{"class":205,"line":124},[203,23136,2046],{"class":209},[203,23138,2049],{"class":209},[203,23140,2053],{"class":2052},[203,23142,1380],{"class":213},[203,23144,23145,23147,23149],{"class":205,"line":1269},[203,23146,14784],{"class":209},[203,23148,15659],{"class":2052},[203,23150,2763],{"class":213},[203,23152,23153],{"class":205,"line":1284},[203,23154,1635],{"class":213},[203,23156,23157,23159,23161],{"class":205,"line":1290},[203,23158,2074],{"class":209},[203,23160,15538],{"class":213},[203,23162,23163],{"class":272},"\u002F\u002F非静态成员变量\n",[203,23165,23166],{"class":205,"line":1304},[203,23167,4084],{"class":213},[203,23169,23170,23172,23174],{"class":205,"line":1310},[203,23171,5454],{"class":209},[203,23173,5678],{"class":2052},[203,23175,2065],{"class":213},[203,23177,23178],{"class":205,"line":1401},[203,23179,1635],{"class":213},[203,23181,23182],{"class":205,"line":1407},[203,23183,15403],{"class":213},[203,23185,23186,23188,23190,23192,23194,23196,23198,23200],{"class":205,"line":1419},[203,23187,1640],{"class":213},[203,23189,1258],{"class":209},[203,23191,23068],{"class":318},[203,23193,1462],{"class":209},[203,23195,6629],{"class":213},[203,23197,1258],{"class":209},[203,23199,1328],{"class":213},[203,23201,23202],{"class":272}," \u002F\u002F查看不是空对象时占用多少内存\n",[203,23204,23205],{"class":205,"line":1701},[203,23206,2489],{"emptyLinePlaceholder":131},[203,23208,23209],{"class":205,"line":1706},[203,23210,1654],{"class":213},[203,23212,23213,23215,23217],{"class":205,"line":1712},[203,23214,217],{"class":209},[203,23216,2062],{"class":2052},[203,23218,2065],{"class":213},[203,23220,23221],{"class":205,"line":1717},[203,23222,1635],{"class":213},[203,23224,23225,23227],{"class":205,"line":1731},[203,23226,5723],{"class":2052},[203,23228,5726],{"class":213},[203,23230,23231],{"class":205,"line":1736},[203,23232,1654],{"class":213},[19,23234,23235],{},"输出结果：size of p=4",[19,23237,23238],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[157,23240,23241],{},[160,23242,23243],{},"如果加上非静态成员变量，Person类修改如下",[194,23245,23247],{"className":196,"code":23246,"language":198,"meta":27,"style":27},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[200,23248,23249,23255,23259,23265,23273,23277,23282],{"__ignoreMap":27},[203,23250,23251,23253],{"class":205,"line":206},[203,23252,14784],{"class":209},[203,23254,15261],{"class":2052},[203,23256,23257],{"class":205,"line":124},[203,23258,1635],{"class":213},[203,23260,23261,23263],{"class":205,"line":1269},[203,23262,2074],{"class":209},[203,23264,21482],{"class":213},[203,23266,23267,23269,23271],{"class":205,"line":1284},[203,23268,11110],{"class":209},[203,23270,2471],{"class":209},[203,23272,21489],{"class":213},[203,23274,23275],{"class":205,"line":1290},[203,23276,4084],{"class":213},[203,23278,23279],{"class":205,"line":1304},[203,23280,23281],{"class":272},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[203,23283,23284,23286,23288,23290,23292,23294],{"class":205,"line":1310},[203,23285,217],{"class":209},[203,23287,15659],{"class":2052},[203,23289,22502],{"class":213},[203,23291,259],{"class":209},[203,23293,405],{"class":262},[203,23295,1380],{"class":213},[19,23297,23298],{},"输出结果：4",[19,23300,23301],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[157,23303,23304],{"start":124},[160,23305,23306],{},"加上非静态成员函数",[194,23308,23310],{"className":196,"code":23309,"language":198,"meta":27,"style":27},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[200,23311,23312,23319,23323,23329,23337,23341,23345,23349],{"__ignoreMap":27},[203,23313,23314,23316],{"class":205,"line":206},[203,23315,14784],{"class":209},[203,23317,23318],{"class":2052},"  Person\n",[203,23320,23321],{"class":205,"line":124},[203,23322,1635],{"class":213},[203,23324,23325,23327],{"class":205,"line":1269},[203,23326,2074],{"class":209},[203,23328,21482],{"class":213},[203,23330,23331,23333,23335],{"class":205,"line":1284},[203,23332,14999],{"class":209},[203,23334,11475],{"class":2052},[203,23336,2065],{"class":213},[203,23338,23339],{"class":205,"line":1290},[203,23340,2119],{"class":213},[203,23342,23343],{"class":205,"line":1304},[203,23344,2489],{"emptyLinePlaceholder":131},[203,23346,23347],{"class":205,"line":1310},[203,23348,2276],{"class":213},[203,23350,23351],{"class":205,"line":1401},[203,23352,4084],{"class":213},[19,23354,23355],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[157,23357,23358],{"start":1269},[160,23359,23360],{},"加上静态成员函数",[194,23362,23364],{"className":196,"code":23363,"language":198,"meta":27,"style":27},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[200,23365,23366,23372,23376,23382,23390,23394,23398,23402,23413,23417,23421,23425],{"__ignoreMap":27},[203,23367,23368,23370],{"class":205,"line":206},[203,23369,14784],{"class":209},[203,23371,23318],{"class":2052},[203,23373,23374],{"class":205,"line":124},[203,23375,1635],{"class":213},[203,23377,23378,23380],{"class":205,"line":1269},[203,23379,2074],{"class":209},[203,23381,21482],{"class":213},[203,23383,23384,23386,23388],{"class":205,"line":1284},[203,23385,14999],{"class":209},[203,23387,11475],{"class":2052},[203,23389,2065],{"class":213},[203,23391,23392],{"class":205,"line":1290},[203,23393,2119],{"class":213},[203,23395,23396],{"class":205,"line":1304},[203,23397,2489],{"emptyLinePlaceholder":131},[203,23399,23400],{"class":205,"line":1310},[203,23401,2276],{"class":213},[203,23403,23404,23406,23408,23411],{"class":205,"line":1401},[203,23405,11110],{"class":209},[203,23407,22657],{"class":209},[203,23409,23410],{"class":2052}," func1",[203,23412,2065],{"class":213},[203,23414,23415],{"class":205,"line":1407},[203,23416,2119],{"class":213},[203,23418,23419],{"class":205,"line":1419},[203,23420,2489],{"emptyLinePlaceholder":131},[203,23422,23423],{"class":205,"line":1701},[203,23424,2276],{"class":213},[203,23426,23427],{"class":205,"line":1706},[203,23428,4084],{"class":213},[19,23430,23298],{},[19,23432,23433],{},"解释：静态成员函数也不属于类上",[5216,23435,7764],{},{"title":27,"searchDepth":124,"depth":124,"links":23437},[23438,23444],{"id":14735,"depth":124,"text":14736,"children":23439},[23440,23441,23442,23443],{"id":14739,"depth":1269,"text":14740},{"id":15464,"depth":1269,"text":15465},{"id":15636,"depth":1269,"text":15637},{"id":16095,"depth":1269,"text":16096},{"id":18467,"depth":124,"text":18468,"children":23445},[23446,23447,23448,23449,23450,23451,23452,23453,23454],{"id":18479,"depth":1269,"text":18480},{"id":18772,"depth":1269,"text":18773},{"id":19263,"depth":1269,"text":19264},{"id":20360,"depth":1269,"text":20361},{"id":20783,"depth":1269,"text":20784},{"id":21262,"depth":1269,"text":21263},{"id":21637,"depth":1269,"text":21638},{"id":22050,"depth":1269,"text":22051},{"id":22987,"depth":1269,"text":22988},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14700,"description":23455},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23462,"title":198,"body":23463,"description":23467,"extension":129,"meta":23468,"navigation":131,"path":23470,"seo":23471,"stem":23472,"__hash__":23473},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23464,"toc":23465},[],{"title":27,"searchDepth":124,"depth":124,"links":23466},[],null,{"category":23469},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":198,"description":23467},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23475,"title":23476,"body":23477,"description":27,"extension":129,"meta":24068,"navigation":131,"path":24069,"seo":24070,"stem":24071,"__hash__":24072},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23478,"toc":24050},[23479,23482,23486,23489,23492,23495,23513,23518,23521,23524,23527,23530,23535,23538,23543,23546,23549,23553,23556,23559,23565,23568,23586,23590,23594,23597,23602,23605,23609,23612,23625,23628,23632,23635,23638,23641,23666,23669,23678,23689,23704,23736,23740,23747,23755,23759,23762,23765,23770,23774,23777,23780,23785,23788,23792,23795,23798,23803,23806,23810,23815,23819,23886,23890,23893,23896,23899,23902,23905,23911,23932,23935,23949,23958,23962,23965,23968,23973,23976,23981,23986,23989,23992,23997,24002,24005,24010,24015,24018,24023,24028,24031,24034,24039,24042,24047],[10,23480,23476],{"id":23481},"_1强化学习基本认识",[14,23483,23485],{"id":23484},"_11什么是强化学习","1.1.什么是强化学习",[19,23487,23488],{},"强化学习有两部分组成：智能体和环境；",[19,23490,23491],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,23493,23494],{},"强化学习与监督学习的区别:",[157,23496,23497,23500,23503,23506],{},[160,23498,23499],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[160,23501,23502],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[160,23504,23505],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[160,23507,23508,23509,23512],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[363,23510,23511],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,23514,23515],{},[25,23516],{"alt":27,"src":23517},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,23519,23520],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,23522,23523],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,23525,23526],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,23528,23529],{},"获取奖励",[19,23531,23532],{},[25,23533],{"alt":27,"src":23534},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,23536,23537],{},"强化学习可以分成标准强化学习和深度强化学习",[19,23539,23540],{},[25,23541],{"alt":27,"src":23542},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,23544,23545],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,23547,23548],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,23550,23552],{"id":23551},"_12强化学习应用场景","1.2.强化学习应用场景",[19,23554,23555],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,23557,23558],{},"具身智能中的应用",[19,23560,23561,23564],{},[363,23562,23563],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,23566,23567],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,23569,23570,23571,23574,23575,23578,23579,23582,23583],{},"机器人是",[363,23572,23573],{},"躯体","，深度学习是",[363,23576,23577],{},"神经元****网络","，VLA是",[363,23580,23581],{},"通用的行为逻辑","，而强化学习是",[363,23584,23585],{},"教练",[14,23587,23589],{"id":23588},"_13序列决策","1.3.序列决策",[174,23591,23593],{"id":23592},"_131智能体与环境","1.3.1.智能体与环境",[19,23595,23596],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,23598,23599],{},[25,23600],{"alt":27,"src":23601},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,23603,23604],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[174,23606,23608],{"id":23607},"_132奖励","1.3.2.奖励",[19,23610,23611],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,23613,23614,23615,23624],{},"取某个策略的表现如何。强化学习的目的就是",[363,23616,23617,23618,23623],{},"最大化",[363,23619,23620],{},[363,23621,23622],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,23626,23627],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[174,23629,23631],{"id":23630},"_133序列决策","1.3.3.序列决策",[19,23633,23634],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,23636,23637],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,23639,23640],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,23642,23643,23647,23648,23650,23651,23653,23654,23656,23657,13885,23660,13885,23663],{},[23644,23645,23646],"em",{},"Ht"," = ",[23644,23649,810],{},"1*, a",[23644,23652,431],{},", r",[23644,23655,431],{},", . . . ,* ",[23644,23658,23659],{},"ot",[23644,23661,23662],{},", at ,",[23644,23664,23665],{},"rt",[19,23667,23668],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,23670,23671,23647,23674,1747,23676,643],{},[23644,23672,23673],{},"st",[23644,23675,266],{},[23644,23677,23646],{},[19,23679,23680,23681,23684,23685,23688],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[363,23682,23683],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[363,23686,23687],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,23690,23691,23692,23695,23696,23699,23700,23703],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[363,23693,23694],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[363,23697,23698],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23644,23701,23702],{},"S, A, T, R, Ω, O, γ",")。",[19,23705,23706,23707,23709,23710,23712,23713,214,23715,23718,23719,23721,23722,214,23725,23728,23729,23731,23732,23735],{},"其中 ",[23644,23708,903],{}," 表示状态空间，为隐变量，",[23644,23711,446],{}," 为动作空间，",[23644,23714,928],{},[23644,23716,23717],{},"s ′ |s, a",") 为状态转移概率，",[23644,23720,878],{}," 为奖励函数，",[23644,23723,23724],{},"Ω",[23644,23726,23727],{},"o|s, a",") 为观测概率，",[23644,23730,804],{}," 为观测空间，",[23644,23733,23734],{},"γ"," 为折扣因子。",[14,23737,23739],{"id":23738},"_14动作空间","1.4.动作空间",[19,23741,23742,23743,23746],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[363,23744,23745],{},"动作空间"," ，动作空间分为:",[157,23748,23749,23752],{},[160,23750,23751],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[160,23753,23754],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,23756,23758],{"id":23757},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,23760,23761],{},"由策略、价值函数、模型三部分组成",[19,23763,23764],{},"这三者组成马尔可夫决策过程",[19,23766,23767],{},[25,23768],{"alt":27,"src":23769},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[174,23771,23773],{"id":23772},"_151策略","1.5.1.策略",[19,23775,23776],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,23778,23779],{},"策略可分为两种：",[19,23781,23782],{},[25,23783],{"alt":27,"src":23784},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,23786,23787],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[174,23789,23791],{"id":23790},"_152价值函数","1.5.2.价值函数",[19,23793,23794],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,23796,23797],{},"价值函数中有一个折扣因子，类似于存款利息",[19,23799,23800],{},[25,23801],{"alt":27,"src":23802},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,23804,23805],{},"进入某个状态采取的最优动作可以通过Q函数得到",[174,23807,23809],{"id":23808},"_153模型","1.5.3.模型",[19,23811,23812],{},[25,23813],{"alt":27,"src":23814},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,23816,23818],{"id":23817},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[351,23820,23821,23832],{},[354,23822,23823],{},[357,23824,23825,23829],{},[360,23826,23828],{"align":23827},"left","类型",[360,23830,23831],{"align":23827},"特点",[398,23833,23834,23844,23854,23864,23876],{},[357,23835,23836,23841],{},[403,23837,23838],{"align":23827},[363,23839,23840],{},"基于价值的智能体",[403,23842,23843],{"align":23827},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[357,23845,23846,23851],{},[403,23847,23848],{"align":23827},[363,23849,23850],{},"基于策略的智能体",[403,23852,23853],{"align":23827},"直接学习策略，没有学习价值函数",[357,23855,23856,23861],{},[403,23857,23858],{"align":23827},[363,23859,23860],{},"演员-评论员智能体",[403,23862,23863],{"align":23827},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[357,23865,23866,23871],{},[403,23867,23868],{"align":23827},[363,23869,23870],{},"有模型强化学习智能体",[403,23872,23873],{"align":23827},[25,23874],{"alt":27,"src":23875},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[357,23877,23878,23883],{},[403,23879,23880],{"align":23827},[363,23881,23882],{},"免模型强化学习智能体",[403,23884,23885],{"align":23827},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,23887,23889],{"id":23888},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,23891,23892],{},"学习和规划是序列决策的两个基本问题",[19,23894,23895],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,23897,23898],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,23900,23901],{},"强化学习用到的库：Gym",[19,23903,23904],{},"Gym可以检验强化学习算法的优劣",[19,23906,23907,23910],{},[363,23908,23909],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[194,23912,23916],{"className":23913,"code":23914,"language":23915,"meta":27,"style":27},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[200,23917,23918],{"__ignoreMap":27},[203,23919,23920,23923,23926,23929],{"class":205,"line":206},[203,23921,23922],{"class":2052},"pip",[203,23924,23925],{"class":318}," install",[203,23927,23928],{"class":318}," gym==",[203,23930,23931],{"class":262},"0.25.2\n",[19,23933,23934],{},"显示图形界面需要",[194,23936,23938],{"className":23913,"code":23937,"language":23915,"meta":27,"style":27},"pip install pygame\n",[200,23939,23940],{"__ignoreMap":27},[203,23941,23942,23944,23946],{"class":205,"line":206},[203,23943,23922],{"class":2052},[203,23945,23925],{"class":318},[203,23947,23948],{"class":318}," pygame\n",[19,23950,23951,23952],{},"有关Gym库的相关文档介绍：",[452,23953,23957],{"href":23954,"rel":23955},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23956],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,23959,23961],{"id":23960},"_18一些补充基础概念","1.8.一些补充基础概念",[19,23963,23964],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,23966,23967],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,23969,23970],{},[25,23971],{"alt":27,"src":23972},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,23974,23975],{},"折扣率需要自己来设定",[19,23977,23978],{},[25,23979],{"alt":27,"src":23980},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[157,23982,23983],{},[160,23984,23985],{},"状态转移函数：",[19,23987,23988],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,23990,23991],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,23993,23994],{},[25,23995],{"alt":27,"src":23996},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[157,23998,23999],{"start":124},[160,24000,24001],{},"动作价值函数：",[19,24003,24004],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24006,24007],{},[25,24008],{"alt":27,"src":24009},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[157,24011,24012],{"start":1269},[160,24013,24014],{},"最优动作价值函数：",[19,24016,24017],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[19,24019,24020],{},[25,24021],{"alt":27,"src":24022},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[157,24024,24025],{"start":1284},[160,24026,24027],{},"状态价值函数:",[19,24029,24030],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24032,24033],{},"它衡量的是“一个具体动作”的长期价值",[19,24035,24036],{},[25,24037],{"alt":27,"src":24038},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24040,24041],{},"几个价值函数之间的比较：",[19,24043,24044],{},[25,24045],{"alt":27,"src":24046},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5216,24048,24049],{},"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":27,"searchDepth":124,"depth":124,"links":24051},[24052,24053,24054,24059,24060,24065,24066,24067],{"id":23484,"depth":124,"text":23485},{"id":23551,"depth":124,"text":23552},{"id":23588,"depth":124,"text":23589,"children":24055},[24056,24057,24058],{"id":23592,"depth":1269,"text":23593},{"id":23607,"depth":1269,"text":23608},{"id":23630,"depth":1269,"text":23631},{"id":23738,"depth":124,"text":23739},{"id":23757,"depth":124,"text":23758,"children":24061},[24062,24063,24064],{"id":23772,"depth":1269,"text":23773},{"id":23790,"depth":1269,"text":23791},{"id":23808,"depth":1269,"text":23809},{"id":23817,"depth":124,"text":23818},{"id":23888,"depth":124,"text":23889},{"id":23960,"depth":124,"text":23961},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23476,"description":27},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24074,"title":24075,"body":24076,"description":24083,"extension":129,"meta":24094,"navigation":131,"path":24095,"seo":24096,"stem":24097,"__hash__":24098},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24077,"toc":24092},[24078,24081,24084,24089],[10,24079,24075],{"id":24080},"_2马尔可夫决策过程",[19,24082,24083],{},"这是强化学习的基本框架",[19,24085,24086],{},[25,24087],{"alt":27,"src":24088},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24090,24091],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":27,"searchDepth":124,"depth":124,"links":24093},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24075,"description":24083},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":4,"title":5,"body":24100,"description":27,"extension":129,"meta":24187,"navigation":131,"path":132,"seo":24188,"stem":134,"__hash__":135},{"type":7,"value":24101,"toc":24182},[24102,24104,24106,24108,24112,24116,24118,24122,24124,24128,24130,24132,24136,24138,24142,24146,24150,24152,24154,24158,24160,24164,24168,24172,24176,24178],[10,24103,5],{"id":12},[14,24105,17],{"id":16},[19,24107,21],{},[19,24109,24110],{},[25,24111],{"alt":27,"src":28},[19,24113,24114],{},[25,24115],{"alt":27,"src":33},[19,24117,36],{},[19,24119,24120],{},[25,24121],{"alt":27,"src":41},[19,24123,44],{},[19,24125,24126],{},[25,24127],{"alt":27,"src":49},[19,24129,52],{},[14,24131,56],{"id":55},[19,24133,24134],{},[25,24135],{"alt":27,"src":61},[19,24137,64],{},[19,24139,24140],{},[25,24141],{"alt":27,"src":69},[19,24143,24144],{},[25,24145],{"alt":27,"src":74},[19,24147,24148],{},[25,24149],{"alt":27,"src":79},[19,24151,82],{},[14,24153,86],{"id":85},[19,24155,24156],{},[25,24157],{"alt":27,"src":91},[19,24159,94],{},[19,24161,24162],{},[25,24163],{"alt":27,"src":99},[19,24165,24166],{},[25,24167],{"alt":27,"src":104},[19,24169,24170],{},[25,24171],{"alt":27,"src":109},[19,24173,24174],{},[25,24175],{"alt":27,"src":114},[19,24177,117],{},[19,24179,24180],{},[25,24181],{"alt":27,"src":122},{"title":27,"searchDepth":124,"depth":124,"links":24183},[24184,24185,24186],{"id":16,"depth":124,"text":17},{"id":55,"depth":124,"text":56},{"id":85,"depth":124,"text":86},{},{"title":5,"description":27},{"id":24190,"title":24191,"body":24192,"description":27,"extension":129,"meta":24425,"navigation":131,"path":24426,"seo":24427,"stem":24428,"__hash__":24429},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24193,"toc":24421},[24194,24197,24201,24204,24207,24212,24217,24220,24225,24230,24233,24238,24241,24246,24249,24254,24257,24262,24265,24270,24275,24278,24283,24286,24289,24294,24297,24302,24307,24311,24314,24317,24322,24327,24330,24335,24340,24343,24348,24351,24354,24359,24362,24367,24370,24375,24380,24383,24388,24393,24396,24401,24404,24409,24412],[10,24195,24191],{"id":24196},"_4策略学习",[14,24198,24200],{"id":24199},"_41概念描述","4.1.概念描述",[19,24202,24203],{},"用神经网络（策略网络）近似策略函数",[19,24205,24206],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24208,24209],{},[25,24210],{"alt":27,"src":24211},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24213,24214],{},[25,24215],{"alt":27,"src":24216},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24218,24219],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24221,24222],{},[25,24223],{"alt":27,"src":24224},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24226,24227],{},[25,24228],{"alt":27,"src":24229},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24231,24232],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24234,24235],{},[25,24236],{"alt":27,"src":24237},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24239,24240],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24242,24243],{},[25,24244],{"alt":27,"src":24245},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24247,24248],{},"改进theta要用到策略梯度算法",[19,24250,24251],{},[25,24252],{"alt":27,"src":24253},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24255,24256],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24258,24259],{},[25,24260],{"alt":27,"src":24261},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24263,24264],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24266,24267],{},[25,24268],{"alt":27,"src":24269},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24271,24272],{},[25,24273],{"alt":27,"src":24274},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24276,24277],{},"梯度公式总结：",[19,24279,24280],{},[25,24281],{"alt":27,"src":24282},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24284,24285],{},"两个公式的分别应用场景：",[19,24287,24288],{},"对于离散的动作：",[19,24290,24291],{},[25,24292],{"alt":27,"src":24293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24295,24296],{},"对于连续的动作：",[19,24298,24299],{},[25,24300],{"alt":27,"src":24301},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24303,24304],{},[25,24305],{"alt":27,"src":24306},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24308,24310],{"id":24309},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24312,24313],{},"使用蒙特卡洛来近似计算策略梯度",[19,24315,24316],{},"蒙特卡洛法的解释如下：",[19,24318,24319],{},[25,24320],{"alt":27,"src":24321},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24323,24324],{},[25,24325],{"alt":27,"src":24326},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24328,24329],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[157,24331,24332],{},[160,24333,24334],{},"方法一：reinforce算法",[19,24336,24337],{},[25,24338],{"alt":27,"src":24339},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,24341,24342],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[157,24344,24345],{"start":124},[160,24346,24347],{},"方法二：actor-critic算法",[19,24349,24350],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,24352,24353],{},"两个网络的构建：",[19,24355,24356],{},[25,24357],{"alt":27,"src":24358},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,24360,24361],{},"actor网路：",[19,24363,24364],{},[25,24365],{"alt":27,"src":24366},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,24368,24369],{},"critic网络",[19,24371,24372],{},[25,24373],{"alt":27,"src":24374},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[157,24376,24377],{"start":1269},[160,24378,24379],{},"网络的训练",[19,24381,24382],{},"网络描述",[19,24384,24385],{},[25,24386],{"alt":27,"src":24387},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,24389,24390],{},[25,24391],{"alt":27,"src":24392},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,24394,24395],{},"TD算法更新梯度：",[19,24397,24398],{},[25,24399],{"alt":27,"src":24400},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,24402,24403],{},"策略网络更新梯度：",[19,24405,24406],{},[25,24407],{"alt":27,"src":24408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,24410,24411],{},"训练整个流程的具体描述：",[19,24413,24414,24417,24418],{},[25,24415],{"alt":27,"src":24416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[25,24419],{"alt":27,"src":24420},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":27,"searchDepth":124,"depth":124,"links":24422},[24423,24424],{"id":24199,"depth":124,"text":24200},{"id":24309,"depth":124,"text":24310},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24191,"description":27},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24431,"title":24432,"body":24433,"description":24440,"extension":129,"meta":24490,"navigation":131,"path":24491,"seo":24492,"stem":24493,"__hash__":24494},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24434,"toc":24486},[24435,24438,24441,24445,24448,24453,24457,24460,24465,24468,24473,24478,24481],[10,24436,24432],{"id":24437},"_5alphago算法",[19,24439,24440],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24442,24444],{"id":24443},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,24446,24447],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,24449,24450],{},[25,24451],{"alt":27,"src":24452},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24454,24456],{"id":24455},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,24458,24459],{},"采用强化学习的方式训练策略网络",[19,24461,24462],{},[25,24463],{"alt":27,"src":24464},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,24466,24467],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,24469,24470],{},[25,24471],{"alt":27,"src":24472},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,24474,24475],{},[25,24476],{"alt":27,"src":24477},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,24479,24480],{},"强化学习训练策略网络的总结：",[19,24482,24483],{},[25,24484],{"alt":27,"src":24485},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":27,"searchDepth":124,"depth":124,"links":24487},[24488,24489],{"id":24443,"depth":124,"text":24444},{"id":24455,"depth":124,"text":24456},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24432,"description":24440},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24496,"title":24497,"body":24498,"description":24505,"extension":129,"meta":24508,"navigation":131,"path":24509,"seo":24510,"stem":24511,"__hash__":24512},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24499,"toc":24506},[24500,24503],[10,24501,24497],{"id":24502},"_6价值网络",[19,24504,24505],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":27,"searchDepth":124,"depth":124,"links":24507},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24497,"description":24505},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24514,"title":24515,"body":24516,"description":24520,"extension":129,"meta":24521,"navigation":131,"path":24522,"seo":24523,"stem":24524,"__hash__":24525},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24517,"toc":24518},[],{"title":27,"searchDepth":124,"depth":124,"links":24519},[],"记录自己的强化学习笔记。",{"category":23469},"\u002Fwiki\u002F2025-12-04",{"title":24515,"description":24520},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24527,"title":24528,"body":24529,"description":23467,"extension":129,"meta":24568,"navigation":131,"path":24569,"seo":24570,"stem":24571,"__hash__":24572},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24530,"toc":24566},[24531,24534,24537,24543,24546,24552,24555,24560,24563],[10,24532,24528],{"id":24533},"_1-项目概览与官方资源",[19,24535,24536],{},"官方文档：",[19,24538,24539],{},[452,24540,24541],{"href":24541,"rel":24542},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23956],[19,24544,24545],{},"官方代码仓库：",[19,24547,24548],{},[452,24549,24550],{"href":24550,"rel":24551},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23956],[19,24553,24554],{},"复现大体流程：",[19,24556,24557],{},[25,24558],{"alt":27,"src":24559},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,24561,24562],{},"本教程的目标是打通这条链路：",[19,24564,24565],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":27,"searchDepth":124,"depth":124,"links":24567},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24528,"description":23467},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24574,"title":24575,"body":24576,"description":23467,"extension":129,"meta":24692,"navigation":131,"path":24693,"seo":24694,"stem":24695,"__hash__":24696},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24577,"toc":24687},[24578,24581,24585,24588,24595,24599,24602,24611,24621,24625,24655,24658,24684],[10,24579,24575],{"id":24580},"_2-环境准备与设备连接",[14,24582,24584],{"id":24583},"_21-系统与环境","2.1 系统与环境",[19,24586,24587],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,24589,24590,24591,24594],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[200,24592,24593],{},"lerobot"," 依赖。",[14,24596,24598],{"id":24597},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,24600,24601],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[194,24603,24605],{"className":23913,"code":24604,"language":23915,"meta":27,"style":27},"lerobot-find-out\n",[200,24606,24607],{"__ignoreMap":27},[203,24608,24609],{"class":205,"line":206},[203,24610,24604],{"class":2052},[19,24612,24613,24614,426,24617,24620],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[200,24615,24616],{},"\u002Fdev\u002FttyACM0",[200,24618,24619],{},"\u002Fdev\u002FttyACM1","）。",[14,24622,24624],{"id":24623},"_23-串口授权","2.3 串口授权",[194,24626,24628],{"className":23913,"code":24627,"language":23915,"meta":27,"style":27},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[200,24629,24630,24644],{"__ignoreMap":27},[203,24631,24632,24635,24638,24641],{"class":205,"line":206},[203,24633,24634],{"class":2052},"sudo",[203,24636,24637],{"class":318}," chmod",[203,24639,24640],{"class":262}," 666",[203,24642,24643],{"class":318}," \u002Fdev\u002FttyACM0\n",[203,24645,24646,24648,24650,24652],{"class":205,"line":124},[203,24647,24634],{"class":2052},[203,24649,24637],{"class":318},[203,24651,24640],{"class":262},[203,24653,24654],{"class":318}," \u002Fdev\u002FttyACM1\n",[19,24656,24657],{},"说明：",[1221,24659,24660,24665,24671,24681],{},[160,24661,24662,24664],{},[200,24663,24634],{},"：以 root 权限执行命令。",[160,24666,24667,24670],{},[200,24668,24669],{},"chmod","：修改设备节点权限。",[160,24672,24673,24676,24677,24680],{},[200,24674,24675],{},"666","：",[200,24678,24679],{},"rw-rw-rw-","，所有用户可读写。",[160,24682,24683],{},"串口号必须替换为你机器上的真实端口。",[5216,24685,24686],{},"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":27,"searchDepth":124,"depth":124,"links":24688},[24689,24690,24691],{"id":24583,"depth":124,"text":24584},{"id":24597,"depth":124,"text":24598},{"id":24623,"depth":124,"text":24624},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24575,"description":23467},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24698,"title":24699,"body":24700,"description":23467,"extension":129,"meta":24861,"navigation":131,"path":24862,"seo":24863,"stem":24864,"__hash__":24865},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24701,"toc":24857},[24702,24706,24710,24716,24719,24776,24779,24783,24786,24854],[10,24703,24705],{"id":24704},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,24707,24709],{"id":24708},"_31-配置电机-id","3.1 配置电机 ID",[19,24711,24712,24713,24715],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[200,24714,431],{},"，需要改成机械臂链路里不冲突的编号。",[19,24717,24718],{},"方式一：用 LeRobot 命令逐步写入。",[194,24720,24722],{"className":23913,"code":24721,"language":23915,"meta":27,"style":27},"# 主臂舵机配置 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",[200,24723,24724,24729,24737,24744,24749,24753,24758,24764,24771],{"__ignoreMap":27},[203,24725,24726],{"class":205,"line":206},[203,24727,24728],{"class":272},"# 主臂舵机配置 ID\n",[203,24730,24731,24734],{"class":205,"line":124},[203,24732,24733],{"class":2052},"lerobot-setup-motors",[203,24735,24736],{"class":262}," \\\n",[203,24738,24739,24742],{"class":205,"line":1269},[203,24740,24741],{"class":262},"  --teleop.type=so101_leader",[203,24743,24736],{"class":262},[203,24745,24746],{"class":205,"line":1284},[203,24747,24748],{"class":262},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[203,24750,24751],{"class":205,"line":1290},[203,24752,2489],{"emptyLinePlaceholder":131},[203,24754,24755],{"class":205,"line":1304},[203,24756,24757],{"class":272},"# 从臂舵机配置 ID\n",[203,24759,24760,24762],{"class":205,"line":1310},[203,24761,24733],{"class":2052},[203,24763,24736],{"class":262},[203,24765,24766,24769],{"class":205,"line":1401},[203,24767,24768],{"class":262},"  --robot.type=so101_follower",[203,24770,24736],{"class":262},[203,24772,24773],{"class":205,"line":1407},[203,24774,24775],{"class":262},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,24777,24778],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,24780,24782],{"id":24781},"_32-机械臂校准","3.2 机械臂校准",[19,24784,24785],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[194,24787,24789],{"className":23913,"code":24788,"language":23915,"meta":27,"style":27},"# 主臂校准\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",[200,24790,24791,24796,24803,24809,24816,24821,24825,24830,24836,24842,24849],{"__ignoreMap":27},[203,24792,24793],{"class":205,"line":206},[203,24794,24795],{"class":272},"# 主臂校准\n",[203,24797,24798,24801],{"class":205,"line":124},[203,24799,24800],{"class":2052},"lerobot-calibrate",[203,24802,24736],{"class":262},[203,24804,24805,24807],{"class":205,"line":1269},[203,24806,24741],{"class":262},[203,24808,24736],{"class":262},[203,24810,24811,24814],{"class":205,"line":1284},[203,24812,24813],{"class":262},"  --teleop.port=\u002Fdev\u002FttyACM0",[203,24815,24736],{"class":262},[203,24817,24818],{"class":205,"line":1290},[203,24819,24820],{"class":262},"  --teleop.id=my_awesome_leader_arm\n",[203,24822,24823],{"class":205,"line":1304},[203,24824,2489],{"emptyLinePlaceholder":131},[203,24826,24827],{"class":205,"line":1310},[203,24828,24829],{"class":272},"# 从臂校准\n",[203,24831,24832,24834],{"class":205,"line":1401},[203,24833,24800],{"class":2052},[203,24835,24736],{"class":262},[203,24837,24838,24840],{"class":205,"line":1407},[203,24839,24768],{"class":262},[203,24841,24736],{"class":262},[203,24843,24844,24847],{"class":205,"line":1419},[203,24845,24846],{"class":262},"  --robot.port=\u002Fdev\u002FttyACM1",[203,24848,24736],{"class":262},[203,24850,24851],{"class":205,"line":1701},[203,24852,24853],{"class":262},"  --robot.id=my_awesome_follower_arm\n",[5216,24855,24856],{},"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":27,"searchDepth":124,"depth":124,"links":24858},[24859,24860],{"id":24708,"depth":124,"text":24709},{"id":24781,"depth":124,"text":24782},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24699,"description":23467},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24867,"title":24868,"body":24869,"description":23467,"extension":129,"meta":25060,"navigation":131,"path":25061,"seo":25062,"stem":25063,"__hash__":25064},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24870,"toc":25056},[24871,24874,24878,24925,24929,24942,25005,25008,25053],[10,24872,24868],{"id":24873},"_4-遥操与相机接入",[14,24875,24877],{"id":24876},"_41-不带相机遥操","4.1 不带相机遥操",[194,24879,24881],{"className":23913,"code":24880,"language":23915,"meta":27,"style":27},"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",[200,24882,24883,24890,24896,24902,24909,24915,24921],{"__ignoreMap":27},[203,24884,24885,24888],{"class":205,"line":206},[203,24886,24887],{"class":2052},"lerobot-teleoperate",[203,24889,24736],{"class":262},[203,24891,24892,24894],{"class":205,"line":124},[203,24893,24768],{"class":262},[203,24895,24736],{"class":262},[203,24897,24898,24900],{"class":205,"line":1269},[203,24899,24846],{"class":262},[203,24901,24736],{"class":262},[203,24903,24904,24907],{"class":205,"line":1284},[203,24905,24906],{"class":262},"  --robot.id=my_awesome_follower_arm",[203,24908,24736],{"class":262},[203,24910,24911,24913],{"class":205,"line":1290},[203,24912,24741],{"class":262},[203,24914,24736],{"class":262},[203,24916,24917,24919],{"class":205,"line":1304},[203,24918,24813],{"class":262},[203,24920,24736],{"class":262},[203,24922,24923],{"class":205,"line":1310},[203,24924,24820],{"class":262},[14,24926,24928],{"id":24927},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[194,24930,24932],{"className":23913,"code":24931,"language":23915,"meta":27,"style":27},"lerobot-find-cameras opencv\n",[200,24933,24934],{"__ignoreMap":27},[203,24935,24936,24939],{"class":205,"line":206},[203,24937,24938],{"class":2052},"lerobot-find-cameras",[203,24940,24941],{"class":318}," opencv\n",[194,24943,24945],{"className":23913,"code":24944,"language":23915,"meta":27,"style":27},"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",[200,24946,24947,24953,24959,24965,24971,24981,24987,24993,25000],{"__ignoreMap":27},[203,24948,24949,24951],{"class":205,"line":206},[203,24950,24887],{"class":2052},[203,24952,24736],{"class":262},[203,24954,24955,24957],{"class":205,"line":124},[203,24956,24768],{"class":262},[203,24958,24736],{"class":262},[203,24960,24961,24963],{"class":205,"line":1269},[203,24962,24846],{"class":262},[203,24964,24736],{"class":262},[203,24966,24967,24969],{"class":205,"line":1284},[203,24968,24906],{"class":262},[203,24970,24736],{"class":262},[203,24972,24973,24976,24979],{"class":205,"line":1290},[203,24974,24975],{"class":262},"  --robot.cameras=",[203,24977,24978],{"class":318},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[203,24980,24736],{"class":262},[203,24982,24983,24985],{"class":205,"line":1304},[203,24984,24741],{"class":262},[203,24986,24736],{"class":262},[203,24988,24989,24991],{"class":205,"line":1310},[203,24990,24813],{"class":262},[203,24992,24736],{"class":262},[203,24994,24995,24998],{"class":205,"line":1401},[203,24996,24997],{"class":262},"  --teleop.id=my_awesome_leader_arm",[203,24999,24736],{"class":262},[203,25001,25002],{"class":205,"line":1407},[203,25003,25004],{"class":262},"  --display_data=true\n",[19,25006,25007],{},"相机参数说明：",[1221,25009,25010,25016,25022,25031,25041,25047],{},[160,25011,25012,25015],{},[200,25013,25014],{},"front","：相机名称。",[160,25017,25018,25021],{},[200,25019,25020],{},"type: opencv","：相机驱动类型。",[160,25023,25024,25027,25028,24620],{},[200,25025,25026],{},"index_or_path","：设备编号或设备路径（如 ",[200,25029,25030],{},"\u002Fdev\u002Fvideo4",[160,25032,25033,25036,25037,25040],{},[200,25034,25035],{},"width"," \u002F ",[200,25038,25039],{},"height","：图像分辨率。",[160,25042,25043,25046],{},[200,25044,25045],{},"fps","：采样帧率。",[160,25048,25049,25052],{},[200,25050,25051],{},"--display_data=true","：启用实时可视化。",[5216,25054,25055],{},"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":27,"searchDepth":124,"depth":124,"links":25057},[25058,25059],{"id":24876,"depth":124,"text":24877},{"id":24927,"depth":124,"text":24928},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24868,"description":23467},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25066,"title":25067,"body":25068,"description":23467,"extension":129,"meta":25240,"navigation":131,"path":25241,"seo":25242,"stem":25243,"__hash__":25244},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25069,"toc":25235},[25070,25074,25078,25083,25088,25091,25133,25139,25143,25192,25197,25201,25204,25212,25217,25222,25227,25232],[10,25071,25073],{"id":25072},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25075,25077],{"id":25076},"_51-生成访问令牌","5.1 生成访问令牌",[19,25079,25080],{},[25,25081],{"alt":27,"src":25082},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25084,25085],{},[25,25086],{"alt":27,"src":25087},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25089,25090],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[194,25092,25094],{"className":23913,"code":25093,"language":23915,"meta":27,"style":27},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[200,25095,25096,25109],{"__ignoreMap":27},[203,25097,25098,25101,25104,25106],{"class":205,"line":206},[203,25099,25100],{"class":209},"export",[203,25102,25103],{"class":213}," HF_TOKEN",[203,25105,259],{"class":209},[203,25107,25108],{"class":318},"\"your_huggingface_token\"\n",[203,25110,25111,25114,25117,25120,25123,25125,25128,25130],{"class":205,"line":124},[203,25112,25113],{"class":2052},"hf",[203,25115,25116],{"class":318}," auth",[203,25118,25119],{"class":318}," login",[203,25121,25122],{"class":262}," --token",[203,25124,9814],{"class":318},[203,25126,25127],{"class":213},"$HF_TOKEN",[203,25129,465],{"class":318},[203,25131,25132],{"class":262}," --add-to-git-credential\n",[19,25134,25135,25138],{},[200,25136,25137],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25140,25142],{"id":25141},"_52-验证登录","5.2 验证登录",[194,25144,25146],{"className":23913,"code":25145,"language":23915,"meta":27,"style":27},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[200,25147,25148,25179],{"__ignoreMap":27},[203,25149,25150,25153,25155,25158,25160,25162,25165,25168,25171,25174,25177],{"class":205,"line":206},[203,25151,25152],{"class":213},"HF_USER",[203,25154,259],{"class":209},[203,25156,25157],{"class":213},"$(",[203,25159,25113],{"class":2052},[203,25161,25116],{"class":318},[203,25163,25164],{"class":318}," whoami",[203,25166,25167],{"class":209}," |",[203,25169,25170],{"class":2052}," head",[203,25172,25173],{"class":262}," -n",[203,25175,25176],{"class":262}," 1",[203,25178,220],{"class":213},[203,25180,25181,25184,25186,25189],{"class":205,"line":124},[203,25182,25183],{"class":262},"echo",[203,25185,9814],{"class":318},[203,25187,25188],{"class":213},"$HF_USER",[203,25190,25191],{"class":318},"\"\n",[19,25193,25194],{},[25,25195],{"alt":27,"src":25196},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25198,25200],{"id":25199},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25202,25203],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1221,25205,25206,25209],{},[160,25207,25208],{},"Dataset Repo（用于上传演示数据）",[160,25210,25211],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25213,25214],{},[25,25215],{"alt":27,"src":25216},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25218,25219],{},[25,25220],{"alt":27,"src":25221},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25223,25224],{},[25,25225],{"alt":27,"src":25226},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25228,25229],{},[25,25230],{"alt":27,"src":25231},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5216,25233,25234],{},"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":27,"searchDepth":124,"depth":124,"links":25236},[25237,25238,25239],{"id":25076,"depth":124,"text":25077},{"id":25141,"depth":124,"text":25142},{"id":25199,"depth":124,"text":25200},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25067,"description":23467},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25246,"title":25247,"body":25248,"description":23467,"extension":129,"meta":25445,"navigation":131,"path":25446,"seo":25447,"stem":25448,"__hash__":25449},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25249,"toc":25440},[25250,25254,25258,25354,25362,25367,25371,25387,25390,25394,25437],[10,25251,25253],{"id":25252},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25255,25257],{"id":25256},"_61-录制示教数据","6.1 录制示教数据",[194,25259,25261],{"className":23913,"code":25260,"language":23915,"meta":27,"style":27},"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",[200,25262,25263,25270,25276,25282,25288,25297,25303,25309,25315,25322,25332,25339,25349],{"__ignoreMap":27},[203,25264,25265,25268],{"class":205,"line":206},[203,25266,25267],{"class":2052},"lerobot-record",[203,25269,24736],{"class":262},[203,25271,25272,25274],{"class":205,"line":124},[203,25273,24768],{"class":262},[203,25275,24736],{"class":262},[203,25277,25278,25280],{"class":205,"line":1269},[203,25279,24846],{"class":262},[203,25281,24736],{"class":262},[203,25283,25284,25286],{"class":205,"line":1284},[203,25285,24906],{"class":262},[203,25287,24736],{"class":262},[203,25289,25290,25292,25295],{"class":205,"line":1290},[203,25291,24975],{"class":262},[203,25293,25294],{"class":318},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[203,25296,24736],{"class":262},[203,25298,25299,25301],{"class":205,"line":1304},[203,25300,24741],{"class":262},[203,25302,24736],{"class":262},[203,25304,25305,25307],{"class":205,"line":1310},[203,25306,24813],{"class":262},[203,25308,24736],{"class":262},[203,25310,25311,25313],{"class":205,"line":1401},[203,25312,24997],{"class":262},[203,25314,24736],{"class":262},[203,25316,25317,25320],{"class":205,"line":1407},[203,25318,25319],{"class":262},"  --display_data=true",[203,25321,24736],{"class":262},[203,25323,25324,25327,25330],{"class":205,"line":1419},[203,25325,25326],{"class":262},"  --dataset.repo_id=",[203,25328,25329],{"class":318},"\"Embodied-AI-6\u002Fso101_test\"",[203,25331,24736],{"class":262},[203,25333,25334,25337],{"class":205,"line":1701},[203,25335,25336],{"class":262},"  --dataset.num_episodes=10",[203,25338,24736],{"class":262},[203,25340,25341,25344,25347],{"class":205,"line":1706},[203,25342,25343],{"class":262},"  --dataset.single_task=",[203,25345,25346],{"class":318},"\"Grab the green cube\"",[203,25348,24736],{"class":262},[203,25350,25351],{"class":205,"line":1712},[203,25352,25353],{"class":262},"  --resume=true\n",[1221,25355,25356],{},[160,25357,25358,25361],{},[200,25359,25360],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,25363,25364],{},[25,25365],{"alt":27,"src":25366},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25368,25370],{"id":25369},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[194,25372,25374],{"className":23913,"code":25373,"language":23915,"meta":27,"style":27},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[200,25375,25376],{"__ignoreMap":27},[203,25377,25378,25381,25384],{"class":205,"line":206},[203,25379,25380],{"class":2052},"rm",[203,25382,25383],{"class":262}," -rf",[203,25385,25386],{"class":318}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,25388,25389],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25391,25393],{"id":25392},"_63-回放指定-episode","6.3 回放指定 episode",[194,25395,25397],{"className":23913,"code":25396,"language":23915,"meta":27,"style":27},"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",[200,25398,25399,25406,25412,25418,25424,25432],{"__ignoreMap":27},[203,25400,25401,25404],{"class":205,"line":206},[203,25402,25403],{"class":2052},"lerobot-replay",[203,25405,24736],{"class":262},[203,25407,25408,25410],{"class":205,"line":124},[203,25409,24768],{"class":262},[203,25411,24736],{"class":262},[203,25413,25414,25416],{"class":205,"line":1269},[203,25415,24846],{"class":262},[203,25417,24736],{"class":262},[203,25419,25420,25422],{"class":205,"line":1284},[203,25421,24906],{"class":262},[203,25423,24736],{"class":262},[203,25425,25426,25428,25430],{"class":205,"line":1290},[203,25427,25326],{"class":262},[203,25429,25329],{"class":318},[203,25431,24736],{"class":262},[203,25433,25434],{"class":205,"line":1304},[203,25435,25436],{"class":262},"  --dataset.episode=0\n",[5216,25438,25439],{},"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":27,"searchDepth":124,"depth":124,"links":25441},[25442,25443,25444],{"id":25256,"depth":124,"text":25257},{"id":25369,"depth":124,"text":25370},{"id":25392,"depth":124,"text":25393},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25247,"description":23467},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25451,"title":25452,"body":25453,"description":23467,"extension":129,"meta":25581,"navigation":131,"path":25582,"seo":25583,"stem":25584,"__hash__":25585},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25454,"toc":25579},[25455,25459,25522,25525,25572,25577],[10,25456,25458],{"id":25457},"_7-act-模型训练","7. ACT 模型训练",[194,25460,25462],{"className":23913,"code":25461,"language":23915,"meta":27,"style":27},"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",[200,25463,25464,25471,25479,25486,25493,25500,25507,25514],{"__ignoreMap":27},[203,25465,25466,25469],{"class":205,"line":206},[203,25467,25468],{"class":2052},"lerobot-train",[203,25470,24736],{"class":262},[203,25472,25473,25475,25477],{"class":205,"line":124},[203,25474,25326],{"class":262},[203,25476,25329],{"class":318},[203,25478,24736],{"class":262},[203,25480,25481,25484],{"class":205,"line":1269},[203,25482,25483],{"class":262},"  --policy.type=act",[203,25485,24736],{"class":262},[203,25487,25488,25491],{"class":205,"line":1284},[203,25489,25490],{"class":262},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[203,25492,24736],{"class":262},[203,25494,25495,25498],{"class":205,"line":1290},[203,25496,25497],{"class":262},"  --job_name=act_so101_test",[203,25499,24736],{"class":262},[203,25501,25502,25505],{"class":205,"line":1304},[203,25503,25504],{"class":262},"  --policy.device=cuda",[203,25506,24736],{"class":262},[203,25508,25509,25512],{"class":205,"line":1310},[203,25510,25511],{"class":262},"  --wandb.enable=false",[203,25513,24736],{"class":262},[203,25515,25516,25519],{"class":205,"line":1401},[203,25517,25518],{"class":262},"  --policy.repo_id=",[203,25520,25521],{"class":318},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,25523,25524],{},"参数说明：",[1221,25526,25527,25533,25539,25545,25551,25560,25566],{},[160,25528,25529,25532],{},[200,25530,25531],{},"--dataset.repo_id","：训练数据集仓库。",[160,25534,25535,25538],{},[200,25536,25537],{},"--policy.type=act","：策略模型类型为 ACT。",[160,25540,25541,25544],{},[200,25542,25543],{},"--output_dir","：本地训练输出目录。",[160,25546,25547,25550],{},[200,25548,25549],{},"--job_name","：训练任务名称。",[160,25552,25553,25556,25557,24620],{},[200,25554,25555],{},"--policy.device","：训练设备（如 ",[200,25558,25559],{},"cuda",[160,25561,25562,25565],{},[200,25563,25564],{},"--wandb.enable","：是否启用 WandB 可视化。",[160,25567,25568,25571],{},[200,25569,25570],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,25573,25574],{},[25,25575],{"alt":27,"src":25576},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5216,25578,25439],{},{"title":27,"searchDepth":124,"depth":124,"links":25580},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25452,"description":23467},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25587,"title":25588,"body":25589,"description":23467,"extension":129,"meta":25676,"navigation":131,"path":25677,"seo":25678,"stem":25679,"__hash__":25680},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25590,"toc":25674},[25591,25594,25597,25664,25672],[10,25592,25588],{"id":25593},"_8-策略部署与自动采集",[19,25595,25596],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[194,25598,25600],{"className":23913,"code":25599,"language":23915,"meta":27,"style":27},"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",[200,25601,25602,25608,25614,25620,25628,25634,25641,25649,25657],{"__ignoreMap":27},[203,25603,25604,25606],{"class":205,"line":206},[203,25605,25267],{"class":2052},[203,25607,24736],{"class":262},[203,25609,25610,25612],{"class":205,"line":124},[203,25611,24768],{"class":262},[203,25613,24736],{"class":262},[203,25615,25616,25618],{"class":205,"line":1269},[203,25617,24846],{"class":262},[203,25619,24736],{"class":262},[203,25621,25622,25624,25626],{"class":205,"line":1284},[203,25623,24975],{"class":262},[203,25625,25294],{"class":318},[203,25627,24736],{"class":262},[203,25629,25630,25632],{"class":205,"line":1290},[203,25631,24906],{"class":262},[203,25633,24736],{"class":262},[203,25635,25636,25639],{"class":205,"line":1304},[203,25637,25638],{"class":262},"  --display_data=false",[203,25640,24736],{"class":262},[203,25642,25643,25645,25647],{"class":205,"line":1310},[203,25644,25326],{"class":262},[203,25646,25329],{"class":318},[203,25648,24736],{"class":262},[203,25650,25651,25653,25655],{"class":205,"line":1401},[203,25652,25343],{"class":262},[203,25654,25346],{"class":318},[203,25656,24736],{"class":262},[203,25658,25659,25662],{"class":205,"line":1407},[203,25660,25661],{"class":262},"  --policy.path=",[203,25663,25521],{"class":318},[1221,25665,25666],{},[160,25667,25668,25671],{},[200,25669,25670],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5216,25673,25439],{},{"title":27,"searchDepth":124,"depth":124,"links":25675},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25588,"description":23467},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25682,"title":25683,"body":25684,"description":23467,"extension":129,"meta":25713,"navigation":131,"path":25714,"seo":25715,"stem":25716,"__hash__":25717},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25685,"toc":25711},[25686,25690,25693,25699,25702,25708],[10,25687,25689],{"id":25688},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,25691,25692],{},"项目地址：",[19,25694,25695],{},[452,25696,25697],{"href":25697,"rel":25698},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23956],[19,25700,25701],{},"参考教程：",[19,25703,25704],{},[452,25705,25706],{"href":25706,"rel":25707},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23956],[19,25709,25710],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":27,"searchDepth":124,"depth":124,"links":25712},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25683,"description":23467},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25719,"title":25720,"body":25721,"description":25725,"extension":129,"meta":25726,"navigation":131,"path":25727,"seo":25728,"stem":25729,"__hash__":25730},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25722,"toc":25723},[],{"title":27,"searchDepth":124,"depth":124,"links":25724},[],"act复现",{"category":23469},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25720,"description":25725},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25732,"title":25733,"body":25734,"description":27,"extension":129,"meta":26036,"navigation":131,"path":26037,"seo":26038,"stem":26039,"__hash__":26040},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25735,"toc":26028},[25736,25739,25743,25753,25760,25767,25770,25777,25780,25783,25787,25799,25803,25849,25852,25855,25858,25861,25864,25868,25906,25912,25916,25970,25975,25978,25981,25986,25989,25994,25997,26000,26004,26007,26010,26014],[10,25737,25733],{"id":25738},"_1简介",[174,25740,25742],{"id":25741},"_11什么是-docker","1.1什么是 Docker？",[19,25744,25745,25746,25749,25750],{},"Docker 是一个开源的 ",[363,25747,25748],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[363,25751,25752],{},"一次构建，到处运行。",[19,25754,25755,25756,25759],{},"“ ",[363,25757,25758],{},"一次构建，到处运行"," ”也就是说：",[157,25761,25762],{},[160,25763,25764],{},[363,25765,25766],{},"之前：",[19,25768,25769],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[157,25771,25772],{},[160,25773,25774],{},[363,25775,25776],{},"使用docker后：",[19,25778,25779],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,25781,25782],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[174,25784,25786],{"id":25785},"_12它是怎么工作的","1.2.它是怎么工作的？",[1221,25788,25789,25792],{},[160,25790,25791],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[160,25793,25794,25795,25798],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[363,25796,25797],{},"无论在哪运行都一样稳定"," 。",[174,25800,25802],{"id":25801},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[351,25804,25805,25815],{},[354,25806,25807],{},[357,25808,25809,25812],{},[360,25810,25811],{"align":23827},"概念",[360,25813,25814],{"align":23827},"解释",[398,25816,25817,25825,25833,25841],{},[357,25818,25819,25822],{},[403,25820,25821],{"align":23827},"镜像",[403,25823,25824],{"align":23827},"Image，运行容器的模板，像是一个应用快照",[357,25826,25827,25830],{},[403,25828,25829],{"align":23827},"容器",[403,25831,25832],{"align":23827},"Container，运行中的镜像实例，有自己的文件系统、网络等",[357,25834,25835,25838],{},[403,25836,25837],{"align":23827},"Dockerfile",[403,25839,25840],{"align":23827},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[357,25842,25843,25846],{},[403,25844,25845],{"align":23827},"仓库",[403,25847,25848],{"align":23827},"Registry，存放镜像的地方，比如 Docker Hub",[19,25850,25851],{},"抽象化理解:",[19,25853,25854],{},"Docker镜像≈C++类",[19,25856,25857],{},"Docker容器≈C++类实例(即对象)",[19,25859,25860],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,25862,25863],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[174,25865,25867],{"id":25866},"_14类比理解","1.4.类比理解",[351,25869,25870,25880],{},[354,25871,25872],{},[357,25873,25874,25877],{},[360,25875,25876],{"align":23827},"传统部署",[360,25878,25879],{"align":23827},"Docker部署",[398,25881,25882,25890,25898],{},[357,25883,25884,25887],{},[403,25885,25886],{"align":23827},"手动安装依赖、调试版本不一致问题",[403,25888,25889],{"align":23827},"一次打包环境和代码",[357,25891,25892,25895],{},[403,25893,25894],{"align":23827},"程序“裸奔”跑在系统上",[403,25896,25897],{"align":23827},"程序“穿着容器”隔离运行",[357,25899,25900,25903],{},[403,25901,25902],{"align":23827},"容易“在我电脑上能跑”",[403,25904,25905],{"align":23827},"保证“无论在哪都能跑”",[19,25907,25908,25909],{},"就像快递包裹： ",[363,25910,25911],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[174,25913,25915],{"id":25914},"_15docker-的核心优势","1.5.Docker 的核心优势",[351,25917,25918,25928],{},[354,25919,25920],{},[357,25921,25922,25925],{},[360,25923,25924],{"align":23827},"优势",[360,25926,25927],{"align":23827},"说明",[398,25929,25930,25938,25946,25954,25962],{},[357,25931,25932,25935],{},[403,25933,25934],{"align":23827},"轻量级",[403,25936,25937],{"align":23827},"基于系统内核共享，启动速度快，占资源少",[357,25939,25940,25943],{},[403,25941,25942],{"align":23827},"跨平台",[403,25944,25945],{"align":23827},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[357,25947,25948,25951],{},[403,25949,25950],{"align":23827},"易于迁移部署",[403,25952,25953],{"align":23827},"应用和环境一起封装，不怕依赖不一致",[357,25955,25956,25959],{},[403,25957,25958],{"align":23827},"易于版本控制",[403,25960,25961],{"align":23827},"镜像版本可控，支持回滚",[357,25963,25964,25967],{},[403,25965,25966],{"align":23827},"生态丰富",[403,25968,25969],{"align":23827},"Docker Hub 上有成千上万的现成镜像可用",[157,25971,25972],{},[160,25973,25974],{},"在Linux上可以几乎实现无性能损失。",[19,25976,25977],{},"docker里的发行版和本机共用Linux内核。",[19,25979,25980],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[157,25982,25983],{},[160,25984,25985],{},"可以快速部署在绝大多数Linux发行版",[19,25987,25988],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[157,25990,25991],{},[160,25992,25993],{},"配置环境简单",[19,25995,25996],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,25998,25999],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[157,26001,26002],{},[160,26003,25966],{},[19,26005,26006],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26008,26009],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[174,26011,26013],{"id":26012},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1221,26015,26016,26019,26022,26025],{},[160,26017,26018],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[160,26020,26021],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[160,26023,26024],{},"微服务架构：每个服务一个容器，灵活组合",[160,26026,26027],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":27,"searchDepth":124,"depth":124,"links":26029},[26030,26031,26032,26033,26034,26035],{"id":25741,"depth":1269,"text":25742},{"id":25785,"depth":1269,"text":25786},{"id":25801,"depth":1269,"text":25802},{"id":25866,"depth":1269,"text":25867},{"id":25914,"depth":1269,"text":25915},{"id":26012,"depth":1269,"text":26013},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25733,"description":27},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26042,"title":26043,"body":26044,"description":27,"extension":129,"meta":26777,"navigation":131,"path":26778,"seo":26779,"stem":26780,"__hash__":26781},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26045,"toc":26772},[26046,26049,26053,26056,26059,26065,26071,26075,26084,26087,26144,26147,26198,26201,26284,26287,26324,26328,26339,26352,26359,26362,26442,26445,26495,26498,26521,26525,26532,26535,26551,26557,26560,26576,26582,26585,26601,26615,26621,26641,26647,26650,26662,26668,26671,26685,26691,26694,26714,26719,26722,26725,26729,26732,26735,26738,26745,26748,26751,26754,26759,26764,26769],[10,26047,26043],{"id":26048},"_2安装docker",[174,26050,26052],{"id":26051},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26054,26055],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26057,26058],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26060,26061],{},[452,26062,26063],{"href":26063,"rel":26064},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23956],[19,26066,26067],{},[452,26068,26069],{"href":26069,"rel":26070},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23956],[22088,26072,26074],{"id":26073},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26076,26077,26078,26083],{},"以下内容根据 ",[452,26079,26082],{"href":26080,"rel":26081},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23956],"官方文档"," 修改而来。",[19,26085,26086],{},"如果你过去安装过 docker，先删掉：",[194,26088,26090],{"className":23913,"code":26089,"language":23915,"meta":27,"style":27},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[200,26091,26092],{"__ignoreMap":27},[203,26093,26094,26096,26099,26102,26105,26108,26111,26114,26117,26120,26123,26126,26129,26132,26135,26138,26141],{"class":205,"line":206},[203,26095,3114],{"class":209},[203,26097,26098],{"class":213}," pkg ",[203,26100,26101],{"class":209},"in",[203,26103,26104],{"class":318}," docker.io",[203,26106,26107],{"class":318}," docker-doc",[203,26109,26110],{"class":318}," docker-compose",[203,26112,26113],{"class":318}," docker-compose-v2",[203,26115,26116],{"class":318}," podman-docker",[203,26118,26119],{"class":318}," containerd",[203,26121,26122],{"class":318}," runc",[203,26124,26125],{"class":213},"; ",[203,26127,26128],{"class":209},"do",[203,26130,26131],{"class":2052}," sudo",[203,26133,26134],{"class":318}," apt-get",[203,26136,26137],{"class":318}," remove",[203,26139,26140],{"class":213}," $pkg; ",[203,26142,26143],{"class":209},"done\n",[19,26145,26146],{},"首先安装依赖和GPG：",[194,26148,26152],{"className":26149,"code":26150,"language":26151,"meta":27,"style":27},"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",[200,26153,26154,26159,26164,26169,26174,26179,26184,26188,26193],{"__ignoreMap":27},[203,26155,26156],{"class":205,"line":206},[203,26157,26158],{},"# Add Docker's official GPG key:\n",[203,26160,26161],{"class":205,"line":124},[203,26162,26163],{},"sudo apt-get update\n",[203,26165,26166],{"class":205,"line":1269},[203,26167,26168],{},"sudo apt-get install ca-certificates curl\n",[203,26170,26171],{"class":205,"line":1284},[203,26172,26173],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[203,26175,26176],{"class":205,"line":1290},[203,26177,26178],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[203,26180,26181],{"class":205,"line":1304},[203,26182,26183],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[203,26185,26186],{"class":205,"line":1310},[203,26187,2489],{"emptyLinePlaceholder":131},[203,26189,26190],{"class":205,"line":1401},[203,26191,26192],{},"# 如果上面这行报错就弄下面这行\n",[203,26194,26195],{"class":205,"line":1407},[203,26196,26197],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26199,26200],{},"信任 Docker 的 GPG 公钥并添加仓库：",[194,26202,26204],{"className":23913,"code":26203,"language":23915,"meta":27,"style":27},"# 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",[200,26205,26206,26211,26217,26234,26267],{"__ignoreMap":27},[203,26207,26208],{"class":205,"line":206},[203,26209,26210],{"class":272},"# Add the repository to Apt sources:\n",[203,26212,26213,26215],{"class":205,"line":124},[203,26214,25183],{"class":262},[203,26216,24736],{"class":262},[203,26218,26219,26222,26225,26228,26231],{"class":205,"line":1269},[203,26220,26221],{"class":318},"  \"deb [arch=$(",[203,26223,26224],{"class":2052},"dpkg",[203,26226,26227],{"class":262}," --print-architecture",[203,26229,26230],{"class":318},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[203,26232,26233],{"class":262},"\\\n",[203,26235,26236,26239,26241,26243,26246,26249,26251,26253,26256,26258,26260,26263,26265],{"class":205,"line":1284},[203,26237,26238],{"class":318},"  \"",[203,26240,25157],{"class":213},[203,26242,772],{"class":262},[203,26244,26245],{"class":318}," \u002Fetc\u002Fos-release",[203,26247,26248],{"class":213}," && ",[203,26250,25183],{"class":262},[203,26252,9814],{"class":318},[203,26254,26255],{"class":213},"$VERSION_CODENAME",[203,26257,465],{"class":318},[203,26259,643],{"class":213},[203,26261,26262],{"class":318},"\" stable\"",[203,26264,25167],{"class":209},[203,26266,24736],{"class":262},[203,26268,26269,26272,26275,26278,26281],{"class":205,"line":1290},[203,26270,26271],{"class":2052},"  sudo",[203,26273,26274],{"class":318}," tee",[203,26276,26277],{"class":318}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[203,26279,26280],{"class":209}," >",[203,26282,26283],{"class":318}," \u002Fdev\u002Fnull\n",[19,26285,26286],{},"最后安装",[194,26288,26290],{"className":23913,"code":26289,"language":23915,"meta":27,"style":27},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[200,26291,26292,26301],{"__ignoreMap":27},[203,26293,26294,26296,26298],{"class":205,"line":206},[203,26295,24634],{"class":2052},[203,26297,26134],{"class":318},[203,26299,26300],{"class":318}," update\n",[203,26302,26303,26305,26307,26309,26312,26315,26318,26321],{"class":205,"line":124},[203,26304,24634],{"class":2052},[203,26306,26134],{"class":318},[203,26308,23925],{"class":318},[203,26310,26311],{"class":318}," docker-ce",[203,26313,26314],{"class":318}," docker-ce-cli",[203,26316,26317],{"class":318}," containerd.io",[203,26319,26320],{"class":318}," docker-buildx-plugin",[203,26322,26323],{"class":318}," docker-compose-plugin\n",[22088,26325,26327],{"id":26326},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26329,26330,26331,26334,26335,26338],{},"查看自己自己包管理工具版本（dnf是 ",[363,26332,26333],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[363,26336,26337],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[194,26340,26342],{"className":23913,"code":26341,"language":23915,"meta":27,"style":27},"dnf --version\n",[200,26343,26344],{"__ignoreMap":27},[203,26345,26346,26349],{"class":205,"line":206},[203,26347,26348],{"class":2052},"dnf",[203,26350,26351],{"class":262}," --version\n",[19,26353,26077,26354,26358],{},[452,26355,26082],{"href":26356,"rel":26357},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23956]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,26360,26361],{},"如果你之前安装过 docker，请先删掉",[194,26363,26365],{"className":23913,"code":26364,"language":23915,"meta":27,"style":27},"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",[200,26366,26367,26381,26388,26395,26402,26409,26416,26423,26430,26437],{"__ignoreMap":27},[203,26368,26369,26371,26374,26376,26379],{"class":205,"line":206},[203,26370,24634],{"class":2052},[203,26372,26373],{"class":318}," dnf",[203,26375,26137],{"class":318},[203,26377,26378],{"class":318}," docker",[203,26380,24736],{"class":262},[203,26382,26383,26386],{"class":205,"line":124},[203,26384,26385],{"class":318},"                  docker-client",[203,26387,24736],{"class":262},[203,26389,26390,26393],{"class":205,"line":1269},[203,26391,26392],{"class":318},"                  docker-client-latest",[203,26394,24736],{"class":262},[203,26396,26397,26400],{"class":205,"line":1284},[203,26398,26399],{"class":318},"                  docker-common",[203,26401,24736],{"class":262},[203,26403,26404,26407],{"class":205,"line":1290},[203,26405,26406],{"class":318},"                  docker-latest",[203,26408,24736],{"class":262},[203,26410,26411,26414],{"class":205,"line":1304},[203,26412,26413],{"class":318},"                  docker-latest-logrotate",[203,26415,24736],{"class":262},[203,26417,26418,26421],{"class":205,"line":1310},[203,26419,26420],{"class":318},"                  docker-logrotate",[203,26422,24736],{"class":262},[203,26424,26425,26428],{"class":205,"line":1401},[203,26426,26427],{"class":318},"                  docker-selinux",[203,26429,24736],{"class":262},[203,26431,26432,26435],{"class":205,"line":1407},[203,26433,26434],{"class":318},"                  docker-engine-selinux",[203,26436,24736],{"class":262},[203,26438,26439],{"class":205,"line":1419},[203,26440,26441],{"class":318},"                  docker-engine\n",[19,26443,26444],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[194,26446,26448],{"className":23913,"code":26447,"language":23915,"meta":27,"style":27},"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",[200,26449,26450,26464,26479],{"__ignoreMap":27},[203,26451,26452,26454,26456,26459,26461],{"class":205,"line":206},[203,26453,24634],{"class":2052},[203,26455,26373],{"class":318},[203,26457,26458],{"class":262}," -y",[203,26460,23925],{"class":318},[203,26462,26463],{"class":318}," dnf-plugins-core\n",[203,26465,26466,26468,26470,26473,26476],{"class":205,"line":124},[203,26467,24634],{"class":2052},[203,26469,26373],{"class":318},[203,26471,26472],{"class":318}," config-manager",[203,26474,26475],{"class":318}," addrepo",[203,26477,26478],{"class":262}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[203,26480,26481,26483,26486,26489,26492],{"class":205,"line":1269},[203,26482,24634],{"class":2052},[203,26484,26485],{"class":318}," sed",[203,26487,26488],{"class":262}," -i",[203,26490,26491],{"class":318}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[203,26493,26494],{"class":318}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,26496,26497],{},"最后安装：",[194,26499,26501],{"className":23913,"code":26500,"language":23915,"meta":27,"style":27},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[200,26502,26503],{"__ignoreMap":27},[203,26504,26505,26507,26509,26511,26513,26515,26517,26519],{"class":205,"line":206},[203,26506,24634],{"class":2052},[203,26508,26373],{"class":318},[203,26510,23925],{"class":318},[203,26512,26311],{"class":318},[203,26514,26314],{"class":318},[203,26516,26317],{"class":318},[203,26518,26320],{"class":318},[203,26520,26323],{"class":318},[174,26522,26524],{"id":26523},"_22配置环境","2.2.配置环境",[22088,26526,26528,26531],{"id":26527},"_221检查-docker-服务状态",[363,26529,26530],{},"2.2.1.检查 Docker 服务状态"," ：",[19,26533,26534],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[194,26536,26538],{"className":23913,"code":26537,"language":23915,"meta":27,"style":27},"systemctl status docker\n",[200,26539,26540],{"__ignoreMap":27},[203,26541,26542,26545,26548],{"class":205,"line":206},[203,26543,26544],{"class":2052},"systemctl",[203,26546,26547],{"class":318}," status",[203,26549,26550],{"class":318}," docker\n",[22088,26552,26554,26531],{"id":26553},"_222启动-docker-服务",[363,26555,26556],{},"2.2.2.启动 Docker 服务",[19,26558,26559],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[194,26561,26563],{"className":23913,"code":26562,"language":23915,"meta":27,"style":27},"sudo systemctl start docker\n",[200,26564,26565],{"__ignoreMap":27},[203,26566,26567,26569,26572,26574],{"class":205,"line":206},[203,26568,24634],{"class":2052},[203,26570,26571],{"class":318}," systemctl",[203,26573,4273],{"class":318},[203,26575,26550],{"class":318},[22088,26577,26579,26531],{"id":26578},"_223设置-docker-开机自启",[363,26580,26581],{},"2.2.3.设置 Docker 开机自启",[19,26583,26584],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[194,26586,26588],{"className":23913,"code":26587,"language":23915,"meta":27,"style":27},"sudo systemctl enable docker\n",[200,26589,26590],{"__ignoreMap":27},[203,26591,26592,26594,26596,26599],{"class":205,"line":206},[203,26593,24634],{"class":2052},[203,26595,26571],{"class":318},[203,26597,26598],{"class":318}," enable",[203,26600,26550],{"class":318},[22088,26602,26604,13885,26607,13885,26612,26531],{"id":26603},"_224将用户添加到-docker-组",[363,26605,26606],{},"2.2.4.将用户添加到",[363,26608,26609],{},[200,26610,26611],{},"docker",[363,26613,26614],{},"组",[19,26616,26617,26618,26620],{},"使用以下命令将当前用户添加到 ",[200,26619,26611],{}," 组：",[194,26622,26624],{"className":23913,"code":26623,"language":23915,"meta":27,"style":27},"sudo usermod -aG docker $USER\n",[200,26625,26626],{"__ignoreMap":27},[203,26627,26628,26630,26633,26636,26638],{"class":205,"line":206},[203,26629,24634],{"class":2052},[203,26631,26632],{"class":318}," usermod",[203,26634,26635],{"class":262}," -aG",[203,26637,26378],{"class":318},[203,26639,26640],{"class":213}," $USER\n",[22088,26642,26644,26531],{"id":26643},"_225退出并重新登录",[363,26645,26646],{},"2.2.5.退出并重新登录",[19,26648,26649],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[194,26651,26653],{"className":23913,"code":26652,"language":23915,"meta":27,"style":27},"newgrp docker\n",[200,26654,26655],{"__ignoreMap":27},[203,26656,26657,26660],{"class":205,"line":206},[203,26658,26659],{"class":2052},"newgrp",[203,26661,26550],{"class":318},[22088,26663,26665,26531],{"id":26664},"_226重新启动-docker-服务如果需要",[363,26666,26667],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,26669,26670],{},"确保 Docker 服务正在运行，可以使用以下命令：",[194,26672,26673],{"className":23913,"code":26562,"language":23915,"meta":27,"style":27},[200,26674,26675],{"__ignoreMap":27},[203,26676,26677,26679,26681,26683],{"class":205,"line":206},[203,26678,24634],{"class":2052},[203,26680,26571],{"class":318},[203,26682,4273],{"class":318},[203,26684,26550],{"class":318},[22088,26686,26688,26531],{"id":26687},"_227重启电脑后检查-docker-服务状态",[363,26689,26690],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,26692,26693],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[194,26695,26697],{"className":23913,"code":26696,"language":23915,"meta":27,"style":27},"sudo reboot\nsystemctl status docker\n",[200,26698,26699,26706],{"__ignoreMap":27},[203,26700,26701,26703],{"class":205,"line":206},[203,26702,24634],{"class":2052},[203,26704,26705],{"class":318}," reboot\n",[203,26707,26708,26710,26712],{"class":205,"line":124},[203,26709,26544],{"class":2052},[203,26711,26547],{"class":318},[203,26713,26550],{"class":318},[19,26715,26716],{},[25,26717],{"alt":27,"src":26718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,26720,26721],{},"第三行显示enabled说明开机自启动成功",[19,26723,26724],{},"按q退出",[174,26726,26728],{"id":26727},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,26730,26731],{},"优先使用linux来使用docker是比较好的",[19,26733,26734],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,26736,26737],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,26739,26740,26741],{},"官方下载安装:",[452,26742,26743],{"href":26743,"rel":26744},"https:\u002F\u002Fwww.docker.com\u002F",[23956],[19,26746,26747],{},"Windows的Docker显卡直通与USB直通:",[19,26749,26750],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,26752,26753],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,26755,26756],{},[25,26757],{"alt":27,"src":26758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,26760,26761],{},[25,26762],{"alt":27,"src":26763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,26765,26766],{},[25,26767],{"alt":27,"src":26768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5216,26770,26771],{},"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":27,"searchDepth":124,"depth":124,"links":26773},[26774,26775,26776],{"id":26051,"depth":1269,"text":26052},{"id":26523,"depth":1269,"text":26524},{"id":26727,"depth":1269,"text":26728},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26043,"description":27},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26783,"title":26784,"body":26785,"description":26792,"extension":129,"meta":27485,"navigation":131,"path":27486,"seo":27487,"stem":27488,"__hash__":27489},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26786,"toc":27479},[26787,26790,26793,26797,26802,26807,26810,26838,26843,26852,26855,26860,26864,26871,26876,26882,26886,26889,26893,26898,26990,26995,27013,27018,27039,27044,27060,27064,27069,27098,27103,27149,27154,27198,27206,27223,27228,27244,27249,27263,27266,27269,27272,27275,27304,27307,27312,27316,27319,27322,27328,27331,27334,27337,27399,27406,27411,27414,27432,27436,27439,27456,27459,27462,27476],[10,26788,26784],{"id":26789},"_3docker直通",[19,26791,26792],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[174,26794,26796],{"id":26795},"_31usb直通","3.1.USB直通",[19,26798,26799],{},[25,26800],{"alt":27,"src":26801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[157,26803,26804],{},[160,26805,26806],{},"方法一(不是很推荐新手)：",[19,26808,26809],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[194,26811,26813],{"className":23913,"code":26812,"language":23915,"meta":27,"style":27},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[200,26814,26815,26823,26828],{"__ignoreMap":27},[203,26816,26817,26820],{"class":205,"line":206},[203,26818,26819],{"class":2052},"ls",[203,26821,26822],{"class":318}," \u002Fdev\n",[203,26824,26825],{"class":205,"line":124},[203,26826,26827],{"class":272},"#例如\n",[203,26829,26830,26833,26835],{"class":205,"line":1269},[203,26831,26832],{"class":213},"--device",[203,26834,259],{"class":209},[203,26836,26837],{"class":318},"\u002Fdev\u002Ftty_USB0\n",[157,26839,26840],{"start":124},[160,26841,26842],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[194,26844,26846],{"className":23913,"code":26845,"language":23915,"meta":27,"style":27},"--privileged\n",[200,26847,26848],{"__ignoreMap":27},[203,26849,26850],{"class":205,"line":206},[203,26851,26845],{"class":2052},[19,26853,26854],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,26856,26857],{},[25,26858],{"alt":27,"src":26859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[174,26861,26863],{"id":26862},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,26865,26866,26867,26870],{},"NVIDIA Container Toolkit使用户 ",[363,26868,26869],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,26872,26873],{},[25,26874],{"alt":27,"src":26875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,26877,26878],{},[452,26879,26880],{"href":26880,"rel":26881},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23956],[22088,26883,26885],{"id":26884},"_321安装","3.2.1.安装",[19,26887,26888],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23000,26890,26892],{"id":26891},"_3211ubuntu","3.2.1.1.Ubuntu",[157,26894,26895],{},[160,26896,26897],{},"配置存储库 并更新",[194,26899,26901],{"className":23913,"code":26900,"language":23915,"meta":27,"style":27},"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",[200,26902,26903,26932,26952,26964,26976,26982],{"__ignoreMap":27},[203,26904,26905,26908,26911,26914,26916,26918,26921,26924,26927,26930],{"class":205,"line":206},[203,26906,26907],{"class":2052},"curl",[203,26909,26910],{"class":262}," -fsSL",[203,26912,26913],{"class":318}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[203,26915,25167],{"class":209},[203,26917,26131],{"class":2052},[203,26919,26920],{"class":318}," gpg",[203,26922,26923],{"class":262}," --dearmor",[203,26925,26926],{"class":262}," -o",[203,26928,26929],{"class":318}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[203,26931,24736],{"class":262},[203,26933,26934,26937,26939,26942,26945,26948,26950],{"class":205,"line":124},[203,26935,26936],{"class":213},"  && ",[203,26938,26907],{"class":2052},[203,26940,26941],{"class":262}," -s",[203,26943,26944],{"class":262}," -L",[203,26946,26947],{"class":318}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[203,26949,25167],{"class":209},[203,26951,24736],{"class":262},[203,26953,26954,26957,26960,26962],{"class":205,"line":1269},[203,26955,26956],{"class":2052},"    sed",[203,26958,26959],{"class":318}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[203,26961,25167],{"class":209},[203,26963,24736],{"class":262},[203,26965,26966,26969,26971,26974],{"class":205,"line":1284},[203,26967,26968],{"class":2052},"    sudo",[203,26970,26274],{"class":318},[203,26972,26973],{"class":318}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[203,26975,24736],{"class":262},[203,26977,26978,26980],{"class":205,"line":1290},[203,26979,26936],{"class":213},[203,26981,26233],{"class":262},[203,26983,26984,26986,26988],{"class":205,"line":1304},[203,26985,26968],{"class":2052},[203,26987,26134],{"class":318},[203,26989,26300],{"class":318},[157,26991,26992],{"start":124},[160,26993,26994],{},"安装nvidia-docker2",[194,26996,26998],{"className":23913,"code":26997,"language":23915,"meta":27,"style":27},"sudo apt-get install -y nvidia-docker2\n",[200,26999,27000],{"__ignoreMap":27},[203,27001,27002,27004,27006,27008,27010],{"class":205,"line":206},[203,27003,24634],{"class":2052},[203,27005,26134],{"class":318},[203,27007,23925],{"class":318},[203,27009,26458],{"class":262},[203,27011,27012],{"class":318}," nvidia-docker2\n",[157,27014,27015],{"start":1269},[160,27016,27017],{},"使用nvidia-ctk命令配置container runtime",[194,27019,27021],{"className":23913,"code":27020,"language":23915,"meta":27,"style":27},"sudo nvidia-ctk runtime configure --runtime=docker\n",[200,27022,27023],{"__ignoreMap":27},[203,27024,27025,27027,27030,27033,27036],{"class":205,"line":206},[203,27026,24634],{"class":2052},[203,27028,27029],{"class":318}," nvidia-ctk",[203,27031,27032],{"class":318}," runtime",[203,27034,27035],{"class":318}," configure",[203,27037,27038],{"class":262}," --runtime=docker\n",[157,27040,27041],{"start":1284},[160,27042,27043],{},"重启docker服务:",[194,27045,27047],{"className":23913,"code":27046,"language":23915,"meta":27,"style":27},"sudo systemctl restart docker\n",[200,27048,27049],{"__ignoreMap":27},[203,27050,27051,27053,27055,27058],{"class":205,"line":206},[203,27052,24634],{"class":2052},[203,27054,26571],{"class":318},[203,27056,27057],{"class":318}," restart",[203,27059,26550],{"class":318},[23000,27061,27063],{"id":27062},"_3212fedora","3.2.1.2.Fedora",[157,27065,27066],{},[160,27067,27068],{},"配置存储库",[194,27070,27072],{"className":23913,"code":27071,"language":23915,"meta":27,"style":27},"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",[200,27073,27074,27089],{"__ignoreMap":27},[203,27075,27076,27078,27080,27082,27085,27087],{"class":205,"line":206},[203,27077,26907],{"class":2052},[203,27079,26941],{"class":262},[203,27081,26944],{"class":262},[203,27083,27084],{"class":318}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[203,27086,25167],{"class":209},[203,27088,24736],{"class":262},[203,27090,27091,27093,27095],{"class":205,"line":124},[203,27092,24634],{"class":2052},[203,27094,26274],{"class":318},[203,27096,27097],{"class":318}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[157,27099,27100],{"start":124},[160,27101,27102],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[194,27104,27106],{"className":23913,"code":27105,"language":23915,"meta":27,"style":27},"# 如果是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",[200,27107,27108,27113,27127,27131,27136],{"__ignoreMap":27},[203,27109,27110],{"class":205,"line":206},[203,27111,27112],{"class":272},"# 如果是RHEL或者Rocky（DNF4）\n",[203,27114,27115,27117,27119,27121,27124],{"class":205,"line":124},[203,27116,24634],{"class":2052},[203,27118,26373],{"class":318},[203,27120,26472],{"class":318},[203,27122,27123],{"class":262}," --add-repo",[203,27125,27126],{"class":318}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[203,27128,27129],{"class":205,"line":1269},[203,27130,2489],{"emptyLinePlaceholder":131},[203,27132,27133],{"class":205,"line":1284},[203,27134,27135],{"class":272},"# 如果是Feodra41+（DNF5）\n",[203,27137,27138,27140,27142,27144,27146],{"class":205,"line":1290},[203,27139,24634],{"class":2052},[203,27141,26373],{"class":318},[203,27143,26472],{"class":318},[203,27145,26475],{"class":318},[203,27147,27148],{"class":262}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[157,27150,27151],{"start":1269},[160,27152,27153],{},"安装NVIDIA Container Toolki包",[194,27155,27157],{"className":23913,"code":27156,"language":23915,"meta":27,"style":27},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[200,27158,27159,27164,27177,27181,27186],{"__ignoreMap":27},[203,27160,27161],{"class":205,"line":206},[203,27162,27163],{"class":272},"# 如果是RHEL或者Rocky\n",[203,27165,27166,27168,27170,27172,27174],{"class":205,"line":124},[203,27167,24634],{"class":2052},[203,27169,26373],{"class":318},[203,27171,23925],{"class":318},[203,27173,26458],{"class":262},[203,27175,27176],{"class":318}," nvidia-container-toolkit\n",[203,27178,27179],{"class":205,"line":1269},[203,27180,2489],{"emptyLinePlaceholder":131},[203,27182,27183],{"class":205,"line":1284},[203,27184,27185],{"class":272},"# 如果是Fedora\n",[203,27187,27188,27190,27192,27194,27196],{"class":205,"line":1290},[203,27189,24634],{"class":2052},[203,27191,26373],{"class":318},[203,27193,23925],{"class":318},[203,27195,26458],{"class":262},[203,27197,27176],{"class":318},[157,27199,27200],{"start":1284},[160,27201,27202,27203,27205],{},"安装nvidia-docker2 ： 在Fedora上使用",[200,27204,26348],{},"进行安装",[194,27207,27209],{"className":23913,"code":27208,"language":23915,"meta":27,"style":27},"sudo dnf install -y nvidia-docker2\n",[200,27210,27211],{"__ignoreMap":27},[203,27212,27213,27215,27217,27219,27221],{"class":205,"line":206},[203,27214,24634],{"class":2052},[203,27216,26373],{"class":318},[203,27218,23925],{"class":318},[203,27220,26458],{"class":262},[203,27222,27012],{"class":318},[157,27224,27225],{"start":1290},[160,27226,27227],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[194,27229,27230],{"className":23913,"code":27020,"language":23915,"meta":27,"style":27},[200,27231,27232],{"__ignoreMap":27},[203,27233,27234,27236,27238,27240,27242],{"class":205,"line":206},[203,27235,24634],{"class":2052},[203,27237,27029],{"class":318},[203,27239,27032],{"class":318},[203,27241,27035],{"class":318},[203,27243,27038],{"class":262},[157,27245,27246],{"start":1304},[160,27247,27248],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[194,27250,27251],{"className":23913,"code":27046,"language":23915,"meta":27,"style":27},[200,27252,27253],{"__ignoreMap":27},[203,27254,27255,27257,27259,27261],{"class":205,"line":206},[203,27256,24634],{"class":2052},[203,27258,26571],{"class":318},[203,27260,27057],{"class":318},[203,27262,26550],{"class":318},[19,27264,27265],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27267,27268],{},"方法：",[19,27270,27271],{},"1️⃣nvidia-smi",[19,27273,27274],{},"2️⃣运行nvidia cuda 容器进行测试",[194,27276,27278],{"className":23913,"code":27277,"language":23915,"meta":27,"style":27},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[200,27279,27280],{"__ignoreMap":27},[203,27281,27282,27284,27286,27289,27292,27295,27298,27301],{"class":205,"line":206},[203,27283,24634],{"class":2052},[203,27285,26378],{"class":318},[203,27287,27288],{"class":318}," run",[203,27290,27291],{"class":262}," --rm",[203,27293,27294],{"class":262}," --gpus",[203,27296,27297],{"class":318}," all",[203,27299,27300],{"class":318}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[203,27302,27303],{"class":318}," nvidia-smi\n",[19,27305,27306],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27308,27309],{},[25,27310],{"alt":27,"src":27311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[174,27313,27315],{"id":27314},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27317,27318],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27320,27321],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27323,27324],{},[452,27325,27326],{"href":27326,"rel":27327},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23956],[19,27329,27330],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27332,27333],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27335,27336],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[351,27338,27339,27355],{},[354,27340,27341],{},[357,27342,27343,27346,27349,27352],{},[360,27344,27345],{"align":23827},"镜像类型",[360,27347,27348],{"align":23827},"适用场景",[360,27350,27351],{"align":23827},"示例标签",[360,27353,27354],{"align":23827},"大小",[398,27356,27357,27371,27385],{},[357,27358,27359,27362,27365,27368],{},[403,27360,27361],{"align":23827},"base",[403,27363,27364],{"align":23827},"仅需 CUDA 运行时库",[403,27366,27367],{"align":23827},"12.4.0-base-ubuntu22.04",[403,27369,27370],{"align":23827},"~240MB",[357,27372,27373,27376,27379,27382],{},[403,27374,27375],{"align":23827},"runtime",[403,27377,27378],{"align":23827},"部署编译后的应用（含数学库）",[403,27380,27381],{"align":23827},"12.4.0-runtime-ubuntu22.04",[403,27383,27384],{"align":23827},"~2GB",[357,27386,27387,27390,27393,27396],{},[403,27388,27389],{"align":23827},"devel",[403,27391,27392],{"align":23827},"开发环境（含编译工具）",[403,27394,27395],{"align":23827},"12.4.0-devel-ubuntu22.04",[403,27397,27398],{"align":23827},"~3GB",[19,27400,27401,27402,27405],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[200,27403,27404],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27407,27408],{},[25,27409],{"alt":27,"src":27410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27412,27413],{},"在dockerfile里就可以开头这么写：",[194,27415,27417],{"className":23913,"code":27416,"language":23915,"meta":27,"style":27},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[200,27418,27419,27424],{"__ignoreMap":27},[203,27420,27421],{"class":205,"line":206},[203,27422,27423],{"class":272},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[203,27425,27426,27429],{"class":205,"line":124},[203,27427,27428],{"class":2052},"FROM",[203,27430,27431],{"class":318}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[174,27433,27435],{"id":27434},"_34配置以太网","3.4.配置以太网",[19,27437,27438],{},"指定网络模式",[194,27440,27442],{"className":23913,"code":27441,"language":23915,"meta":27,"style":27},"--net=host \\\n",[200,27443,27444],{"__ignoreMap":27},[203,27445,27446,27449,27451,27454],{"class":205,"line":206},[203,27447,27448],{"class":213},"--net",[203,27450,259],{"class":209},[203,27452,27453],{"class":318},"host",[203,27455,24736],{"class":2052},[19,27457,27458],{},"启动参数里加上这行即可。具体在下方",[19,27460,27461],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1221,27463,27464,27467,27470,27473],{},[160,27465,27466],{},"--net=bridge:默认选项，表示连接到默认的网桥",[160,27468,27469],{},"--net=host:容器使用宿主机的网络",[160,27471,27472],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[160,27474,27475],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5216,27477,27478],{},"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":27,"searchDepth":124,"depth":124,"links":27480},[27481,27482,27483,27484],{"id":26795,"depth":1269,"text":26796},{"id":26862,"depth":1269,"text":26863},{"id":27314,"depth":1269,"text":27315},{"id":27434,"depth":1269,"text":27435},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26784,"description":26792},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27491,"title":27492,"body":27493,"description":27500,"extension":129,"meta":27506,"navigation":131,"path":27507,"seo":27508,"stem":27509,"__hash__":27510},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27494,"toc":27504},[27495,27498,27501],[10,27496,27492],{"id":27497},"_4dockerhub换源",[19,27499,27500],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,27502,27503],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":27,"searchDepth":124,"depth":124,"links":27505},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27492,"description":27500},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27512,"title":27513,"body":27514,"description":27,"extension":129,"meta":28526,"navigation":131,"path":28527,"seo":28528,"stem":28529,"__hash__":28530},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27515,"toc":28521},[27516,27519,27523,27529,27533,27536,27876,27879,27882,27885,27890,27895,27898,27901,27904,27907,27926,27929,27940,27946,28128,28138,28154,28417,28419,28444,28459,28468,28518],[10,27517,27513],{"id":27518},"_5docker命令学习",[174,27520,27522],{"id":27521},"_51参考文档","5.1.参考文档",[19,27524,27525],{},[452,27526,27527],{"href":27527,"rel":27528},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23956],[174,27530,27532],{"id":27531},"_52常用命令","5.2.常用命令",[19,27534,27535],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[351,27537,27538,27551],{},[354,27539,27540],{},[357,27541,27542,27545,27548],{},[360,27543,27544],{"align":23827},"命令",[360,27546,27547],{"align":23827},"描述",[360,27549,27550],{"align":23827},"示例",[398,27552,27553,27564,27575,27586,27597,27608,27619,27630,27640,27651,27662,27673,27683,27694,27705,27716,27726,27736,27746,27756,27767,27778,27789,27800,27811,27822,27832,27843,27854,27865],{},[357,27554,27555,27558,27561],{},[403,27556,27557],{"align":23827},"docker run",[403,27559,27560],{"align":23827},"创建并启动一个新的容器。",[403,27562,27563],{"align":23827},"docker run -it ubuntu bash",[357,27565,27566,27569,27572],{},[403,27567,27568],{"align":23827},"docker build",[403,27570,27571],{"align":23827},"通过指定的 Dockerfile 创建一个新的镜像。",[403,27573,27574],{"align":23827},"docker build -t myimage .",[357,27576,27577,27580,27583],{},[403,27578,27579],{"align":23827},"docker pull",[403,27581,27582],{"align":23827},"从 Docker 仓库拉取镜像。",[403,27584,27585],{"align":23827},"docker pull ubuntu",[357,27587,27588,27591,27594],{},[403,27589,27590],{"align":23827},"docker push",[403,27592,27593],{"align":23827},"将本地镜像推送到 Docker 仓库。",[403,27595,27596],{"align":23827},"docker push myimage",[357,27598,27599,27602,27605],{},[403,27600,27601],{"align":23827},"docker stop",[403,27603,27604],{"align":23827},"停止一个正在运行的容器。",[403,27606,27607],{"align":23827},"docker stop container_id",[357,27609,27610,27613,27616],{},[403,27611,27612],{"align":23827},"docker start",[403,27614,27615],{"align":23827},"启动一个已经存在的容器。",[403,27617,27618],{"align":23827},"docker start container_id",[357,27620,27621,27624,27627],{},[403,27622,27623],{"align":23827},"docker restart",[403,27625,27626],{"align":23827},"重新启动容器。",[403,27628,27629],{"align":23827},"docker restart container_id",[357,27631,27632,27635,27638],{},[403,27633,27634],{"align":23827},"docker ps",[403,27636,27637],{"align":23827},"列出当前正在运行的容器。",[403,27639,27634],{"align":23827},[357,27641,27642,27645,27648],{},[403,27643,27644],{"align":23827},"docker rm",[403,27646,27647],{"align":23827},"删除一个或多个停止的容器。",[403,27649,27650],{"align":23827},"docker rm container_id",[357,27652,27653,27656,27659],{},[403,27654,27655],{"align":23827},"docker exec",[403,27657,27658],{"align":23827},"在一个正在运行的容器中执行命令。",[403,27660,27661],{"align":23827},"docker exec -it container_id bash",[357,27663,27664,27667,27670],{},[403,27665,27666],{"align":23827},"docker logs",[403,27668,27669],{"align":23827},"查看容器的日志输出。",[403,27671,27672],{"align":23827},"docker logs container_id",[357,27674,27675,27678,27681],{},[403,27676,27677],{"align":23827},"docker images",[403,27679,27680],{"align":23827},"列出本地所有镜像。",[403,27682,27677],{"align":23827},[357,27684,27685,27688,27691],{},[403,27686,27687],{"align":23827},"docker rmi",[403,27689,27690],{"align":23827},"删除一个或多个镜像。",[403,27692,27693],{"align":23827},"docker rmi myimage",[357,27695,27696,27699,27702],{},[403,27697,27698],{"align":23827},"docker network",[403,27700,27701],{"align":23827},"管理 Docker 网络。",[403,27703,27704],{"align":23827},"docker network ls",[357,27706,27707,27710,27713],{},[403,27708,27709],{"align":23827},"docker volume",[403,27711,27712],{"align":23827},"管理 Docker 数据卷。",[403,27714,27715],{"align":23827},"docker volume ls",[357,27717,27718,27721,27724],{},[403,27719,27720],{"align":23827},"docker-compose up",[403,27722,27723],{"align":23827},"启动 docker-compose.yml 中定义的所有服务。",[403,27725,27720],{"align":23827},[357,27727,27728,27731,27734],{},[403,27729,27730],{"align":23827},"docker-compose down",[403,27732,27733],{"align":23827},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[403,27735,27730],{"align":23827},[357,27737,27738,27741,27744],{},[403,27739,27740],{"align":23827},"docker info",[403,27742,27743],{"align":23827},"显示 Docker 系统的详细信息。",[403,27745,27740],{"align":23827},[357,27747,27748,27751,27754],{},[403,27749,27750],{"align":23827},"docker stats",[403,27752,27753],{"align":23827},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[403,27755,27750],{"align":23827},[357,27757,27758,27761,27764],{},[403,27759,27760],{"align":23827},"docker inspect",[403,27762,27763],{"align":23827},"查看容器或镜像的详细信息（JSON 格式）。",[403,27765,27766],{"align":23827},"docker inspect container_id",[357,27768,27769,27772,27775],{},[403,27770,27771],{"align":23827},"docker save",[403,27773,27774],{"align":23827},"将一个镜像保存为 tar 文件。",[403,27776,27777],{"align":23827},"docker save -o myimage.tar myimage",[357,27779,27780,27783,27786],{},[403,27781,27782],{"align":23827},"docker load",[403,27784,27785],{"align":23827},"从 tar 文件中加载镜像。",[403,27787,27788],{"align":23827},"docker load -i myimage.tar",[357,27790,27791,27794,27797],{},[403,27792,27793],{"align":23827},"docker tag",[403,27795,27796],{"align":23827},"为镜像添加标签（tag）。",[403,27798,27799],{"align":23827},"docker tag myimage myimage:v1",[357,27801,27802,27805,27808],{},[403,27803,27804],{"align":23827},"docker buildx build",[403,27806,27807],{"align":23827},"使用 Buildx 构建多架构镜像。",[403,27809,27810],{"align":23827},"docker buildx build -t myimage .",[357,27812,27813,27816,27819],{},[403,27814,27815],{"align":23827},"docker buildx create",[403,27817,27818],{"align":23827},"创建一个新的 Buildx 构建实例。",[403,27820,27821],{"align":23827},"docker buildx create –use",[357,27823,27824,27827,27830],{},[403,27825,27826],{"align":23827},"docker buildx ls",[403,27828,27829],{"align":23827},"列出所有可用的 Buildx 构建实例。",[403,27831,27826],{"align":23827},[357,27833,27834,27837,27840],{},[403,27835,27836],{"align":23827},"docker buildx use",[403,27838,27839],{"align":23827},"设置当前的 Buildx 构建实例。",[403,27841,27842],{"align":23827},"docker buildx use mybuilder",[357,27844,27845,27848,27851],{},[403,27846,27847],{"align":23827},"docker buildx bake",[403,27849,27850],{"align":23827},"使用 Bake 文件批量构建镜像。",[403,27852,27853],{"align":23827},"docker buildx bake -f bake.hcl",[357,27855,27856,27859,27862],{},[403,27857,27858],{"align":23827},"docker buildx build –push",[403,27860,27861],{"align":23827},"构建镜像并推送到镜像仓库。",[403,27863,27864],{"align":23827},"docker buildx build –push -t myimage .",[357,27866,27867,27870,27873],{},[403,27868,27869],{"align":23827},"docker buildx build –platform",[403,27871,27872],{"align":23827},"构建镜像并为多个平台生成支持。",[403,27874,27875],{"align":23827},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,27877,27878],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,27880,27881],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,27883,27884],{},"docker images 可以查看已经下载的镜像",[19,27886,27887],{},[25,27888],{"alt":27,"src":27889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,27891,27892],{},[363,27893,27894],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,27896,27897],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,27899,27900],{},"docker container logs 查看容器日志",[19,27902,27903],{},"docker top 查看容器里的进程",[19,27905,27906],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[194,27908,27910],{"className":23913,"code":27909,"language":23915,"meta":27,"style":27},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[200,27911,27912],{"__ignoreMap":27},[203,27913,27914,27917,27920,27923],{"class":205,"line":206},[203,27915,27916],{"class":2052},"如：docker",[203,27918,27919],{"class":318}," cp",[203,27921,27922],{"class":318}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[203,27924,27925],{"class":318}," \u002Fmydata\u002Fnginx\n",[19,27927,27928],{},"docker run时在启动容器的时候会有几个常用的选项：",[1221,27930,27931,27934,27937],{},[160,27932,27933],{},"-d选项：表示后台运行",[160,27935,27936],{},"-P选项：随机端口映射",[160,27938,27939],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[174,27941,27943],{"id":27942},"_53run命令的参数非常重要",[363,27944,27945],{},"5.3.run命令的参数（非常重要）",[351,27947,27948,27961],{},[354,27949,27950],{},[357,27951,27952,27955,27958],{},[360,27953,27954],{"align":23827},"参数\u002F配置",[360,27956,27957],{"align":23827},"功能说明",[360,27959,27960],{"align":23827},"重要性与参考依据",[398,27962,27963,27974,27985,27996,28007,28018,28029,28040,28051,28062,28073,28084,28095,28106,28117],{},[357,27964,27965,27968,27971],{},[403,27966,27967],{"align":23827},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[403,27969,27970],{"align":23827},"指定容器名称，便于后续管理",[403,27972,27973],{"align":23827},"替代随机生成的容器名。",[357,27975,27976,27979,27982],{},[403,27977,27978],{"align":23827},"–gpus all",[403,27980,27981],{"align":23827},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[403,27983,27984],{"align":23827},"用于CUDA加速等GPU依赖任务。",[357,27986,27987,27990,27993],{},[403,27988,27989],{"align":23827},"-e NVIDIA_DRIVER_CAPABILITIES=all",[403,27991,27992],{"align":23827},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[403,27994,27995],{"align":23827},"确保容器内GPU功能完整67。",[357,27997,27998,28001,28004],{},[403,27999,28000],{"align":23827},"-dit",[403,28002,28003],{"align":23827},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[403,28005,28006],{"align":23827},"允许容器在后台运行并支持交互操作。",[357,28008,28009,28012,28015],{},[403,28010,28011],{"align":23827},"–privileged",[403,28013,28014],{"align":23827},"赋予容器完全主机权限（可访问设备、内核模块等）",[403,28016,28017],{"align":23827},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[357,28019,28020,28023,28026],{},[403,28021,28022],{"align":23827},"–net=host",[403,28024,28025],{"align":23827},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[403,28027,28028],{"align":23827},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[357,28030,28031,28034,28037],{},[403,28032,28033],{"align":23827},"–group-add audio–group-add video–group-add dialout",[403,28035,28036],{"align":23827},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[403,28038,28039],{"align":23827},"避免权限问题（如避免无法调用摄像头、麦克风）。",[357,28041,28042,28045,28048],{},[403,28043,28044],{"align":23827},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[403,28046,28047],{"align":23827},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[403,28049,28050],{"align":23827},"支持容器内运行图形界面应用（如OpenCV可视化）。",[357,28052,28053,28056,28059],{},[403,28054,28055],{"align":23827},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[403,28057,28058],{"align":23827},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[403,28060,28061],{"align":23827},"实现容器内图形显示。",[357,28063,28064,28067,28070],{},[403,28065,28066],{"align":23827},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[403,28068,28069],{"align":23827},"挂载X11认证文件（只读）",[403,28071,28072],{"align":23827},"确保容器有权连接宿主机显示服务。",[357,28074,28075,28078,28081],{},[403,28076,28077],{"align":23827},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[403,28079,28080],{"align":23827},"挂载Wayland显示协议相关目录",[403,28082,28083],{"align":23827},"支持Wayland协议的图形显示。",[357,28085,28086,28089,28092],{},[403,28087,28088],{"align":23827},"–ulimit nofile=1024:524288",[403,28090,28091],{"align":23827},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[403,28093,28094],{"align":23827},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[357,28096,28097,28100,28103],{},[403,28098,28099],{"align":23827},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[403,28101,28102],{"align":23827},"挂载宿主机用户目录到容器内同名路径",[403,28104,28105],{"align":23827},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[357,28107,28108,28111,28114],{},[403,28109,28110],{"align":23827},"-w \u002Fhome\u002Ftungchiahui",[403,28112,28113],{"align":23827},"设置容器启动后的默认工作目录",[403,28115,28116],{"align":23827},"直接进入项目路径，方便执行命令2324。",[357,28118,28119,28122,28125],{},[403,28120,28121],{"align":23827},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[403,28123,28124],{"align":23827},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[403,28126,28127],{"align":23827},"提供预配置的深度学习与机器人开发环境。",[19,28129,28130,28131,28133,28134,28137],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[200,28132,24634],{},"加不加",[200,28135,28136],{},"sudo -E","都无所谓。",[19,28139,28140,28141,28143,28144,28146,28147,28150,28151,28153],{},"用户已经被加到docker组了，不用",[200,28142,24634],{},"也行跑，其次，",[200,28145,24634],{},"运行的话，你的",[200,28148,28149],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[200,28152,28149],{},"更不可能变了。",[194,28155,28157],{"className":23913,"code":28156,"language":23915,"meta":27,"style":27},"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",[200,28158,28159,28172,28182,28192,28204,28211,28218,28225,28235,28244,28253,28267,28279,28291,28300,28310,28319,28334,28367,28394,28405,28412],{"__ignoreMap":27},[203,28160,28161,28163,28165,28167,28170],{"class":205,"line":206},[203,28162,24634],{"class":2052},[203,28164,26378],{"class":318},[203,28166,27288],{"class":318},[203,28168,28169],{"class":262}," --name=ros_opencv_cuda",[203,28171,24736],{"class":262},[203,28173,28174,28177,28180],{"class":205,"line":124},[203,28175,28176],{"class":213},"--gpus ",[203,28178,28179],{"class":318},"all",[203,28181,24736],{"class":262},[203,28183,28184,28187,28190],{"class":205,"line":1269},[203,28185,28186],{"class":213},"-e ",[203,28188,28189],{"class":318},"NVIDIA_DRIVER_CAPABILITIES=all",[203,28191,24736],{"class":262},[203,28193,28194,28196,28199,28202],{"class":205,"line":1284},[203,28195,28186],{"class":213},[203,28197,28198],{"class":318},"DISPLAY=",[203,28200,28201],{"class":213},"$DISPLAY ",[203,28203,26233],{"class":262},[203,28205,28206,28209],{"class":205,"line":1290},[203,28207,28208],{"class":213},"-dit ",[203,28210,26233],{"class":262},[203,28212,28213,28216],{"class":205,"line":1304},[203,28214,28215],{"class":213},"--privileged ",[203,28217,26233],{"class":262},[203,28219,28220,28223],{"class":205,"line":1310},[203,28221,28222],{"class":213},"--net=host ",[203,28224,26233],{"class":262},[203,28226,28227,28230,28233],{"class":205,"line":1401},[203,28228,28229],{"class":213},"--group-add ",[203,28231,28232],{"class":318},"audio",[203,28234,24736],{"class":262},[203,28236,28237,28239,28242],{"class":205,"line":1407},[203,28238,28229],{"class":213},[203,28240,28241],{"class":318},"video",[203,28243,24736],{"class":262},[203,28245,28246,28248,28251],{"class":205,"line":1419},[203,28247,28229],{"class":213},[203,28249,28250],{"class":318},"dialout",[203,28252,24736],{"class":262},[203,28254,28255,28257,28260,28262,28265],{"class":205,"line":1701},[203,28256,28186],{"class":213},[203,28258,28259],{"class":318},"XAUTHORITY=",[203,28261,28149],{"class":213},[203,28263,28264],{"class":318},"\u002F.Xauthority",[203,28266,24736],{"class":262},[203,28268,28269,28271,28274,28277],{"class":205,"line":1706},[203,28270,28186],{"class":213},[203,28272,28273],{"class":318},"WAYLAND_DISPLAY=",[203,28275,28276],{"class":213},"$WAYLAND_DISPLAY ",[203,28278,26233],{"class":262},[203,28280,28281,28283,28286,28289],{"class":205,"line":1712},[203,28282,28186],{"class":213},[203,28284,28285],{"class":318},"XDG_RUNTIME_DIR=",[203,28287,28288],{"class":213},"$XDG_RUNTIME_DIR ",[203,28290,26233],{"class":262},[203,28292,28293,28295,28298],{"class":205,"line":1717},[203,28294,28186],{"class":213},[203,28296,28297],{"class":318},"QT_QPA_PLATFORM=xcb",[203,28299,24736],{"class":262},[203,28301,28302,28305,28308],{"class":205,"line":1731},[203,28303,28304],{"class":213},"-v ",[203,28306,28307],{"class":318},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[203,28309,24736],{"class":262},[203,28311,28312,28314,28317],{"class":205,"line":1736},[203,28313,28304],{"class":213},[203,28315,28316],{"class":318},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[203,28318,24736],{"class":262},[203,28320,28321,28324,28327,28329,28332],{"class":205,"line":1742},[203,28322,28323],{"class":213},"-v $HOME",[203,28325,28326],{"class":318},"\u002F.Xauthority:",[203,28328,28149],{"class":213},[203,28330,28331],{"class":318},"\u002F.Xauthority:ro",[203,28333,24736],{"class":262},[203,28335,28336,28338,28341,28343,28346,28349,28351,28354,28356,28358,28360,28362,28365],{"class":205,"line":1763},[203,28337,28304],{"class":213},[203,28339,28340],{"class":318},"\u002Frun\u002Fuser\u002F",[203,28342,25157],{"class":213},[203,28344,28345],{"class":2052},"id",[203,28347,28348],{"class":262}," -u",[203,28350,643],{"class":213},[203,28352,28353],{"class":318},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[203,28355,25157],{"class":213},[203,28357,28345],{"class":2052},[203,28359,28348],{"class":262},[203,28361,643],{"class":213},[203,28363,28364],{"class":318},"\u002Fwayland-0",[203,28366,24736],{"class":262},[203,28368,28369,28371,28373,28375,28377,28379,28381,28384,28386,28388,28390,28392],{"class":205,"line":1768},[203,28370,28304],{"class":213},[203,28372,28340],{"class":318},[203,28374,25157],{"class":213},[203,28376,28345],{"class":2052},[203,28378,28348],{"class":262},[203,28380,643],{"class":213},[203,28382,28383],{"class":318},":\u002Frun\u002Fuser\u002F",[203,28385,25157],{"class":213},[203,28387,28345],{"class":2052},[203,28389,28348],{"class":262},[203,28391,13804],{"class":213},[203,28393,26233],{"class":262},[203,28395,28396,28398,28400,28403],{"class":205,"line":1782},[203,28397,28323],{"class":213},[203,28399,1073],{"class":318},[203,28401,28402],{"class":213},"$HOME ",[203,28404,26233],{"class":262},[203,28406,28407,28410],{"class":205,"line":1787},[203,28408,28409],{"class":213},"-w $HOME ",[203,28411,26233],{"class":262},[203,28413,28414],{"class":205,"line":1816},[203,28415,28416],{"class":213},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,28418,9115],{},[157,28420,28421,28429,28432,28435],{},[160,28422,28423,13885,28425,28428],{},[200,28424,28189],{},[200,28426,28427],{},"--gpus all","没有英伟达显卡请注释。",[160,28430,28431],{},"--name后面请自己为容器起名。",[160,28433,28434],{},"最后一行仓库名称请你自己找对应的镜像填上。",[160,28436,28437,28438,28443],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23644,28439,28440],{},[363,28441,28442],{},"请不要加","。",[194,28445,28447],{"className":23913,"code":28446,"language":23915,"meta":27,"style":27},"--ulimit nofile=1024:524288 \\\n",[200,28448,28449],{"__ignoreMap":27},[203,28450,28451,28454,28457],{"class":205,"line":206},[203,28452,28453],{"class":2052},"--ulimit",[203,28455,28456],{"class":318}," nofile=1024:524288",[203,28458,24736],{"class":262},[19,28460,28461,28462,28467],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23644,28463,28464],{},[363,28465,28466],{},"不建议","**.**",[194,28469,28471],{"className":23913,"code":28470,"language":23915,"meta":27,"style":27},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[200,28472,28473,28500,28509],{"__ignoreMap":27},[203,28474,28475,28478,28481,28483,28485,28487,28489,28491,28493,28496,28498],{"class":205,"line":206},[203,28476,28477],{"class":2052},"--user",[203,28479,28480],{"class":213}," $(",[203,28482,28345],{"class":2052},[203,28484,28348],{"class":262},[203,28486,643],{"class":213},[203,28488,1073],{"class":318},[203,28490,25157],{"class":213},[203,28492,28345],{"class":2052},[203,28494,28495],{"class":262}," -g",[203,28497,13804],{"class":213},[203,28499,26233],{"class":262},[203,28501,28502,28504,28507],{"class":205,"line":124},[203,28503,28304],{"class":213},[203,28505,28506],{"class":318},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[203,28508,24736],{"class":262},[203,28510,28511,28513,28516],{"class":205,"line":1269},[203,28512,28304],{"class":213},[203,28514,28515],{"class":318},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[203,28517,24736],{"class":262},[5216,28519,28520],{},"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":27,"searchDepth":124,"depth":124,"links":28522},[28523,28524,28525],{"id":27521,"depth":1269,"text":27522},{"id":27531,"depth":1269,"text":27532},{"id":27942,"depth":1269,"text":27945},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27513,"description":27},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28532,"title":28533,"body":28534,"description":27,"extension":129,"meta":30157,"navigation":131,"path":30158,"seo":30159,"stem":30160,"__hash__":30161},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28535,"toc":30152},[28536,28539,28543,28546,28768,28772,28776,28779,28885,28890,28893,28898,28901,28906,28909,28914,28917,28929,28932,28937,28944,28972,28979,29055,29060,29063,29086,29088,29163,29168,29171,29175,29183,29188,29193,29197,29208,29214,29217,29220,29244,29247,29250,29278,29281,29284,29749,29752,29757,29762,29766,29789,29794,29798,29802,29805,29808,29811,29838,29841,29844,29862,29865,29868,29890,29898,29903,29908,29912,29915,29918,29921,29924,29969,29972,29990,29993,29998,30001,30022,30025,30081,30084,30089,30093,30096,30103,30106,30109,30114,30117,30133,30136,30149],[10,28537,28533],{"id":28538},"_6手动创建docker镜像",[174,28540,28542],{"id":28541},"_61dockerfile","6.1.DockerFile",[19,28544,28545],{},"常用命令：",[351,28547,28548,28559],{},[354,28549,28550],{},[357,28551,28552,28555,28557],{},[360,28553,28554],{"align":23827},"指令",[360,28556,25927],{"align":23827},[360,28558,27550],{"align":23827},[398,28560,28561,28571,28587,28598,28609,28620,28631,28642,28653,28667,28681,28692,28706,28717,28728,28742,28757],{},[357,28562,28563,28565,28568],{},[403,28564,27428],{"align":23827},[403,28566,28567],{"align":23827},"指定基础镜像，是 Dockerfile 的起点",[403,28569,28570],{"align":23827},"FROM ubuntu:22.04",[357,28572,28573,28576,28579],{},[403,28574,28575],{"align":23827},"LABEL",[403,28577,28578],{"align":23827},"添加元数据（如作者、版本等）",[403,28580,28581,28582,28586],{"align":23827},"LABEL maintainer=”",[452,28583,28585],{"href":28584},"mailto:you@example.com","you@example.com","”",[357,28588,28589,28592,28595],{},[403,28590,28591],{"align":23827},"ENV",[403,28593,28594],{"align":23827},"设置环境变量",[403,28596,28597],{"align":23827},"ENV PORT=8080",[357,28599,28600,28603,28606],{},[403,28601,28602],{"align":23827},"ARG",[403,28604,28605],{"align":23827},"构建参数，只在构建期间可用",[403,28607,28608],{"align":23827},"ARG VERSION=1.0",[357,28610,28611,28614,28617],{},[403,28612,28613],{"align":23827},"RUN",[403,28615,28616],{"align":23827},"构建镜像时运行命令",[403,28618,28619],{"align":23827},"RUN apt-get update && apt-get install -y curl",[357,28621,28622,28625,28628],{},[403,28623,28624],{"align":23827},"COPY",[403,28626,28627],{"align":23827},"复制文件到镜像中",[403,28629,28630],{"align":23827},"COPY . \u002Fapp",[357,28632,28633,28636,28639],{},[403,28634,28635],{"align":23827},"ADD",[403,28637,28638],{"align":23827},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[403,28640,28641],{"align":23827},"ADD archive.tar.gz \u002Fdata\u002F",[357,28643,28644,28647,28650],{},[403,28645,28646],{"align":23827},"WORKDIR",[403,28648,28649],{"align":23827},"设置工作目录",[403,28651,28652],{"align":23827},"WORKDIR \u002Fopt",[357,28654,28655,28658,28661],{},[403,28656,28657],{"align":23827},"CMD",[403,28659,28660],{"align":23827},"设置容器启动时默认命令（可被 docker run 覆盖）",[403,28662,28663,28664],{"align":23827},"CMD ",[203,28665,28666],{},"“node”, “index.js”",[357,28668,28669,28672,28675],{},[403,28670,28671],{"align":23827},"ENTRYPOINT",[403,28673,28674],{"align":23827},"设置容器启动时固定命令（通常用于 CLI 工具等）",[403,28676,28677,28678],{"align":23827},"ENTRYPOINT ",[203,28679,28680],{},"“python3”",[357,28682,28683,28686,28689],{},[403,28684,28685],{"align":23827},"EXPOSE",[403,28687,28688],{"align":23827},"声明镜像内服务监听的端口（不会自动映射）",[403,28690,28691],{"align":23827},"EXPOSE 80",[357,28693,28694,28697,28700],{},[403,28695,28696],{"align":23827},"VOLUME",[403,28698,28699],{"align":23827},"声明数据卷挂载点",[403,28701,28702,28703],{"align":23827},"VOLUME ",[203,28704,28705],{},"“\u002Fdata”",[357,28707,28708,28711,28714],{},[403,28709,28710],{"align":23827},"USER",[403,28712,28713],{"align":23827},"设置后续命令执行的用户",[403,28715,28716],{"align":23827},"USER appuser",[357,28718,28719,28722,28725],{},[403,28720,28721],{"align":23827},"ONBUILD",[403,28723,28724],{"align":23827},"当镜像作为其他镜像基础镜像时触发的构建指令",[403,28726,28727],{"align":23827},"ONBUILD COPY . \u002Fsrc",[357,28729,28730,28733,28736],{},[403,28731,28732],{"align":23827},"SHELL",[403,28734,28735],{"align":23827},"更改默认 shell，比如将 sh -c 改为 bash -c",[403,28737,28738,28739],{"align":23827},"SHELL ",[203,28740,28741],{},"“\u002Fbin\u002Fbash”, “-c”",[357,28743,28744,28747,28750],{},[403,28745,28746],{"align":23827},"HEALTHCHECK",[403,28748,28749],{"align":23827},"定义容器运行时的健康检查命令",[403,28751,28752,28753],{"align":23827},"`HEALTHCHECK CMD curl –fail ",[452,28754,28755],{"href":28755,"rel":28756},"http:\u002F\u002Flocalhost:8080",[23956],[357,28758,28759,28762,28765],{},[403,28760,28761],{"align":23827},"STOPSIGNAL",[403,28763,28764],{"align":23827},"容器停止时发送的信号",[403,28766,28767],{"align":23827},"STOPSIGNAL SIGKILL",[174,28769,28771],{"id":28770},"_62自己创建容器","6.2.自己创建容器",[22088,28773,28775],{"id":28774},"_621手动创建","6.2.1.手动创建",[19,28777,28778],{},"在x86电脑上编译x86的：",[194,28780,28782],{"className":23913,"code":28781,"language":23915,"meta":27,"style":27},"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",[200,28783,28784,28800,28804,28817,28821,28834,28838,28851,28855,28868,28872],{"__ignoreMap":27},[203,28785,28786,28788,28791,28794,28797],{"class":205,"line":206},[203,28787,26611],{"class":2052},[203,28789,28790],{"class":318}," build",[203,28792,28793],{"class":262}," -t",[203,28795,28796],{"class":318}," ros-melodic-cuda118-cudnn8-bionic:latest",[203,28798,28799],{"class":318}," .\n",[203,28801,28802],{"class":205,"line":124},[203,28803,2489],{"emptyLinePlaceholder":131},[203,28805,28806,28808,28810,28812,28815],{"class":205,"line":1269},[203,28807,26611],{"class":2052},[203,28809,28790],{"class":318},[203,28811,28793],{"class":262},[203,28813,28814],{"class":318}," ros-noetic-focal:latest",[203,28816,28799],{"class":318},[203,28818,28819],{"class":205,"line":1284},[203,28820,2489],{"emptyLinePlaceholder":131},[203,28822,28823,28825,28827,28829,28832],{"class":205,"line":1290},[203,28824,26611],{"class":2052},[203,28826,28790],{"class":318},[203,28828,28793],{"class":262},[203,28830,28831],{"class":318}," ros-humble-jammy:latest",[203,28833,28799],{"class":318},[203,28835,28836],{"class":205,"line":1304},[203,28837,2489],{"emptyLinePlaceholder":131},[203,28839,28840,28842,28844,28846,28849],{"class":205,"line":1310},[203,28841,26611],{"class":2052},[203,28843,28790],{"class":318},[203,28845,28793],{"class":262},[203,28847,28848],{"class":318}," ros-jazzy-noble:latest",[203,28850,28799],{"class":318},[203,28852,28853],{"class":205,"line":1401},[203,28854,2489],{"emptyLinePlaceholder":131},[203,28856,28857,28859,28861,28863,28866],{"class":205,"line":1407},[203,28858,26611],{"class":2052},[203,28860,28790],{"class":318},[203,28862,28793],{"class":262},[203,28864,28865],{"class":318}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[203,28867,28799],{"class":318},[203,28869,28870],{"class":205,"line":1419},[203,28871,2489],{"emptyLinePlaceholder":131},[203,28873,28874,28876,28878,28880,28883],{"class":205,"line":1701},[203,28875,26611],{"class":2052},[203,28877,28790],{"class":318},[203,28879,28793],{"class":262},[203,28881,28882],{"class":318}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[203,28884,28799],{"class":318},[19,28886,28887],{},[25,28888],{"alt":27,"src":28889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,28891,28892],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,28894,28895],{},[25,28896],{"alt":27,"src":28897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,28899,28900],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[157,28902,28903],{},[160,28904,28905],{},"创建 Docker Hub 账户",[19,28907,28908],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[157,28910,28911],{"start":124},[160,28912,28913],{},"登录 Docker Hub",[19,28915,28916],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[194,28918,28920],{"className":23913,"code":28919,"language":23915,"meta":27,"style":27},"docker login\n",[200,28921,28922],{"__ignoreMap":27},[203,28923,28924,28926],{"class":205,"line":206},[203,28925,26611],{"class":2052},[203,28927,28928],{"class":318}," login\n",[19,28930,28931],{},"输入你的 Docker Hub 用户名和密码进行验证。",[157,28933,28934],{},[160,28935,28936],{},"为你的镜像打标签",[19,28938,28939,28940,28943],{},"Docker Hub 使用 ",[200,28941,28942],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[194,28945,28947],{"className":23913,"code":28946,"language":23915,"meta":27,"style":27},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[200,28948,28949],{"__ignoreMap":27},[203,28950,28951,28953,28956,28958,28961,28964,28967,28969],{"class":205,"line":206},[203,28952,26611],{"class":2052},[203,28954,28955],{"class":318}," tag",[203,28957,28848],{"class":318},[203,28959,28960],{"class":209}," \u003C",[203,28962,28963],{"class":318},"你的用户",[203,28965,28966],{"class":213},"名",[203,28968,1174],{"class":209},[203,28970,28971],{"class":318},"\u002Fros-jazzy-noble:latest\n",[19,28973,28974,28975,28978],{},"例如，如果你的 Docker Hub 用户名是 ",[200,28976,28977],{},"tungchiahui","，你应该执行：",[194,28980,28982],{"className":23913,"code":28981,"language":23915,"meta":27,"style":27},"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",[200,28983,28984,28995,28999,29010,29014,29025,29029,29040,29044],{"__ignoreMap":27},[203,28985,28986,28988,28990,28992],{"class":205,"line":206},[203,28987,26611],{"class":2052},[203,28989,28955],{"class":318},[203,28991,28814],{"class":318},[203,28993,28994],{"class":318}," tungchiahui\u002Fros-noetic-focal:latest\n",[203,28996,28997],{"class":205,"line":124},[203,28998,2489],{"emptyLinePlaceholder":131},[203,29000,29001,29003,29005,29007],{"class":205,"line":1269},[203,29002,26611],{"class":2052},[203,29004,28955],{"class":318},[203,29006,28831],{"class":318},[203,29008,29009],{"class":318}," tungchiahui\u002Fros-humble-jammy:latest\n",[203,29011,29012],{"class":205,"line":1284},[203,29013,2489],{"emptyLinePlaceholder":131},[203,29015,29016,29018,29020,29022],{"class":205,"line":1290},[203,29017,26611],{"class":2052},[203,29019,28955],{"class":318},[203,29021,28848],{"class":318},[203,29023,29024],{"class":318}," tungchiahui\u002Fros-jazzy-noble:latest\n",[203,29026,29027],{"class":205,"line":1304},[203,29028,2489],{"emptyLinePlaceholder":131},[203,29030,29031,29033,29035,29037],{"class":205,"line":1310},[203,29032,26611],{"class":2052},[203,29034,28955],{"class":318},[203,29036,28865],{"class":318},[203,29038,29039],{"class":318}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[203,29041,29042],{"class":205,"line":1401},[203,29043,2489],{"emptyLinePlaceholder":131},[203,29045,29046,29048,29050,29052],{"class":205,"line":1407},[203,29047,26611],{"class":2052},[203,29049,28955],{"class":318},[203,29051,28882],{"class":318},[203,29053,29054],{"class":318}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[157,29056,29057],{"start":124},[160,29058,29059],{},"推送镜像到 Docker Hub",[19,29061,29062],{},"使用以下命令将镜像推送到 Docker Hub：",[194,29064,29066],{"className":23913,"code":29065,"language":23915,"meta":27,"style":27},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[200,29067,29068],{"__ignoreMap":27},[203,29069,29070,29072,29075,29077,29079,29081,29083],{"class":205,"line":206},[203,29071,26611],{"class":2052},[203,29073,29074],{"class":318}," push",[203,29076,28960],{"class":209},[203,29078,28963],{"class":318},[203,29080,28966],{"class":213},[203,29082,1174],{"class":209},[203,29084,29085],{"class":318},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29087,14723],{},[194,29089,29091],{"className":23913,"code":29090,"language":23915,"meta":27,"style":27},"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",[200,29092,29093,29101,29105,29113,29117,29125,29129,29138,29142,29150,29154],{"__ignoreMap":27},[203,29094,29095,29097,29099],{"class":205,"line":206},[203,29096,26611],{"class":2052},[203,29098,29074],{"class":318},[203,29100,28994],{"class":318},[203,29102,29103],{"class":205,"line":124},[203,29104,2489],{"emptyLinePlaceholder":131},[203,29106,29107,29109,29111],{"class":205,"line":1269},[203,29108,26611],{"class":2052},[203,29110,29074],{"class":318},[203,29112,29009],{"class":318},[203,29114,29115],{"class":205,"line":1284},[203,29116,2489],{"emptyLinePlaceholder":131},[203,29118,29119,29121,29123],{"class":205,"line":1290},[203,29120,26611],{"class":2052},[203,29122,29074],{"class":318},[203,29124,29024],{"class":318},[203,29126,29127],{"class":205,"line":1304},[203,29128,2489],{"emptyLinePlaceholder":131},[203,29130,29131,29133,29135],{"class":205,"line":1310},[203,29132,26611],{"class":2052},[203,29134,29074],{"class":318},[203,29136,29137],{"class":318}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[203,29139,29140],{"class":205,"line":1401},[203,29141,2489],{"emptyLinePlaceholder":131},[203,29143,29144,29146,29148],{"class":205,"line":1407},[203,29145,26611],{"class":2052},[203,29147,29074],{"class":318},[203,29149,29054],{"class":318},[203,29151,29152],{"class":205,"line":1419},[203,29153,2489],{"emptyLinePlaceholder":131},[203,29155,29156,29158,29160],{"class":205,"line":1701},[203,29157,26611],{"class":2052},[203,29159,29074],{"class":318},[203,29161,29162],{"class":318}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[157,29164,29165],{"start":1269},[160,29166,29167],{},"验证推送成功",[19,29169,29170],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29172,29173],{},[363,29174,3873],{},[1221,29176,29177,29180],{},[160,29178,29179],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[160,29181,29182],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29184,29185],{},[25,29186],{"alt":27,"src":29187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29189,29190],{},[25,29191],{"alt":27,"src":29192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22088,29194,29196],{"id":29195},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29198,29199,29200,29203,29204,29207],{},"如果您想在 ",[363,29201,29202],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[363,29205,29206],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29209,29210,29211],{},"1. ",[363,29212,29213],{},"启用 Docker 跨平台构建",[19,29215,29216],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29218,29219],{},"第一步：启用 buildx（只需执行一次）",[194,29221,29223],{"className":23913,"code":29222,"language":23915,"meta":27,"style":27},"docker buildx create --name multiarch_builder --use\n",[200,29224,29225],{"__ignoreMap":27},[203,29226,29227,29229,29232,29235,29238,29241],{"class":205,"line":206},[203,29228,26611],{"class":2052},[203,29230,29231],{"class":318}," buildx",[203,29233,29234],{"class":318}," create",[203,29236,29237],{"class":262}," --name",[203,29239,29240],{"class":318}," multiarch_builder",[203,29242,29243],{"class":262}," --use\n",[19,29245,29246],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29248,29249],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[194,29251,29253],{"className":23913,"code":29252,"language":23915,"meta":27,"style":27},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[200,29254,29255],{"__ignoreMap":27},[203,29256,29257,29259,29261,29263,29266,29269,29272,29275],{"class":205,"line":206},[203,29258,26611],{"class":2052},[203,29260,27288],{"class":318},[203,29262,27291],{"class":262},[203,29264,29265],{"class":262}," --privileged",[203,29267,29268],{"class":318}," multiarch\u002Fqemu-user-static",[203,29270,29271],{"class":262}," --reset",[203,29273,29274],{"class":262}," -p",[203,29276,29277],{"class":318}," yes\n",[19,29279,29280],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29282,29283],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[194,29285,29287],{"className":23913,"code":29286,"language":23915,"meta":27,"style":27},"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",[200,29288,29289,29331,29335,29340,29350,29360,29369,29375,29379,29383,29393,29401,29410,29416,29420,29424,29434,29442,29451,29457,29461,29465,29475,29483,29492,29498,29502,29506,29516,29524,29533,29539,29543,29547,29557,29565,29574,29580,29584,29588,29598,29606,29615,29621,29625,29629,29639,29647,29656,29662,29666,29670,29680,29688,29697,29703,29707,29711,29722,29730,29739,29745],{"__ignoreMap":27},[203,29290,29291,29293,29295,29297,29300,29303,29305,29307,29310,29312,29314,29316,29318,29321,29324,29326,29329],{"class":205,"line":206},[203,29292,26611],{"class":2052},[203,29294,29231],{"class":318},[203,29296,28790],{"class":318},[203,29298,29299],{"class":262}," --platform",[203,29301,29302],{"class":318}," linux\u002Famd64,linux\u002Farm64",[203,29304,28793],{"class":262},[203,29306,28960],{"class":209},[203,29308,29309],{"class":318},"你的镜像",[203,29311,28966],{"class":213},[203,29313,1174],{"class":209},[203,29315,1073],{"class":318},[203,29317,1124],{"class":209},[203,29319,29320],{"class":318},"标",[203,29322,29323],{"class":213},"签",[203,29325,1174],{"class":209},[203,29327,29328],{"class":262}," --push",[203,29330,28799],{"class":318},[203,29332,29333],{"class":205,"line":124},[203,29334,2489],{"emptyLinePlaceholder":131},[203,29336,29337],{"class":205,"line":1269},[203,29338,29339],{"class":272},"# 例子：\n",[203,29341,29342,29344,29346,29348],{"class":205,"line":1284},[203,29343,26611],{"class":2052},[203,29345,29231],{"class":318},[203,29347,28790],{"class":318},[203,29349,24736],{"class":262},[203,29351,29352,29355,29358],{"class":205,"line":1290},[203,29353,29354],{"class":213},"--platform ",[203,29356,29357],{"class":318},"linux\u002Famd64,linux\u002Farm64",[203,29359,24736],{"class":262},[203,29361,29362,29364,29367],{"class":205,"line":1304},[203,29363,28793],{"class":262},[203,29365,29366],{"class":318}," tungchiahui\u002Fros:noetic-focal",[203,29368,24736],{"class":262},[203,29370,29371,29373],{"class":205,"line":1310},[203,29372,29328],{"class":262},[203,29374,24736],{"class":262},[203,29376,29377],{"class":205,"line":1401},[203,29378,28799],{"class":318},[203,29380,29381],{"class":205,"line":1407},[203,29382,2489],{"emptyLinePlaceholder":131},[203,29384,29385,29387,29389,29391],{"class":205,"line":1419},[203,29386,26611],{"class":2052},[203,29388,29231],{"class":318},[203,29390,28790],{"class":318},[203,29392,24736],{"class":262},[203,29394,29395,29397,29399],{"class":205,"line":1701},[203,29396,29354],{"class":213},[203,29398,29357],{"class":318},[203,29400,24736],{"class":262},[203,29402,29403,29405,29408],{"class":205,"line":1706},[203,29404,28793],{"class":262},[203,29406,29407],{"class":318}," tungchiahui\u002Fros:humble-jammy",[203,29409,24736],{"class":262},[203,29411,29412,29414],{"class":205,"line":1712},[203,29413,29328],{"class":262},[203,29415,24736],{"class":262},[203,29417,29418],{"class":205,"line":1717},[203,29419,28799],{"class":318},[203,29421,29422],{"class":205,"line":1731},[203,29423,2489],{"emptyLinePlaceholder":131},[203,29425,29426,29428,29430,29432],{"class":205,"line":1736},[203,29427,26611],{"class":2052},[203,29429,29231],{"class":318},[203,29431,28790],{"class":318},[203,29433,24736],{"class":262},[203,29435,29436,29438,29440],{"class":205,"line":1742},[203,29437,29354],{"class":213},[203,29439,29357],{"class":318},[203,29441,24736],{"class":262},[203,29443,29444,29446,29449],{"class":205,"line":1763},[203,29445,28793],{"class":262},[203,29447,29448],{"class":318}," tungchiahui\u002Fros:jazzy-noble",[203,29450,24736],{"class":262},[203,29452,29453,29455],{"class":205,"line":1768},[203,29454,29328],{"class":262},[203,29456,24736],{"class":262},[203,29458,29459],{"class":205,"line":1782},[203,29460,28799],{"class":318},[203,29462,29463],{"class":205,"line":1787},[203,29464,2489],{"emptyLinePlaceholder":131},[203,29466,29467,29469,29471,29473],{"class":205,"line":1816},[203,29468,26378],{"class":2052},[203,29470,29231],{"class":318},[203,29472,28790],{"class":318},[203,29474,24736],{"class":262},[203,29476,29477,29479,29481],{"class":205,"line":1821},[203,29478,29354],{"class":213},[203,29480,29357],{"class":318},[203,29482,24736],{"class":262},[203,29484,29485,29487,29490],{"class":205,"line":1838},[203,29486,28793],{"class":262},[203,29488,29489],{"class":318}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[203,29491,24736],{"class":262},[203,29493,29494,29496],{"class":205,"line":1843},[203,29495,29328],{"class":262},[203,29497,24736],{"class":262},[203,29499,29500],{"class":205,"line":1848},[203,29501,28799],{"class":318},[203,29503,29504],{"class":205,"line":1853},[203,29505,2489],{"emptyLinePlaceholder":131},[203,29507,29508,29510,29512,29514],{"class":205,"line":1867},[203,29509,26611],{"class":2052},[203,29511,29231],{"class":318},[203,29513,28790],{"class":318},[203,29515,24736],{"class":262},[203,29517,29518,29520,29522],{"class":205,"line":1872},[203,29519,29354],{"class":213},[203,29521,29357],{"class":318},[203,29523,24736],{"class":262},[203,29525,29526,29528,29531],{"class":205,"line":2666},[203,29527,28793],{"class":262},[203,29529,29530],{"class":318}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[203,29532,24736],{"class":262},[203,29534,29535,29537],{"class":205,"line":2680},[203,29536,29328],{"class":262},[203,29538,24736],{"class":262},[203,29540,29541],{"class":205,"line":2688},[203,29542,28799],{"class":318},[203,29544,29545],{"class":205,"line":2693},[203,29546,2489],{"emptyLinePlaceholder":131},[203,29548,29549,29551,29553,29555],{"class":205,"line":2699},[203,29550,26378],{"class":2052},[203,29552,29231],{"class":318},[203,29554,28790],{"class":318},[203,29556,24736],{"class":262},[203,29558,29559,29561,29563],{"class":205,"line":2705},[203,29560,29354],{"class":213},[203,29562,29357],{"class":318},[203,29564,24736],{"class":262},[203,29566,29567,29569,29572],{"class":205,"line":2710},[203,29568,28793],{"class":262},[203,29570,29571],{"class":318}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[203,29573,24736],{"class":262},[203,29575,29576,29578],{"class":205,"line":8038},[203,29577,29328],{"class":262},[203,29579,24736],{"class":262},[203,29581,29582],{"class":205,"line":8062},[203,29583,28799],{"class":318},[203,29585,29586],{"class":205,"line":8067},[203,29587,2489],{"emptyLinePlaceholder":131},[203,29589,29590,29592,29594,29596],{"class":205,"line":8073},[203,29591,26611],{"class":2052},[203,29593,29231],{"class":318},[203,29595,28790],{"class":318},[203,29597,24736],{"class":262},[203,29599,29600,29602,29604],{"class":205,"line":8100},[203,29601,29354],{"class":213},[203,29603,29357],{"class":318},[203,29605,24736],{"class":262},[203,29607,29608,29610,29613],{"class":205,"line":8105},[203,29609,28793],{"class":262},[203,29611,29612],{"class":318}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[203,29614,24736],{"class":262},[203,29616,29617,29619],{"class":205,"line":8111},[203,29618,29328],{"class":262},[203,29620,24736],{"class":262},[203,29622,29623],{"class":205,"line":8123},[203,29624,28799],{"class":318},[203,29626,29627],{"class":205,"line":8135},[203,29628,2489],{"emptyLinePlaceholder":131},[203,29630,29631,29633,29635,29637],{"class":205,"line":8147},[203,29632,26611],{"class":2052},[203,29634,29231],{"class":318},[203,29636,28790],{"class":318},[203,29638,24736],{"class":262},[203,29640,29641,29643,29645],{"class":205,"line":9806},[203,29642,29354],{"class":213},[203,29644,29357],{"class":318},[203,29646,24736],{"class":262},[203,29648,29649,29651,29654],{"class":205,"line":9831},[203,29650,28793],{"class":262},[203,29652,29653],{"class":318}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[203,29655,24736],{"class":262},[203,29657,29658,29660],{"class":205,"line":9854},[203,29659,29328],{"class":262},[203,29661,24736],{"class":262},[203,29663,29664],{"class":205,"line":9878},[203,29665,28799],{"class":318},[203,29667,29668],{"class":205,"line":9883},[203,29669,2489],{"emptyLinePlaceholder":131},[203,29671,29672,29674,29676,29678],{"class":205,"line":9888},[203,29673,26378],{"class":2052},[203,29675,29231],{"class":318},[203,29677,28790],{"class":318},[203,29679,24736],{"class":262},[203,29681,29682,29684,29686],{"class":205,"line":9893},[203,29683,29354],{"class":213},[203,29685,29357],{"class":318},[203,29687,24736],{"class":262},[203,29689,29690,29692,29695],{"class":205,"line":9902},[203,29691,28793],{"class":262},[203,29693,29694],{"class":318}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[203,29696,24736],{"class":262},[203,29698,29699,29701],{"class":205,"line":9907},[203,29700,29328],{"class":262},[203,29702,24736],{"class":262},[203,29704,29705],{"class":205,"line":9913},[203,29706,28799],{"class":318},[203,29708,29709],{"class":205,"line":9934},[203,29710,2489],{"emptyLinePlaceholder":131},[203,29712,29713,29716,29718,29720],{"class":205,"line":9940},[203,29714,29715],{"class":2052},"  docker",[203,29717,29231],{"class":318},[203,29719,28790],{"class":318},[203,29721,24736],{"class":262},[203,29723,29724,29726,29728],{"class":205,"line":9954},[203,29725,29354],{"class":213},[203,29727,29357],{"class":318},[203,29729,24736],{"class":262},[203,29731,29732,29734,29737],{"class":205,"line":9960},[203,29733,28793],{"class":262},[203,29735,29736],{"class":318}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[203,29738,24736],{"class":262},[203,29740,29741,29743],{"class":205,"line":9987},[203,29742,29328],{"class":262},[203,29744,24736],{"class":262},[203,29746,29747],{"class":205,"line":9996},[203,29748,28799],{"class":318},[19,29750,29751],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,29753,29754],{},[25,29755],{"alt":27,"src":29756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,29758,29759],{},[25,29760],{"alt":27,"src":29761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22088,29763,29765],{"id":29764},"_623清除构建缓存","6.2.3.清除构建缓存",[194,29767,29769],{"className":23913,"code":29768,"language":23915,"meta":27,"style":27},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[200,29770,29771,29776],{"__ignoreMap":27},[203,29772,29773],{"class":205,"line":206},[203,29774,29775],{"class":272},"# 清理BuildKit构建缓存\n",[203,29777,29778,29780,29783,29786],{"class":205,"line":124},[203,29779,26611],{"class":2052},[203,29781,29782],{"class":318}," builder",[203,29784,29785],{"class":318}," prune",[203,29787,29788],{"class":262}," -f\n",[19,29790,29791],{},[25,29792],{"alt":27,"src":29793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[174,29795,29797],{"id":29796},"_63补充","6.3.补充",[22088,29799,29801],{"id":29800},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,29803,29804],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,29806,29807],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,29809,29810],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[194,29812,29814],{"className":23913,"code":29813,"language":23915,"meta":27,"style":27},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[200,29815,29816,29823],{"__ignoreMap":27},[203,29817,29818,29820],{"class":205,"line":206},[203,29819,27428],{"class":2052},[203,29821,29822],{"class":318}," nginx\n",[203,29824,29825,29827,29830,29833,29835],{"class":205,"line":124},[203,29826,28613],{"class":2052},[203,29828,29829],{"class":318}," echo",[203,29831,29832],{"class":318}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[203,29834,26280],{"class":209},[203,29836,29837],{"class":318}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,29839,29840],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,29842,29843],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[194,29845,29847],{"className":23913,"code":29846,"language":23915,"meta":27,"style":27},"docker build -t nginx:tuling .\n",[200,29848,29849],{"__ignoreMap":27},[203,29850,29851,29853,29855,29857,29860],{"class":205,"line":206},[203,29852,26611],{"class":2052},[203,29854,28790],{"class":318},[203,29856,28793],{"class":262},[203,29858,29859],{"class":318}," nginx:tuling",[203,29861,28799],{"class":318},[19,29863,29864],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,29866,29867],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[194,29869,29871],{"className":23913,"code":29870,"language":23915,"meta":27,"style":27},"docker run -d -p 92:80 nginx:tuling\n",[200,29872,29873],{"__ignoreMap":27},[203,29874,29875,29877,29879,29882,29884,29887],{"class":205,"line":206},[203,29876,26611],{"class":2052},[203,29878,27288],{"class":318},[203,29880,29881],{"class":262}," -d",[203,29883,29274],{"class":262},[203,29885,29886],{"class":318}," 92:80",[203,29888,29889],{"class":318}," nginx:tuling\n",[19,29891,29892,29893],{},"4、访问 ",[452,29894,29897],{"href":29895,"rel":29896},"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",[23956],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,29899,29900],{},[25,29901],{"alt":27,"src":29902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,29904,29905],{},[25,29906],{"alt":27,"src":29907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22088,29909,29911],{"id":29910},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,29913,29914],{},"只需要知道大体流程即可",[19,29916,29917],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,29919,29920],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,29922,29923],{},"2、在Dockerfile中添加以下内容",[194,29925,29927],{"className":26149,"code":29926,"language":26151,"meta":27,"style":27},"# 基于哪个镜像\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",[200,29928,29929,29934,29939,29944,29949,29954,29959,29964],{"__ignoreMap":27},[203,29930,29931],{"class":205,"line":206},[203,29932,29933],{},"# 基于哪个镜像\n",[203,29935,29936],{"class":205,"line":124},[203,29937,29938],{},"From java:8\n",[203,29940,29941],{"class":205,"line":1269},[203,29942,29943],{},"# 复制文件到容器\n",[203,29945,29946],{"class":205,"line":1284},[203,29947,29948],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[203,29950,29951],{"class":205,"line":1290},[203,29952,29953],{},"# 声明需要暴露的端口\n",[203,29955,29956],{"class":205,"line":1304},[203,29957,29958],{},"EXPOSE 8877\n",[203,29960,29961],{"class":205,"line":1310},[203,29962,29963],{},"# 配置容器启动后执行的命令\n",[203,29965,29966],{"class":205,"line":1401},[203,29967,29968],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,29970,29971],{},"3、使用docker build命令构建镜像",[194,29973,29975],{"className":23913,"code":29974,"language":23915,"meta":27,"style":27},"docker build -t tulingmall-member:0.0.5 .\n",[200,29976,29977],{"__ignoreMap":27},[203,29978,29979,29981,29983,29985,29988],{"class":205,"line":206},[203,29980,26611],{"class":2052},[203,29982,28790],{"class":318},[203,29984,28793],{"class":262},[203,29986,29987],{"class":318}," tulingmall-member:0.0.5",[203,29989,28799],{"class":318},[19,29991,29992],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,29994,29995],{},[25,29996],{"alt":27,"src":29997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,29999,30000],{},"4、启动镜像，加-d可在后台启动",[194,30002,30004],{"className":23913,"code":30003,"language":23915,"meta":27,"style":27},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[200,30005,30006],{"__ignoreMap":27},[203,30007,30008,30010,30012,30014,30016,30019],{"class":205,"line":206},[203,30009,26611],{"class":2052},[203,30011,27288],{"class":318},[203,30013,29881],{"class":262},[203,30015,29274],{"class":262},[203,30017,30018],{"class":318}," 8877:8877",[203,30020,30021],{"class":318}," tulingmall-member:0.0.5\n",[19,30023,30024],{},"加上JVM参数：",[194,30026,30028],{"className":23913,"code":30027,"language":23915,"meta":27,"style":27},"# --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",[200,30029,30030,30035,30050,30060,30069,30076],{"__ignoreMap":27},[203,30031,30032],{"class":205,"line":206},[203,30033,30034],{"class":272},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[203,30036,30037,30039,30041,30044,30046,30048],{"class":205,"line":124},[203,30038,26611],{"class":2052},[203,30040,27288],{"class":318},[203,30042,30043],{"class":262},"  -d",[203,30045,29274],{"class":262},[203,30047,30018],{"class":318},[203,30049,24736],{"class":262},[203,30051,30052,30054,30057],{"class":205,"line":1269},[203,30053,28186],{"class":213},[203,30055,30056],{"class":318},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[203,30058,30059],{"class":262},"  \\\n",[203,30061,30062,30064,30067],{"class":205,"line":1284},[203,30063,28186],{"class":213},[203,30065,30066],{"class":318},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[203,30068,30059],{"class":262},[203,30070,30071,30074],{"class":205,"line":1290},[203,30072,30073],{"class":213},"--cap-add=SYS_PTRACE  ",[203,30075,26233],{"class":262},[203,30077,30078],{"class":205,"line":1304},[203,30079,30080],{"class":213},"tulingmall-member:0.0.5\n",[19,30082,30083],{},"5、访问会员服务接口",[19,30085,30086],{},[25,30087],{"alt":27,"src":30088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22088,30090,30092],{"id":30091},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30094,30095],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30097,30098,30099],{},"阿里云docker镜像仓库：",[452,30100,30101],{"href":30101,"rel":30102},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23956],[19,30104,30105],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30107,30108],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30110,30111],{},[25,30112],{"alt":27,"src":30113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30115,30116],{},"要把镜像推送到镜像仓库",[194,30118,30120],{"className":23913,"code":30119,"language":23915,"meta":27,"style":27},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[200,30121,30122],{"__ignoreMap":27},[203,30123,30124,30126,30128,30130],{"class":205,"line":206},[203,30125,26611],{"class":2052},[203,30127,28955],{"class":318},[203,30129,29987],{"class":318},[203,30131,30132],{"class":318}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30134,30135],{},"最后将镜像推送到远程仓库",[194,30137,30139],{"className":23913,"code":30138,"language":23915,"meta":27,"style":27},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[200,30140,30141],{"__ignoreMap":27},[203,30142,30143,30145,30147],{"class":205,"line":206},[203,30144,26611],{"class":2052},[203,30146,29074],{"class":318},[203,30148,30132],{"class":318},[5216,30150,30151],{},"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":27,"searchDepth":124,"depth":124,"links":30153},[30154,30155,30156],{"id":28541,"depth":1269,"text":28542},{"id":28770,"depth":1269,"text":28771},{"id":29796,"depth":1269,"text":29797},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28533,"description":27},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30163,"title":30164,"body":30165,"description":27,"extension":129,"meta":30308,"navigation":131,"path":30309,"seo":30310,"stem":30311,"__hash__":30312},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30166,"toc":30306},[30167,30170,30175,30180,30183,30188,30193,30196,30201,30206,30209,30214,30217,30220,30223,30226,30229,30232,30252,30274,30277,30280,30300,30303],[10,30168,30164],{"id":30169},"_7vscode远程开发",[157,30171,30172],{},[160,30173,30174],{},"插件1：微软Docker工具",[19,30176,30177],{},[25,30178],{"alt":27,"src":30179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30181,30182],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30184,30185],{},[25,30186],{"alt":27,"src":30187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[157,30189,30190],{"start":124},[160,30191,30192],{},"插件2：微软Docker远程开发工具",[19,30194,30195],{},"下面这是远程开发的插件。",[19,30197,30198],{},[25,30199],{"alt":27,"src":30200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30202,30203],{},[25,30204],{"alt":27,"src":30205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30207,30208],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30210,30211],{},[25,30212],{"alt":27,"src":30213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30215,30216],{},"安装完拓展之后，vscode进行链接：",[19,30218,30219],{},"1.按ctrl+shift+p",[19,30221,30222],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30224,30225],{},"3.选择目前运行的容器",[19,30227,30228],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30230,30231],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[194,30233,30235],{"className":23913,"code":30234,"language":23915,"meta":27,"style":27},"docker run -v 主机目录:容器目录 image-name\n",[200,30236,30237],{"__ignoreMap":27},[203,30238,30239,30241,30243,30246,30249],{"class":205,"line":206},[203,30240,26611],{"class":2052},[203,30242,27288],{"class":318},[203,30244,30245],{"class":262}," -v",[203,30247,30248],{"class":318}," 主机目录:容器目录",[203,30250,30251],{"class":318}," image-name\n",[194,30253,30255],{"className":23913,"code":30254,"language":23915,"meta":27,"style":27},"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",[200,30256,30257],{"__ignoreMap":27},[203,30258,30259,30261,30263,30266,30268,30271],{"class":205,"line":206},[203,30260,26611],{"class":2052},[203,30262,27288],{"class":318},[203,30264,30265],{"class":262}," -it",[203,30267,30245],{"class":262},[203,30269,30270],{"class":318}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[203,30272,30273],{"class":318}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30275,30276],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30278,30279],{},"查看挂载情况：",[194,30281,30283],{"className":23913,"code":30282,"language":23915,"meta":27,"style":27},"mount | grep -i project\n",[200,30284,30285],{"__ignoreMap":27},[203,30286,30287,30290,30292,30295,30297],{"class":205,"line":206},[203,30288,30289],{"class":2052},"mount",[203,30291,25167],{"class":209},[203,30293,30294],{"class":2052}," grep",[203,30296,26488],{"class":262},[203,30298,30299],{"class":318}," project\n",[19,30301,30302],{},"也可以通过ls来进行查看",[5216,30304,30305],{},"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":27,"searchDepth":124,"depth":124,"links":30307},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30164,"description":27},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30314,"title":30315,"body":30316,"description":23467,"extension":129,"meta":30320,"navigation":131,"path":30322,"seo":30323,"stem":30324,"__hash__":30325},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30317,"toc":30318},[],{"title":27,"searchDepth":124,"depth":124,"links":30319},[],{"category":30321},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30315,"description":23467},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30327,"title":30328,"body":30329,"description":23467,"extension":129,"meta":30333,"navigation":131,"path":30334,"seo":30335,"stem":30336,"__hash__":30337},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30330,"toc":30331},[],{"title":27,"searchDepth":124,"depth":124,"links":30332},[],{"category":30321},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30328,"description":23467},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30339,"title":30340,"body":30341,"description":23467,"extension":129,"meta":30634,"navigation":131,"path":30635,"seo":30636,"stem":30637,"__hash__":30638},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30342,"toc":30632},[30343,30346,30354,30369,30374,30425,30428,30434,30621,30626,30629],[10,30344,30340],{"id":30345},"_1验证深度学习环境",[19,30347,30348,30349],{},"关于环境的安装，看",[452,30350,30353],{"href":30351,"rel":30352},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23956],"Pytorch-->深度学习",[19,30355,30356,30357,30360,30361,30364,30365,30368],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[200,30358,30359],{},"pytorch-cuda=12.4"," 是一个“ ",[363,30362,30363],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[363,30366,30367],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30370,30371],{},[25,30372],{"alt":27,"src":30373},"\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",[194,30375,30377],{"className":23913,"code":30376,"language":23915,"meta":27,"style":27},"# 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",[200,30378,30379,30384],{"__ignoreMap":27},[203,30380,30381],{"class":205,"line":206},[203,30382,30383],{"class":272},"# CUDA 12.4\n",[203,30385,30386,30389,30391,30394,30397,30400,30403,30406,30408,30411,30414,30417,30420,30422],{"class":205,"line":124},[203,30387,30388],{"class":2052},"conda",[203,30390,23925],{"class":318},[203,30392,30393],{"class":318}," pytorch==",[203,30395,30396],{"class":262},"2.5.1",[203,30398,30399],{"class":318}," torchvision==",[203,30401,30402],{"class":262},"0.20.1",[203,30404,30405],{"class":318}," torchaudio==",[203,30407,30396],{"class":262},[203,30409,30410],{"class":318}," pytorch-cuda=",[203,30412,30413],{"class":262},"12.4",[203,30415,30416],{"class":262}," -c",[203,30418,30419],{"class":318}," pytorch",[203,30421,30416],{"class":262},[203,30423,30424],{"class":318}," nvidia\n",[19,30426,30427],{},"）：",[19,30429,30430],{},[452,30431,30432],{"href":30432,"rel":30433},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23956],[194,30435,30439],{"className":30436,"code":30437,"language":30438,"meta":27,"style":27},"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",[200,30440,30441,30446,30454,30459,30469,30485,30490,30500,30537,30544,30556,30572,30577,30587,30599,30609],{"__ignoreMap":27},[203,30442,30443],{"class":205,"line":206},[203,30444,30445],{"class":272},"# 对深度学习环境进行测试\n",[203,30447,30448,30451],{"class":205,"line":124},[203,30449,30450],{"class":209},"import",[203,30452,30453],{"class":213}," torch\n",[203,30455,30456],{"class":205,"line":1269},[203,30457,30458],{"class":272},"# 查看cuda是否被激活\n",[203,30460,30461,30464,30466],{"class":205,"line":1284},[203,30462,30463],{"class":213},"flag",[203,30465,259],{"class":209},[203,30467,30468],{"class":213},"torch.cuda.is_available()\n",[203,30470,30471,30474,30476,30479,30482],{"class":205,"line":1290},[203,30472,30473],{"class":262},"print",[203,30475,214],{"class":213},[203,30477,30478],{"class":318},"\"cuda:\"",[203,30480,30481],{"class":213},", flag)   ",[203,30483,30484],{"class":272},"#返回true的话说明被激活\n",[203,30486,30487],{"class":205,"line":1304},[203,30488,30489],{"class":272},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[203,30491,30492,30495,30497],{"class":205,"line":1310},[203,30493,30494],{"class":213},"ngpu",[203,30496,259],{"class":209},[203,30498,30499],{"class":262},"1\n",[203,30501,30502,30505,30507,30510,30513,30515,30518,30521,30524,30526,30528,30530,30532,30535],{"class":205,"line":1401},[203,30503,30504],{"class":213},"device",[203,30506,259],{"class":209},[203,30508,30509],{"class":213},"torch.device(",[203,30511,30512],{"class":318},"\"cuda:0\"",[203,30514,1793],{"class":209},[203,30516,30517],{"class":213},"(torch.cuda.is_available() ",[203,30519,30520],{"class":209},"and",[203,30522,30523],{"class":213}," ngpu",[203,30525,1174],{"class":209},[203,30527,405],{"class":262},[203,30529,13804],{"class":213},[203,30531,1790],{"class":209},[203,30533,30534],{"class":318}," \"cpu\"",[203,30536,220],{"class":213},[203,30538,30539,30541],{"class":205,"line":1407},[203,30540,30473],{"class":262},[203,30542,30543],{"class":213},"(device)\n",[203,30545,30546,30548,30551,30553],{"class":205,"line":1419},[203,30547,30473],{"class":262},[203,30549,30550],{"class":213},"(torch.cuda.get_device_name(",[203,30552,405],{"class":262},[203,30554,30555],{"class":213},"))\n",[203,30557,30558,30560,30563,30565,30567,30569],{"class":205,"line":1701},[203,30559,30473],{"class":262},[203,30561,30562],{"class":213},"(torch.rand(",[203,30564,285],{"class":262},[203,30566,592],{"class":213},[203,30568,285],{"class":262},[203,30570,30571],{"class":213},").cuda())\n",[203,30573,30574],{"class":205,"line":1706},[203,30575,30576],{"class":272},"# 查看cuda和cudnn的版本\n",[203,30578,30579,30582,30584],{"class":205,"line":1712},[203,30580,30581],{"class":213},"cuda_version",[203,30583,259],{"class":209},[203,30585,30586],{"class":213},"torch.version.cuda\n",[203,30588,30589,30591,30593,30596],{"class":205,"line":1717},[203,30590,30473],{"class":262},[203,30592,214],{"class":213},[203,30594,30595],{"class":318},"\"cuda version\"",[203,30597,30598],{"class":213},",cuda_version)\n",[203,30600,30601,30604,30606],{"class":205,"line":1731},[203,30602,30603],{"class":213},"cudnn_version",[203,30605,259],{"class":209},[203,30607,30608],{"class":213},"torch.backends.cudnn.version()\n",[203,30610,30611,30613,30615,30618],{"class":205,"line":1736},[203,30612,30473],{"class":262},[203,30614,214],{"class":213},[203,30616,30617],{"class":318},"\"cudnn version\"",[203,30619,30620],{"class":213},",cudnn_version)\n",[19,30622,30623],{},[25,30624],{"alt":27,"src":30625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[19,30627,30628],{},"cuda:0 指的是一块显卡",[5216,30630,30631],{},"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":27,"searchDepth":124,"depth":124,"links":30633},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30340,"description":23467},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30640,"title":30641,"body":30642,"description":23467,"extension":129,"meta":50446,"navigation":131,"path":50447,"seo":50448,"stem":50449,"__hash__":50450},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30643,"toc":50440},[30644,30647,30651,30655,30658,30663,30668,30671,30676,30681,30686,30689,30693,30698,30702,30707,30710,30715,30718,30721,30724,30727,30732,30735,30740,30745,30750,30755,30758,30762,30765,30770,31374,31379,31382,31387,31390,31393,31857,31860,31863,31866,31869,33920,33923,33928,33933,34728,34731,34736,35514,35518,37177,37181,37895,37899,37903,37908,37913,37918,37921,37926,37931,37936,37941,37946,37950,37955,39237,39242,39245,39248,39251,39406,39409,39412,40628,40633,41328,41332,41336,41341,41346,41349,41354,41359,41364,41369,41374,41379,41384,41389,41394,41399,41404,41409,41414,41419,41424,41429,41434,41439,41444,41449,41454,41459,41464,41469,41474,41479,41484,41489,41494,41499,41503,41507,41510,42988,42992,44639,44643,45337,45341,45344,45347,45891,45894,45898,45901,47298,47302,47305,47883,49670,49674,49677,50437],[10,30645,30641],{"id":30646},"_2经典神经网络",[174,30648,30650],{"id":30649},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22088,30652,30654],{"id":30653},"_211原理介绍","2.1.1.原理介绍",[19,30656,30657],{},"LeNet-5",[157,30659,30660],{},[160,30661,30662],{},"原理",[19,30664,30665],{},[25,30666],{"alt":27,"src":30667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[19,30669,30670],{},"B是batch批次；C是channel通道",[157,30672,30673],{"start":124},[160,30674,30675],{},"网络参数详细",[19,30677,30678],{},[25,30679],{"alt":27,"src":30680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[19,30682,30683],{},[25,30684],{"alt":27,"src":30685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[19,30687,30688],{},"AlexNet",[157,30690,30691],{},[160,30692,30662],{},[19,30694,30695],{},[25,30696],{"alt":27,"src":30697},"\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",[157,30699,30700],{"start":124},[160,30701,30675],{},[19,30703,30704],{},[25,30705],{"alt":27,"src":30706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[19,30708,30709],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,30711,30712],{},[25,30713],{"alt":27,"src":30714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[19,30716,30717],{},"数据处理中的图像增强操作:",[19,30719,30720],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,30722,30723],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,30725,30726],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,30728,30729],{},[25,30730],{"alt":27,"src":30731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[19,30733,30734],{},"提升网络精确度的方法：LRN正则化",[19,30736,30737],{},[25,30738],{"alt":27,"src":30739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[19,30741,30742],{},[25,30743],{"alt":27,"src":30744},"\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",[157,30746,30747],{"start":1269},[160,30748,30749],{},"AlexNet的总结",[19,30751,30752],{},[25,30753],{"alt":27,"src":30754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[19,30756,30757],{},"比LeNet模型要深一丢丢",[22088,30759,30761],{"id":30760},"_212代码实现","2.1.2.代码实现",[19,30763,30764],{},"（1）LeNet",[157,30766,30767],{},[160,30768,30769],{},"模型搭建",[194,30771,30773],{"className":30436,"code":30772,"language":30438,"meta":27,"style":27},"# 导入库\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",[200,30774,30775,30780,30786,30791,30804,30809,30821,30825,30845,30850,30855,30866,30871,30890,30894,30899,30948,30960,30965,30994,31029,31056,31061,31073,31078,31098,31117,31136,31140,31145,31155,31172,31183,31198,31209,31220,31235,31250,31261,31268,31272,31286,31291,31314,31319,31324,31329,31333,31338,31343,31353],{"__ignoreMap":27},[203,30776,30777],{"class":205,"line":206},[203,30778,30779],{"class":272},"# 导入库\n",[203,30781,30782,30784],{"class":205,"line":124},[203,30783,30450],{"class":209},[203,30785,30453],{"class":213},[203,30787,30788],{"class":205,"line":1269},[203,30789,30790],{"class":272},"# 导入神经网络层\n",[203,30792,30793,30796,30799,30801],{"class":205,"line":1284},[203,30794,30795],{"class":209},"from",[203,30797,30798],{"class":213}," torch ",[203,30800,30450],{"class":209},[203,30802,30803],{"class":213}," nn\n",[203,30805,30806],{"class":205,"line":1290},[203,30807,30808],{"class":272},"# 导入展示神经网络参数的包\n",[203,30810,30811,30813,30816,30818],{"class":205,"line":1304},[203,30812,30795],{"class":209},[203,30814,30815],{"class":213}," torchsummary ",[203,30817,30450],{"class":209},[203,30819,30820],{"class":213}," summary\n",[203,30822,30823],{"class":205,"line":1310},[203,30824,2489],{"emptyLinePlaceholder":131},[203,30826,30827,30829,30832,30834,30837,30839,30842],{"class":205,"line":1401},[203,30828,14784],{"class":209},[203,30830,30831],{"class":2052}," LeNet",[203,30833,214],{"class":213},[203,30835,30836],{"class":2052},"nn",[203,30838,772],{"class":213},[203,30840,30841],{"class":2052},"Module",[203,30843,30844],{"class":213},"):\n",[203,30846,30847],{"class":205,"line":1407},[203,30848,30849],{"class":272},"    # 模型初始化:\n",[203,30851,30852],{"class":205,"line":1419},[203,30853,30854],{"class":272},"    # 定义一些网络层和激活函数\n",[203,30856,30857,30860,30863],{"class":205,"line":1701},[203,30858,30859],{"class":209},"    def",[203,30861,30862],{"class":262}," __init__",[203,30864,30865],{"class":213},"(self):\n",[203,30867,30868],{"class":205,"line":1706},[203,30869,30870],{"class":272},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[203,30872,30873,30876,30879,30882,30885,30888],{"class":205,"line":1712},[203,30874,30875],{"class":262},"        super",[203,30877,30878],{"class":213},"(LeNet,",[203,30880,30881],{"class":262},"self",[203,30883,30884],{"class":213},").",[203,30886,30887],{"class":262},"__init__",[203,30889,2065],{"class":213},[203,30891,30892],{"class":205,"line":1717},[203,30893,2489],{"emptyLinePlaceholder":131},[203,30895,30896],{"class":205,"line":1731},[203,30897,30898],{"class":272},"        # 定义网络层\n",[203,30900,30901,30904,30907,30909,30912,30915,30917,30919,30921,30924,30926,30928,30930,30933,30935,30937,30939,30942,30944,30946],{"class":205,"line":1736},[203,30902,30903],{"class":262},"        self",[203,30905,30906],{"class":213},".c1",[203,30908,259],{"class":209},[203,30910,30911],{"class":213},"nn.Conv2d(",[203,30913,30914],{"class":5306},"in_channels",[203,30916,259],{"class":209},[203,30918,431],{"class":262},[203,30920,592],{"class":213},[203,30922,30923],{"class":5306},"out_channels",[203,30925,259],{"class":209},[203,30927,558],{"class":262},[203,30929,592],{"class":213},[203,30931,30932],{"class":5306},"kernel_size",[203,30934,259],{"class":209},[203,30936,533],{"class":262},[203,30938,592],{"class":213},[203,30940,30941],{"class":5306},"padding",[203,30943,259],{"class":209},[203,30945,291],{"class":262},[203,30947,220],{"class":213},[203,30949,30950,30952,30955,30957],{"class":205,"line":1742},[203,30951,30903],{"class":262},[203,30953,30954],{"class":213},".sig",[203,30956,259],{"class":209},[203,30958,30959],{"class":213},"nn.Sigmoid()\n",[203,30961,30962],{"class":205,"line":1763},[203,30963,30964],{"class":272},"        # 定义池化\n",[203,30966,30967,30969,30972,30974,30977,30979,30981,30983,30985,30988,30990,30992],{"class":205,"line":1768},[203,30968,30903],{"class":262},[203,30970,30971],{"class":213},".s2",[203,30973,259],{"class":209},[203,30975,30976],{"class":213},"nn.AvgPool2d(",[203,30978,30932],{"class":5306},[203,30980,259],{"class":209},[203,30982,291],{"class":262},[203,30984,592],{"class":213},[203,30986,30987],{"class":5306},"stride",[203,30989,259],{"class":209},[203,30991,291],{"class":262},[203,30993,220],{"class":213},[203,30995,30996,30998,31001,31003,31005,31007,31009,31011,31013,31015,31017,31019,31021,31023,31025,31027],{"class":205,"line":1782},[203,30997,30903],{"class":262},[203,30999,31000],{"class":213},".c3",[203,31002,259],{"class":209},[203,31004,30911],{"class":213},[203,31006,30914],{"class":5306},[203,31008,259],{"class":209},[203,31010,558],{"class":262},[203,31012,592],{"class":213},[203,31014,30923],{"class":5306},[203,31016,259],{"class":209},[203,31018,815],{"class":262},[203,31020,592],{"class":213},[203,31022,30932],{"class":5306},[203,31024,259],{"class":209},[203,31026,533],{"class":262},[203,31028,220],{"class":213},[203,31030,31031,31033,31036,31038,31040,31042,31044,31046,31048,31050,31052,31054],{"class":205,"line":1787},[203,31032,30903],{"class":262},[203,31034,31035],{"class":213},".s4",[203,31037,259],{"class":209},[203,31039,30976],{"class":213},[203,31041,30932],{"class":5306},[203,31043,259],{"class":209},[203,31045,291],{"class":262},[203,31047,592],{"class":213},[203,31049,30987],{"class":5306},[203,31051,259],{"class":209},[203,31053,291],{"class":262},[203,31055,220],{"class":213},[203,31057,31058],{"class":205,"line":1816},[203,31059,31060],{"class":272},"        # 定义平展层\n",[203,31062,31063,31065,31068,31070],{"class":205,"line":1821},[203,31064,30903],{"class":262},[203,31066,31067],{"class":213},".flatten",[203,31069,259],{"class":209},[203,31071,31072],{"class":213},"nn.Flatten()\n",[203,31074,31075],{"class":205,"line":1838},[203,31076,31077],{"class":272},"        # 定义全连接层\n",[203,31079,31080,31082,31085,31087,31090,31092,31094,31096],{"class":205,"line":1843},[203,31081,30903],{"class":262},[203,31083,31084],{"class":213},".f5",[203,31086,259],{"class":209},[203,31088,31089],{"class":213},"nn.Linear(",[203,31091,4076],{"class":262},[203,31093,592],{"class":213},[203,31095,1031],{"class":262},[203,31097,220],{"class":213},[203,31099,31100,31102,31105,31107,31109,31111,31113,31115],{"class":205,"line":1848},[203,31101,30903],{"class":262},[203,31103,31104],{"class":213},".f6",[203,31106,259],{"class":209},[203,31108,31089],{"class":213},[203,31110,1031],{"class":262},[203,31112,592],{"class":213},[203,31114,925],{"class":262},[203,31116,220],{"class":213},[203,31118,31119,31121,31124,31126,31128,31130,31132,31134],{"class":205,"line":1853},[203,31120,30903],{"class":262},[203,31122,31123],{"class":213},".f7",[203,31125,259],{"class":209},[203,31127,31089],{"class":213},[203,31129,925],{"class":262},[203,31131,592],{"class":213},[203,31133,660],{"class":262},[203,31135,220],{"class":213},[203,31137,31138],{"class":205,"line":1867},[203,31139,2489],{"emptyLinePlaceholder":131},[203,31141,31142],{"class":205,"line":1872},[203,31143,31144],{"class":272},"    # 写工具->写前向传播\n",[203,31146,31147,31149,31152],{"class":205,"line":2666},[203,31148,30859],{"class":209},[203,31150,31151],{"class":2052}," forward",[203,31153,31154],{"class":213},"(self,x):\n",[203,31156,31157,31160,31162,31164,31167,31169],{"class":205,"line":2680},[203,31158,31159],{"class":213},"        x",[203,31161,259],{"class":209},[203,31163,30881],{"class":262},[203,31165,31166],{"class":213},".sig(",[203,31168,30881],{"class":262},[203,31170,31171],{"class":213},".c1(x))\n",[203,31173,31174,31176,31178,31180],{"class":205,"line":2688},[203,31175,31159],{"class":213},[203,31177,259],{"class":209},[203,31179,30881],{"class":262},[203,31181,31182],{"class":213},".s2(x)\n",[203,31184,31185,31187,31189,31191,31193,31195],{"class":205,"line":2693},[203,31186,31159],{"class":213},[203,31188,259],{"class":209},[203,31190,30881],{"class":262},[203,31192,31166],{"class":213},[203,31194,30881],{"class":262},[203,31196,31197],{"class":213},".c3(x))\n",[203,31199,31200,31202,31204,31206],{"class":205,"line":2699},[203,31201,31159],{"class":213},[203,31203,259],{"class":209},[203,31205,30881],{"class":262},[203,31207,31208],{"class":213},".s4(x)\n",[203,31210,31211,31213,31215,31217],{"class":205,"line":2705},[203,31212,31159],{"class":213},[203,31214,259],{"class":209},[203,31216,30881],{"class":262},[203,31218,31219],{"class":213},".flatten(x)\n",[203,31221,31222,31224,31226,31228,31230,31232],{"class":205,"line":2710},[203,31223,31159],{"class":213},[203,31225,259],{"class":209},[203,31227,30881],{"class":262},[203,31229,31166],{"class":213},[203,31231,30881],{"class":262},[203,31233,31234],{"class":213},".f5(x))\n",[203,31236,31237,31239,31241,31243,31245,31247],{"class":205,"line":8038},[203,31238,31159],{"class":213},[203,31240,259],{"class":209},[203,31242,30881],{"class":262},[203,31244,31166],{"class":213},[203,31246,30881],{"class":262},[203,31248,31249],{"class":213},".f6(x))\n",[203,31251,31252,31254,31256,31258],{"class":205,"line":8062},[203,31253,31159],{"class":213},[203,31255,259],{"class":209},[203,31257,30881],{"class":262},[203,31259,31260],{"class":213},".f7(x)\n",[203,31262,31263,31265],{"class":205,"line":8067},[203,31264,14842],{"class":209},[203,31266,31267],{"class":213}," x\n",[203,31269,31270],{"class":205,"line":8073},[203,31271,2489],{"emptyLinePlaceholder":131},[203,31273,31274,31276,31279,31281,31284],{"class":205,"line":8100},[203,31275,1620],{"class":209},[203,31277,31278],{"class":262}," __name__",[203,31280,3038],{"class":209},[203,31282,31283],{"class":318},"\"__main__\"",[203,31285,3828],{"class":213},[203,31287,31288],{"class":205,"line":8105},[203,31289,31290],{"class":272},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[203,31292,31293,31296,31298,31300,31303,31305,31308,31310,31312],{"class":205,"line":8111},[203,31294,31295],{"class":213},"    device",[203,31297,259],{"class":209},[203,31299,30509],{"class":213},[203,31301,31302],{"class":318},"\"cuda\"",[203,31304,1793],{"class":209},[203,31306,31307],{"class":213}," torch.cuda.is_available() ",[203,31309,1790],{"class":209},[203,31311,30534],{"class":318},[203,31313,220],{"class":213},[203,31315,31316],{"class":205,"line":8123},[203,31317,31318],{"class":272},"    # 如果就是想指定用cpu用下方代码:\n",[203,31320,31321],{"class":205,"line":8135},[203,31322,31323],{"class":272},"    # device=\"cpu\"\n",[203,31325,31326],{"class":205,"line":8147},[203,31327,31328],{"class":272},"    # print(device)\n",[203,31330,31331],{"class":205,"line":9806},[203,31332,2489],{"emptyLinePlaceholder":131},[203,31334,31335],{"class":205,"line":9831},[203,31336,31337],{"class":272},"    # 实例化模型\n",[203,31339,31340],{"class":205,"line":9854},[203,31341,31342],{"class":272},"    # 将模型放到设备中去运行\n",[203,31344,31345,31348,31350],{"class":205,"line":9878},[203,31346,31347],{"class":213},"    model",[203,31349,259],{"class":209},[203,31351,31352],{"class":213},"LeNet().to(device)\n",[203,31354,31355,31358,31361,31363,31365,31367,31369,31371],{"class":205,"line":9883},[203,31356,31357],{"class":262},"    print",[203,31359,31360],{"class":213},"(summary(model,(",[203,31362,431],{"class":262},[203,31364,592],{"class":213},[203,31366,1115],{"class":262},[203,31368,592],{"class":213},[203,31370,1115],{"class":262},[203,31372,31373],{"class":213},")))\n",[19,31375,31376],{},[25,31377],{"alt":27,"src":31378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[19,31380,31381],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[157,31383,31384],{"start":124},[160,31385,31386],{},"训练",[19,31388,31389],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31391,31392],{},"在训练之前可以将数据展示看一下",[194,31394,31396],{"className":30436,"code":31395,"language":30438,"meta":27,"style":27},"# 建立画图的函数，用于展示数据\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",[200,31397,31398,31403,31408,31420,31432,31445,31450,31462,31467,31479,31484,31496,31500,31504,31525,31537,31542,31563,31574,31578,31583,31601,31612,31617,31628,31633,31644,31648,31653,31668,31681,31686,31691,31704,31717,31730,31735,31739,31744,31764,31781,31801,31814,31827,31837,31852],{"__ignoreMap":27},[203,31399,31400],{"class":205,"line":206},[203,31401,31402],{"class":272},"# 建立画图的函数，用于展示数据\n",[203,31404,31405],{"class":205,"line":124},[203,31406,31407],{"class":272},"# torchvision中包含很多内置的数据集\n",[203,31409,31410,31412,31415,31417],{"class":205,"line":1269},[203,31411,30795],{"class":209},[203,31413,31414],{"class":213}," sklearn.externals.array_api_compat.torch ",[203,31416,30450],{"class":209},[203,31418,31419],{"class":213}," squeeze\n",[203,31421,31422,31424,31427,31429],{"class":205,"line":1284},[203,31423,30795],{"class":209},[203,31425,31426],{"class":213}," torchvision.datasets ",[203,31428,30450],{"class":209},[203,31430,31431],{"class":213}," FashionMNIST\n",[203,31433,31434,31436,31439,31442],{"class":205,"line":1290},[203,31435,30450],{"class":209},[203,31437,31438],{"class":213}," numpy ",[203,31440,31441],{"class":209},"as",[203,31443,31444],{"class":213}," np\n",[203,31446,31447],{"class":205,"line":1304},[203,31448,31449],{"class":272},"# 引入处理数据集的包\n",[203,31451,31452,31454,31457,31459],{"class":205,"line":1310},[203,31453,30795],{"class":209},[203,31455,31456],{"class":213}," torchvision ",[203,31458,30450],{"class":209},[203,31460,31461],{"class":213}," transforms\n",[203,31463,31464],{"class":205,"line":1401},[203,31465,31466],{"class":272},"# 从torch库中引入数据处理的包\n",[203,31468,31469,31471,31474,31476],{"class":205,"line":1407},[203,31470,30450],{"class":209},[203,31472,31473],{"class":213}," torch.utils.data ",[203,31475,31441],{"class":209},[203,31477,31478],{"class":213}," Data\n",[203,31480,31481],{"class":205,"line":1419},[203,31482,31483],{"class":272},"# 导入画图的库\n",[203,31485,31486,31488,31491,31493],{"class":205,"line":1701},[203,31487,30450],{"class":209},[203,31489,31490],{"class":213}," matplotlib.pyplot ",[203,31492,31441],{"class":209},[203,31494,31495],{"class":213}," plt\n",[203,31497,31498],{"class":205,"line":1706},[203,31499,2489],{"emptyLinePlaceholder":131},[203,31501,31502],{"class":205,"line":1712},[203,31503,2489],{"emptyLinePlaceholder":131},[203,31505,31506,31509,31511,31514,31517,31519,31522],{"class":205,"line":1717},[203,31507,31508],{"class":213},"train_data",[203,31510,259],{"class":209},[203,31512,31513],{"class":213},"FashionMNIST(",[203,31515,31516],{"class":5306},"root",[203,31518,259],{"class":209},[203,31520,31521],{"class":318},"'.\u002Fdata'",[203,31523,31524],{"class":213},",\n",[203,31526,31527,31530,31532,31535],{"class":205,"line":1731},[203,31528,31529],{"class":5306},"                        train",[203,31531,259],{"class":209},[203,31533,31534],{"class":262},"True",[203,31536,31524],{"class":213},[203,31538,31539],{"class":205,"line":1736},[203,31540,31541],{"class":272},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[203,31543,31544,31547,31549,31552,31555,31557,31560],{"class":205,"line":1742},[203,31545,31546],{"class":5306},"                        transform",[203,31548,259],{"class":209},[203,31550,31551],{"class":213},"transforms.Compose([transforms.Resize(",[203,31553,31554],{"class":5306},"size",[203,31556,259],{"class":209},[203,31558,31559],{"class":262},"224",[203,31561,31562],{"class":213},"),transforms.ToTensor()]),\n",[203,31564,31565,31568,31570,31572],{"class":205,"line":1763},[203,31566,31567],{"class":5306},"                        download",[203,31569,259],{"class":209},[203,31571,31534],{"class":262},[203,31573,220],{"class":213},[203,31575,31576],{"class":205,"line":1768},[203,31577,2489],{"emptyLinePlaceholder":131},[203,31579,31580],{"class":205,"line":1782},[203,31581,31582],{"class":272},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[203,31584,31585,31588,31590,31593,31596,31598],{"class":205,"line":1787},[203,31586,31587],{"class":213},"train_loader",[203,31589,259],{"class":209},[203,31591,31592],{"class":213},"Data.DataLoader(",[203,31594,31595],{"class":5306},"dataset",[203,31597,259],{"class":209},[203,31599,31600],{"class":213},"train_data,\n",[203,31602,31603,31606,31608,31610],{"class":205,"line":1816},[203,31604,31605],{"class":5306},"                             batch_size",[203,31607,259],{"class":209},[203,31609,417],{"class":262},[203,31611,31524],{"class":213},[203,31613,31614],{"class":205,"line":1821},[203,31615,31616],{"class":272},"                             # 数据是否打乱\n",[203,31618,31619,31622,31624,31626],{"class":205,"line":1838},[203,31620,31621],{"class":5306},"                             shuffle",[203,31623,259],{"class":209},[203,31625,31534],{"class":262},[203,31627,31524],{"class":213},[203,31629,31630],{"class":205,"line":1843},[203,31631,31632],{"class":272},"                             # 规定加载数据的进程\n",[203,31634,31635,31638,31640,31642],{"class":205,"line":1848},[203,31636,31637],{"class":5306},"                             num_workers",[203,31639,259],{"class":209},[203,31641,405],{"class":262},[203,31643,220],{"class":213},[203,31645,31646],{"class":205,"line":1853},[203,31647,2489],{"emptyLinePlaceholder":131},[203,31649,31650],{"class":205,"line":1867},[203,31651,31652],{"class":272},"# 获得一个batch的数据\n",[203,31654,31655,31657,31660,31662,31665],{"class":205,"line":1872},[203,31656,3114],{"class":209},[203,31658,31659],{"class":213}," step,(b_x,b_y) ",[203,31661,26101],{"class":209},[203,31663,31664],{"class":262}," enumerate",[203,31666,31667],{"class":213},"(train_loader):\n",[203,31669,31670,31672,31675,31677,31679],{"class":205,"line":2666},[203,31671,3190],{"class":209},[203,31673,31674],{"class":213}," step ",[203,31676,1174],{"class":209},[203,31678,4182],{"class":262},[203,31680,3828],{"class":213},[203,31682,31683],{"class":205,"line":2680},[203,31684,31685],{"class":209},"        break\n",[203,31687,31688],{"class":205,"line":2688},[203,31689,31690],{"class":272},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[203,31692,31693,31696,31698,31701],{"class":205,"line":2693},[203,31694,31695],{"class":213},"batch_x",[203,31697,259],{"class":209},[203,31699,31700],{"class":213},"b_x.squeeze().numpy()  ",[203,31702,31703],{"class":272},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[203,31705,31706,31709,31711,31714],{"class":205,"line":2699},[203,31707,31708],{"class":213},"batch_y",[203,31710,259],{"class":209},[203,31712,31713],{"class":213},"b_y.numpy()   ",[203,31715,31716],{"class":272},"#将张量转换成功numpy数组\n",[203,31718,31719,31722,31724,31727],{"class":205,"line":2705},[203,31720,31721],{"class":213},"class_label",[203,31723,259],{"class":209},[203,31725,31726],{"class":213},"train_data.classes  ",[203,31728,31729],{"class":272},"#训练集标签\n",[203,31731,31732],{"class":205,"line":2710},[203,31733,31734],{"class":272},"# print(class_label)\n",[203,31736,31737],{"class":205,"line":8038},[203,31738,2489],{"emptyLinePlaceholder":131},[203,31740,31741],{"class":205,"line":8062},[203,31742,31743],{"class":272},"# 可视化一个batch的图像\n",[203,31745,31746,31749,31752,31754,31756,31758,31760,31762],{"class":205,"line":8067},[203,31747,31748],{"class":213},"plt.figure(",[203,31750,31751],{"class":5306},"figsize",[203,31753,259],{"class":209},[203,31755,214],{"class":213},[203,31757,712],{"class":262},[203,31759,592],{"class":213},[203,31761,533],{"class":262},[203,31763,30555],{"class":213},[203,31765,31766,31768,31771,31773,31776,31778],{"class":205,"line":8073},[203,31767,3114],{"class":209},[203,31769,31770],{"class":213}," ii ",[203,31772,26101],{"class":209},[203,31774,31775],{"class":213}," np.arange(",[203,31777,7448],{"class":262},[203,31779,31780],{"class":213},"(batch_y)):\n",[203,31782,31783,31786,31788,31790,31792,31795,31797,31799],{"class":205,"line":8100},[203,31784,31785],{"class":213},"    plt.subplot(",[203,31787,507],{"class":262},[203,31789,592],{"class":213},[203,31791,815],{"class":262},[203,31793,31794],{"class":213},",ii ",[203,31796,695],{"class":209},[203,31798,25176],{"class":262},[203,31800,220],{"class":213},[203,31802,31803,31806,31809,31811],{"class":205,"line":8105},[203,31804,31805],{"class":213},"    plt.imshow(batch_x[ii,:,:],",[203,31807,31808],{"class":5306},"cmap",[203,31810,259],{"class":209},[203,31812,31813],{"class":213},"plt.cm.gray)\n",[203,31815,31816,31819,31821,31823,31825],{"class":205,"line":8111},[203,31817,31818],{"class":213},"    plt.title(class_label[batch_y[ii]],",[203,31820,31554],{"class":5306},[203,31822,259],{"class":209},[203,31824,660],{"class":262},[203,31826,220],{"class":213},[203,31828,31829,31832,31835],{"class":205,"line":8123},[203,31830,31831],{"class":213},"    plt.axis(",[203,31833,31834],{"class":318},"\"off\"",[203,31836,220],{"class":213},[203,31838,31839,31842,31845,31847,31850],{"class":205,"line":8135},[203,31840,31841],{"class":213},"    plt.subplots_adjust(",[203,31843,31844],{"class":5306},"wspace",[203,31846,259],{"class":209},[203,31848,31849],{"class":262},"0.05",[203,31851,220],{"class":213},[203,31853,31854],{"class":205,"line":8147},[203,31855,31856],{"class":213},"plt.show()\n",[19,31858,31859],{},"用matplotlib进行展示的过程可以后续再补",[19,31861,31862],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,31864,31865],{},"训练次数就是按照批次过整个训练集数据的次数",[19,31867,31868],{},"模型训练：",[194,31870,31872],{"className":30436,"code":31871,"language":30438,"meta":27,"style":27},"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",[200,31873,31874,31881,31888,31892,31904,31910,31921,31931,31941,31951,31961,31966,31978,31988,31992,31996,32001,32012,32025,32036,32053,32064,32103,32119,32131,32142,32147,32158,32174,32185,32196,32207,32214,32218,32223,32228,32232,32237,32247,32268,32272,32276,32281,32286,32291,32311,32315,32320,32330,32334,32339,32348,32353,32358,32363,32373,32377,32381,32386,32391,32401,32406,32416,32421,32430,32435,32444,32449,32458,32462,32467,32477,32481,32485,32490,32505,32533,32548,32552,32557,32562,32571,32576,32585,32590,32599,32604,32613,32618,32627,32632,32641,32646,32659,32664,32674,32679,32689,32695,32701,32707,32713,32724,32730,32750,32756,32767,32773,32779,32785,32791,32797,32803,32809,32829,32835,32851,32857,32871,32877,32892,32898,32907,32913,32922,32928,32934,32943,32949,32960,32966,32985,32991,33002,33008,33028,33044,33050,33064,33070,33076,33087,33093,33099,33109,33115,33126,33132,33142,33147,33153,33202,33249,33254,33260,33279,33285,33305,33311,33317,33327,33332,33338,33354,33399,33405,33411,33417,33428,33434,33440,33446,33464,33478,33487,33496,33505,33514,33520,33526,33534,33539,33545,33556,33562,33582,33588,33594,33600,33617,33623,33629,33635,33641,33647,33674,33698,33704,33710,33716,33727,33738,33744,33761,33784,33807,33813,33818,33827,33837,33843,33848,33854,33867,33873,33884,33895,33914],{"__ignoreMap":27},[203,31875,31876,31878],{"class":205,"line":206},[203,31877,30450],{"class":209},[203,31879,31880],{"class":213}," copy\n",[203,31882,31883,31885],{"class":205,"line":124},[203,31884,30450],{"class":209},[203,31886,31887],{"class":213}," time\n",[203,31889,31890],{"class":205,"line":1269},[203,31891,2489],{"emptyLinePlaceholder":131},[203,31893,31894,31896,31899,31901],{"class":205,"line":1284},[203,31895,30450],{"class":209},[203,31897,31898],{"class":213}," pandas ",[203,31900,31441],{"class":209},[203,31902,31903],{"class":213}," pd\n",[203,31905,31906,31908],{"class":205,"line":1290},[203,31907,30450],{"class":209},[203,31909,30453],{"class":213},[203,31911,31912,31914,31916,31918],{"class":205,"line":1304},[203,31913,30795],{"class":209},[203,31915,31473],{"class":213},[203,31917,30450],{"class":209},[203,31919,31920],{"class":213}," Dataset\n",[203,31922,31923,31925,31927,31929],{"class":205,"line":1310},[203,31924,30795],{"class":209},[203,31926,31426],{"class":213},[203,31928,30450],{"class":209},[203,31930,31431],{"class":213},[203,31932,31933,31935,31937,31939],{"class":205,"line":1401},[203,31934,30795],{"class":209},[203,31936,31456],{"class":213},[203,31938,30450],{"class":209},[203,31940,31461],{"class":213},[203,31942,31943,31945,31947,31949],{"class":205,"line":1407},[203,31944,30450],{"class":209},[203,31946,31473],{"class":213},[203,31948,31441],{"class":209},[203,31950,31478],{"class":213},[203,31952,31953,31955,31957,31959],{"class":205,"line":1419},[203,31954,30450],{"class":209},[203,31956,31490],{"class":213},[203,31958,31441],{"class":209},[203,31960,31495],{"class":213},[203,31962,31963],{"class":205,"line":1701},[203,31964,31965],{"class":272},"# 导入模型\n",[203,31967,31968,31970,31973,31975],{"class":205,"line":1706},[203,31969,30795],{"class":209},[203,31971,31972],{"class":213}," model ",[203,31974,30450],{"class":209},[203,31976,31977],{"class":213}," LeNet\n",[203,31979,31980,31982,31984,31986],{"class":205,"line":1712},[203,31981,30795],{"class":209},[203,31983,30798],{"class":213},[203,31985,30450],{"class":209},[203,31987,30803],{"class":213},[203,31989,31990],{"class":205,"line":1717},[203,31991,2489],{"emptyLinePlaceholder":131},[203,31993,31994],{"class":205,"line":1731},[203,31995,2489],{"emptyLinePlaceholder":131},[203,31997,31998],{"class":205,"line":1736},[203,31999,32000],{"class":272},"# 处理训练集与验证集函数--->划分数据集\n",[203,32002,32003,32006,32009],{"class":205,"line":1742},[203,32004,32005],{"class":209},"def",[203,32007,32008],{"class":2052}," train_val_data_process",[203,32010,32011],{"class":213},"():\n",[203,32013,32014,32017,32019,32021,32023],{"class":205,"line":1763},[203,32015,32016],{"class":213},"    train_data",[203,32018,259],{"class":209},[203,32020,31513],{"class":213},[203,32022,31521],{"class":318},[203,32024,31524],{"class":213},[203,32026,32027,32030,32032,32034],{"class":205,"line":1768},[203,32028,32029],{"class":5306},"                            train",[203,32031,259],{"class":209},[203,32033,31534],{"class":262},[203,32035,31524],{"class":213},[203,32037,32038,32041,32043,32045,32047,32049,32051],{"class":205,"line":1782},[203,32039,32040],{"class":5306},"                            transform",[203,32042,259],{"class":209},[203,32044,31551],{"class":213},[203,32046,31554],{"class":5306},[203,32048,259],{"class":209},[203,32050,1115],{"class":262},[203,32052,31562],{"class":213},[203,32054,32055,32058,32060,32062],{"class":205,"line":1787},[203,32056,32057],{"class":5306},"                            download",[203,32059,259],{"class":209},[203,32061,31534],{"class":262},[203,32063,220],{"class":213},[203,32065,32066,32069,32071,32074,32077,32079,32082,32084,32086,32089,32091,32093,32096,32098,32100],{"class":205,"line":1816},[203,32067,32068],{"class":213},"    train_data,val_data",[203,32070,259],{"class":209},[203,32072,32073],{"class":213},"Data.random_split(train_data,[",[203,32075,32076],{"class":262},"round",[203,32078,214],{"class":213},[203,32080,32081],{"class":262},"0.8",[203,32083,669],{"class":209},[203,32085,7448],{"class":262},[203,32087,32088],{"class":213},"(train_data)),",[203,32090,32076],{"class":262},[203,32092,214],{"class":213},[203,32094,32095],{"class":262},"0.2",[203,32097,669],{"class":209},[203,32099,7448],{"class":262},[203,32101,32102],{"class":213},"(train_data))])\n",[203,32104,32105,32108,32110,32113,32115,32117],{"class":205,"line":1821},[203,32106,32107],{"class":213},"    train_dataloader ",[203,32109,259],{"class":209},[203,32111,32112],{"class":213}," Data.DataLoader(",[203,32114,31595],{"class":5306},[203,32116,259],{"class":209},[203,32118,31600],{"class":213},[203,32120,32121,32124,32126,32129],{"class":205,"line":1838},[203,32122,32123],{"class":5306},"                                       batch_size",[203,32125,259],{"class":209},[203,32127,32128],{"class":262},"128",[203,32130,31524],{"class":213},[203,32132,32133,32136,32138,32140],{"class":205,"line":1843},[203,32134,32135],{"class":5306},"                                       shuffle",[203,32137,259],{"class":209},[203,32139,31534],{"class":262},[203,32141,31524],{"class":213},[203,32143,32144],{"class":205,"line":1848},[203,32145,32146],{"class":272},"                                       # 规定8个进程\n",[203,32148,32149,32152,32154,32156],{"class":205,"line":1853},[203,32150,32151],{"class":5306},"                                       num_workers",[203,32153,259],{"class":209},[203,32155,609],{"class":262},[203,32157,220],{"class":213},[203,32159,32160,32163,32165,32167,32169,32171],{"class":205,"line":1867},[203,32161,32162],{"class":213},"    val_dataloader",[203,32164,259],{"class":209},[203,32166,31592],{"class":213},[203,32168,31595],{"class":5306},[203,32170,259],{"class":209},[203,32172,32173],{"class":213},"val_data,\n",[203,32175,32176,32179,32181,32183],{"class":205,"line":1872},[203,32177,32178],{"class":5306},"                                   batch_size",[203,32180,259],{"class":209},[203,32182,32128],{"class":262},[203,32184,31524],{"class":213},[203,32186,32187,32190,32192,32194],{"class":205,"line":2666},[203,32188,32189],{"class":5306},"                                   shuffle",[203,32191,259],{"class":209},[203,32193,31534],{"class":262},[203,32195,31524],{"class":213},[203,32197,32198,32201,32203,32205],{"class":205,"line":2680},[203,32199,32200],{"class":5306},"                                   num_workers",[203,32202,259],{"class":209},[203,32204,609],{"class":262},[203,32206,220],{"class":213},[203,32208,32209,32211],{"class":205,"line":2688},[203,32210,4179],{"class":209},[203,32212,32213],{"class":213}," train_dataloader,val_dataloader\n",[203,32215,32216],{"class":205,"line":2693},[203,32217,2489],{"emptyLinePlaceholder":131},[203,32219,32220],{"class":205,"line":2699},[203,32221,32222],{"class":272},"# 验证是否出错\n",[203,32224,32225],{"class":205,"line":2705},[203,32226,32227],{"class":272},"# train_val_data_process()\n",[203,32229,32230],{"class":205,"line":2710},[203,32231,2489],{"emptyLinePlaceholder":131},[203,32233,32234],{"class":205,"line":8038},[203,32235,32236],{"class":272},"# 定义模型训练函数\n",[203,32238,32239,32241,32244],{"class":205,"line":8062},[203,32240,32005],{"class":209},[203,32242,32243],{"class":2052}," train_model_process",[203,32245,32246],{"class":213},"(model,train_dataloader,val_dataloader,num_epochs):\n",[203,32248,32249,32251,32253,32255,32257,32259,32261,32263,32266],{"class":205,"line":8067},[203,32250,31295],{"class":213},[203,32252,259],{"class":209},[203,32254,30509],{"class":213},[203,32256,31302],{"class":318},[203,32258,1793],{"class":209},[203,32260,31307],{"class":213},[203,32262,1790],{"class":209},[203,32264,32265],{"class":318}," 'cpu'",[203,32267,220],{"class":213},[203,32269,32270],{"class":205,"line":8073},[203,32271,2489],{"emptyLinePlaceholder":131},[203,32273,32274],{"class":205,"line":8100},[203,32275,2489],{"emptyLinePlaceholder":131},[203,32277,32278],{"class":205,"line":8105},[203,32279,32280],{"class":272},"    # 定义优化器\n",[203,32282,32283],{"class":205,"line":8111},[203,32284,32285],{"class":272},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[203,32287,32288],{"class":205,"line":8123},[203,32289,32290],{"class":272},"    # lr为学习率\n",[203,32292,32293,32296,32298,32301,32304,32306,32309],{"class":205,"line":8135},[203,32294,32295],{"class":213},"    optimizer",[203,32297,259],{"class":209},[203,32299,32300],{"class":213},"torch.optim.Adam(model.parameters(),",[203,32302,32303],{"class":5306},"lr",[203,32305,259],{"class":209},[203,32307,32308],{"class":262},"0.001",[203,32310,220],{"class":213},[203,32312,32313],{"class":205,"line":8147},[203,32314,2489],{"emptyLinePlaceholder":131},[203,32316,32317],{"class":205,"line":9806},[203,32318,32319],{"class":272},"    # 定义损失函数使用交叉熵损失函数\n",[203,32321,32322,32325,32327],{"class":205,"line":9831},[203,32323,32324],{"class":213},"    criterion",[203,32326,259],{"class":209},[203,32328,32329],{"class":213},"nn.CrossEntropyLoss()\n",[203,32331,32332],{"class":205,"line":9854},[203,32333,2489],{"emptyLinePlaceholder":131},[203,32335,32336],{"class":205,"line":9878},[203,32337,32338],{"class":272},"    # 将模型放到GPU中进行训练\n",[203,32340,32341,32343,32345],{"class":205,"line":9883},[203,32342,31347],{"class":213},[203,32344,259],{"class":209},[203,32346,32347],{"class":213},"model.to(device)\n",[203,32349,32350],{"class":205,"line":9888},[203,32351,32352],{"class":272},"    # 复制当前模型的参数\n",[203,32354,32355],{"class":205,"line":9893},[203,32356,32357],{"class":272},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[203,32359,32360],{"class":205,"line":9902},[203,32361,32362],{"class":272},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[203,32364,32365,32368,32370],{"class":205,"line":9907},[203,32366,32367],{"class":213},"    best_model_wts",[203,32369,259],{"class":209},[203,32371,32372],{"class":213},"copy.deepcopy(model.state_dict())\n",[203,32374,32375],{"class":205,"line":9913},[203,32376,2489],{"emptyLinePlaceholder":131},[203,32378,32379],{"class":205,"line":9934},[203,32380,2489],{"emptyLinePlaceholder":131},[203,32382,32383],{"class":205,"line":9940},[203,32384,32385],{"class":272},"    # 初始化参数\n",[203,32387,32388],{"class":205,"line":9954},[203,32389,32390],{"class":272},"    # 最高准确度\n",[203,32392,32393,32396,32398],{"class":205,"line":9960},[203,32394,32395],{"class":213},"    best_acc",[203,32397,259],{"class":209},[203,32399,32400],{"class":262},"0.0\n",[203,32402,32403],{"class":205,"line":9987},[203,32404,32405],{"class":272},"    # 训练集损失列表\n",[203,32407,32408,32411,32413],{"class":205,"line":9996},[203,32409,32410],{"class":213},"    train_loss_all",[203,32412,259],{"class":209},[203,32414,32415],{"class":213},"[]\n",[203,32417,32418],{"class":205,"line":10002},[203,32419,32420],{"class":272},"    # 验证集函数列表\n",[203,32422,32423,32426,32428],{"class":205,"line":10010},[203,32424,32425],{"class":213},"    val_loss_all",[203,32427,259],{"class":209},[203,32429,32415],{"class":213},[203,32431,32432],{"class":205,"line":10015},[203,32433,32434],{"class":272},"    # 训练集准确度列表\n",[203,32436,32437,32440,32442],{"class":205,"line":16694},[203,32438,32439],{"class":213},"    train_acc_all",[203,32441,259],{"class":209},[203,32443,32415],{"class":213},[203,32445,32446],{"class":205,"line":16700},[203,32447,32448],{"class":272},"    # 验证集准确度列表\n",[203,32450,32451,32454,32456],{"class":205,"line":16723},[203,32452,32453],{"class":213},"    val_acc_all",[203,32455,259],{"class":209},[203,32457,32415],{"class":213},[203,32459,32460],{"class":205,"line":16729},[203,32461,2489],{"emptyLinePlaceholder":131},[203,32463,32464],{"class":205,"line":16752},[203,32465,32466],{"class":272},"    # 保存当前时间--->方便看每轮训练的时间\n",[203,32468,32469,32472,32474],{"class":205,"line":16766},[203,32470,32471],{"class":213},"    since",[203,32473,259],{"class":209},[203,32475,32476],{"class":213},"time.time()\n",[203,32478,32479],{"class":205,"line":16786},[203,32480,2489],{"emptyLinePlaceholder":131},[203,32482,32483],{"class":205,"line":16792},[203,32484,2489],{"emptyLinePlaceholder":131},[203,32486,32487],{"class":205,"line":16803},[203,32488,32489],{"class":272},"    # 准备工作完成--->开始训练模型\n",[203,32491,32492,32494,32497,32499,32502],{"class":205,"line":16826},[203,32493,3290],{"class":209},[203,32495,32496],{"class":213}," epoch ",[203,32498,26101],{"class":209},[203,32500,32501],{"class":262}," range",[203,32503,32504],{"class":213},"(num_epochs):\n",[203,32506,32507,32510,32512,32515,32518,32520,32522,32524,32527,32529,32531],{"class":205,"line":16848},[203,32508,32509],{"class":262},"        print",[203,32511,214],{"class":213},[203,32513,32514],{"class":318},"\"Epoch ",[203,32516,32517],{"class":262},"{}",[203,32519,798],{"class":318},[203,32521,32517],{"class":262},[203,32523,465],{"class":318},[203,32525,32526],{"class":213},".format(epoch,num_epochs",[203,32528,746],{"class":209},[203,32530,431],{"class":262},[203,32532,30555],{"class":213},[203,32534,32535,32537,32539,32542,32544,32546],{"class":205,"line":16853},[203,32536,32509],{"class":262},[203,32538,214],{"class":213},[203,32540,32541],{"class":318},"\"-\"",[203,32543,669],{"class":209},[203,32545,660],{"class":262},[203,32547,220],{"class":213},[203,32549,32550],{"class":205,"line":16859},[203,32551,2489],{"emptyLinePlaceholder":131},[203,32553,32554],{"class":205,"line":16873},[203,32555,32556],{"class":272},"        # 初始化参数\n",[203,32558,32559],{"class":205,"line":16886},[203,32560,32561],{"class":272},"        # 训练集损失函数\n",[203,32563,32564,32567,32569],{"class":205,"line":16891},[203,32565,32566],{"class":213},"        train_loss",[203,32568,259],{"class":209},[203,32570,32400],{"class":262},[203,32572,32573],{"class":205,"line":16905},[203,32574,32575],{"class":272},"        # 训练集准确度\n",[203,32577,32578,32581,32583],{"class":205,"line":16910},[203,32579,32580],{"class":213},"        train_corrects",[203,32582,259],{"class":209},[203,32584,3174],{"class":262},[203,32586,32587],{"class":205,"line":16916},[203,32588,32589],{"class":272},"        # 验证集损失函数\n",[203,32591,32592,32595,32597],{"class":205,"line":16921},[203,32593,32594],{"class":213},"        val_loss",[203,32596,259],{"class":209},[203,32598,32400],{"class":262},[203,32600,32601],{"class":205,"line":16935},[203,32602,32603],{"class":272},"        # 验证集准确度\n",[203,32605,32606,32609,32611],{"class":205,"line":16940},[203,32607,32608],{"class":213},"        val_corrects",[203,32610,259],{"class":209},[203,32612,3174],{"class":262},[203,32614,32615],{"class":205,"line":16945},[203,32616,32617],{"class":272},"        # 训练集样本数量\n",[203,32619,32620,32623,32625],{"class":205,"line":16959},[203,32621,32622],{"class":213},"        train_num",[203,32624,259],{"class":209},[203,32626,3174],{"class":262},[203,32628,32629],{"class":205,"line":16971},[203,32630,32631],{"class":272},"        # 验证集样本数量\n",[203,32633,32634,32637,32639],{"class":205,"line":16976},[203,32635,32636],{"class":213},"        val_num",[203,32638,259],{"class":209},[203,32640,3174],{"class":262},[203,32642,32643],{"class":205,"line":16989},[203,32644,32645],{"class":272},"        # 将数据放到设备,并开始训练\n",[203,32647,32648,32650,32652,32654,32656],{"class":205,"line":16994},[203,32649,3492],{"class":209},[203,32651,31659],{"class":213},[203,32653,26101],{"class":209},[203,32655,31664],{"class":262},[203,32657,32658],{"class":213},"(train_dataloader):\n",[203,32660,32661],{"class":205,"line":16999},[203,32662,32663],{"class":272},"            # 将特征放入到训练设备\n",[203,32665,32666,32669,32671],{"class":205,"line":17004},[203,32667,32668],{"class":213},"            b_x",[203,32670,259],{"class":209},[203,32672,32673],{"class":213},"b_x.to(device)\n",[203,32675,32676],{"class":205,"line":17017},[203,32677,32678],{"class":272},"            # 将标签放入到训练设备当中\n",[203,32680,32681,32684,32686],{"class":205,"line":17022},[203,32682,32683],{"class":213},"            b_y",[203,32685,259],{"class":209},[203,32687,32688],{"class":213},"b_y.to(device)\n",[203,32690,32692],{"class":205,"line":32691},98,[203,32693,32694],{"class":272},"            # 设置模型为训练模式\n",[203,32696,32698],{"class":205,"line":32697},99,[203,32699,32700],{"class":213},"            model.train()\n",[203,32702,32704],{"class":205,"line":32703},100,[203,32705,32706],{"class":272},"            # 将数据放到模型当中,开始前向传播\n",[203,32708,32710],{"class":205,"line":32709},101,[203,32711,32712],{"class":272},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[203,32714,32716,32719,32721],{"class":205,"line":32715},102,[203,32717,32718],{"class":213},"            output",[203,32720,259],{"class":209},[203,32722,32723],{"class":213},"model(b_x)\n",[203,32725,32727],{"class":205,"line":32726},103,[203,32728,32729],{"class":272},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[203,32731,32733,32736,32738,32741,32744,32746,32748],{"class":205,"line":32732},104,[203,32734,32735],{"class":213},"            pre_lab",[203,32737,259],{"class":209},[203,32739,32740],{"class":213},"torch.argmax(output,",[203,32742,32743],{"class":5306},"dim",[203,32745,259],{"class":209},[203,32747,431],{"class":262},[203,32749,220],{"class":213},[203,32751,32753],{"class":205,"line":32752},105,[203,32754,32755],{"class":272},"            # 计算每一个batch的损失函数\n",[203,32757,32759,32762,32764],{"class":205,"line":32758},106,[203,32760,32761],{"class":213},"            loss",[203,32763,259],{"class":209},[203,32765,32766],{"class":213},"criterion(output,b_y)\n",[203,32768,32770],{"class":205,"line":32769},107,[203,32771,32772],{"class":272},"            # 将梯度初始化为0\n",[203,32774,32776],{"class":205,"line":32775},108,[203,32777,32778],{"class":213},"            optimizer.zero_grad()\n",[203,32780,32782],{"class":205,"line":32781},109,[203,32783,32784],{"class":272},"            # 梯度置为0后再进行反向传播\n",[203,32786,32788],{"class":205,"line":32787},110,[203,32789,32790],{"class":213},"            loss.backward()\n",[203,32792,32794],{"class":205,"line":32793},111,[203,32795,32796],{"class":272},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[203,32798,32800],{"class":205,"line":32799},112,[203,32801,32802],{"class":213},"            optimizer.step()\n",[203,32804,32806],{"class":205,"line":32805},113,[203,32807,32808],{"class":272},"            # loss.item()指的是batch的平均损失\n",[203,32810,32812,32815,32817,32820,32822,32825,32827],{"class":205,"line":32811},114,[203,32813,32814],{"class":213},"            train_loss",[203,32816,9567],{"class":209},[203,32818,32819],{"class":213},"loss.item()",[203,32821,669],{"class":209},[203,32823,32824],{"class":213},"b_x.size(",[203,32826,405],{"class":262},[203,32828,220],{"class":213},[203,32830,32832],{"class":205,"line":32831},115,[203,32833,32834],{"class":272},"            # 计算每个批次中正确预测的数量\n",[203,32836,32838,32841,32843,32846,32848],{"class":205,"line":32837},116,[203,32839,32840],{"class":213},"            train_corrects",[203,32842,9567],{"class":209},[203,32844,32845],{"class":213},"torch.sum(pre_lab",[203,32847,3038],{"class":209},[203,32849,32850],{"class":213},"b_y.data)\n",[203,32852,32854],{"class":205,"line":32853},117,[203,32855,32856],{"class":272},"            # 计算目前为止一共处理了多少样本\n",[203,32858,32860,32863,32865,32867,32869],{"class":205,"line":32859},118,[203,32861,32862],{"class":213},"            train_num",[203,32864,9567],{"class":209},[203,32866,32824],{"class":213},[203,32868,405],{"class":262},[203,32870,220],{"class":213},[203,32872,32874],{"class":205,"line":32873},119,[203,32875,32876],{"class":272},"        # 验证数据\n",[203,32878,32880,32882,32885,32887,32889],{"class":205,"line":32879},120,[203,32881,3492],{"class":209},[203,32883,32884],{"class":213}," step ,(b_x,b_y) ",[203,32886,26101],{"class":209},[203,32888,31664],{"class":262},[203,32890,32891],{"class":213},"(val_dataloader):\n",[203,32893,32895],{"class":205,"line":32894},121,[203,32896,32897],{"class":272},"            # 将特征放到验证设备当中\n",[203,32899,32901,32903,32905],{"class":205,"line":32900},122,[203,32902,32668],{"class":213},[203,32904,259],{"class":209},[203,32906,32673],{"class":213},[203,32908,32910],{"class":205,"line":32909},123,[203,32911,32912],{"class":272},"            # 将标签放到放到训练设备当中\n",[203,32914,32916,32918,32920],{"class":205,"line":32915},124,[203,32917,32683],{"class":213},[203,32919,259],{"class":209},[203,32921,32688],{"class":213},[203,32923,32925],{"class":205,"line":32924},125,[203,32926,32927],{"class":272},"            # 开启验证模式，设置模型为评估模式\n",[203,32929,32931],{"class":205,"line":32930},126,[203,32932,32933],{"class":213},"            model.eval()\n",[203,32935,32937,32940],{"class":205,"line":32936},127,[203,32938,32939],{"class":209},"            with",[203,32941,32942],{"class":213}," torch.no_grad():\n",[203,32944,32946],{"class":205,"line":32945},128,[203,32947,32948],{"class":272},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[203,32950,32952,32955,32957],{"class":205,"line":32951},129,[203,32953,32954],{"class":213},"                output ",[203,32956,259],{"class":209},[203,32958,32959],{"class":213}," model(b_x)\n",[203,32961,32963],{"class":205,"line":32962},130,[203,32964,32965],{"class":272},"                # 查找每一行中最大值对应的下标\n",[203,32967,32969,32972,32974,32977,32979,32981,32983],{"class":205,"line":32968},131,[203,32970,32971],{"class":213},"                pre_lab ",[203,32973,259],{"class":209},[203,32975,32976],{"class":213}," torch.argmax(output, ",[203,32978,32743],{"class":5306},[203,32980,259],{"class":209},[203,32982,431],{"class":262},[203,32984,220],{"class":213},[203,32986,32988],{"class":205,"line":32987},132,[203,32989,32990],{"class":272},"                # 计算验证集上的当前 batch 损失\n",[203,32992,32994,32997,32999],{"class":205,"line":32993},133,[203,32995,32996],{"class":213},"                val_batch_loss ",[203,32998,259],{"class":209},[203,33000,33001],{"class":213}," criterion(output, b_y)\n",[203,33003,33005],{"class":205,"line":33004},134,[203,33006,33007],{"class":272},"                # 对损失函数进行累加（按样本数加权）\n",[203,33009,33011,33014,33016,33019,33021,33024,33026],{"class":205,"line":33010},135,[203,33012,33013],{"class":213},"                val_loss ",[203,33015,9567],{"class":209},[203,33017,33018],{"class":213}," val_batch_loss.item() ",[203,33020,669],{"class":209},[203,33022,33023],{"class":213}," b_x.size(",[203,33025,405],{"class":262},[203,33027,220],{"class":213},[203,33029,33031,33034,33036,33039,33041],{"class":205,"line":33030},136,[203,33032,33033],{"class":213},"                val_corrects ",[203,33035,9567],{"class":209},[203,33037,33038],{"class":213}," torch.sum(pre_lab ",[203,33040,3038],{"class":209},[203,33042,33043],{"class":213}," b_y.data)\n",[203,33045,33047],{"class":205,"line":33046},137,[203,33048,33049],{"class":272},"                # 当前用于验证的样本数量\n",[203,33051,33053,33056,33058,33060,33062],{"class":205,"line":33052},138,[203,33054,33055],{"class":213},"            val_num ",[203,33057,9567],{"class":209},[203,33059,33023],{"class":213},[203,33061,405],{"class":262},[203,33063,220],{"class":213},[203,33065,33067],{"class":205,"line":33066},139,[203,33068,33069],{"class":272},"        # 计算并保存每一次迭代的loss值和准确率\n",[203,33071,33073],{"class":205,"line":33072},140,[203,33074,33075],{"class":272},"        # 计算并保存训练集的loss值\n",[203,33077,33079,33082,33084],{"class":205,"line":33078},141,[203,33080,33081],{"class":213},"        train_loss_all.append(train_loss",[203,33083,798],{"class":209},[203,33085,33086],{"class":213},"train_num)\n",[203,33088,33090],{"class":205,"line":33089},142,[203,33091,33092],{"class":272},"        # 取双精度\n",[203,33094,33096],{"class":205,"line":33095},143,[203,33097,33098],{"class":272},"        # 计算并保存训练集的准确率\n",[203,33100,33102,33105,33107],{"class":205,"line":33101},144,[203,33103,33104],{"class":213},"        train_acc_all.append(train_corrects.double().item()",[203,33106,798],{"class":209},[203,33108,33086],{"class":213},[203,33110,33112],{"class":205,"line":33111},145,[203,33113,33114],{"class":272},"        # 计算并保存验证集的loss值\n",[203,33116,33118,33121,33123],{"class":205,"line":33117},146,[203,33119,33120],{"class":213},"        val_loss_all.append(val_loss",[203,33122,798],{"class":209},[203,33124,33125],{"class":213},"val_num)\n",[203,33127,33129],{"class":205,"line":33128},147,[203,33130,33131],{"class":272},"        # 计算并保存验证集的准确率\n",[203,33133,33135,33138,33140],{"class":205,"line":33134},148,[203,33136,33137],{"class":213},"        val_acc_all.append(val_corrects.double().item()",[203,33139,798],{"class":209},[203,33141,33125],{"class":213},[203,33143,33145],{"class":205,"line":33144},149,[203,33146,2489],{"emptyLinePlaceholder":131},[203,33148,33150],{"class":205,"line":33149},150,[203,33151,33152],{"class":272},"        # 打印训练一轮的loss值和准确率\n",[203,33154,33156,33158,33160,33162,33164,33167,33169,33172,33174,33177,33179,33181,33183,33185,33188,33190,33192,33195,33197,33199],{"class":205,"line":33155},151,[203,33157,32509],{"class":262},[203,33159,214],{"class":213},[203,33161,3681],{"class":318},[203,33163,32517],{"class":262},[203,33165,33166],{"class":318},"train loss:",[203,33168,1110],{"class":262},[203,33170,33171],{"class":209},":.4f",[203,33173,1160],{"class":262},[203,33175,33176],{"class":318}," train acc:",[203,33178,1110],{"class":262},[203,33180,33171],{"class":209},[203,33182,1160],{"class":262},[203,33184,3681],{"class":318},[203,33186,33187],{"class":213},".format(epoch,train_loss_all[",[203,33189,746],{"class":209},[203,33191,431],{"class":262},[203,33193,33194],{"class":213},"],train_acc_all[",[203,33196,746],{"class":209},[203,33198,431],{"class":262},[203,33200,33201],{"class":213},"]))\n",[203,33203,33205,33207,33209,33211,33213,33216,33218,33220,33222,33225,33227,33229,33231,33233,33236,33238,33240,33243,33245,33247],{"class":205,"line":33204},152,[203,33206,32509],{"class":262},[203,33208,214],{"class":213},[203,33210,3681],{"class":318},[203,33212,32517],{"class":262},[203,33214,33215],{"class":318},"val loss:",[203,33217,1110],{"class":262},[203,33219,33171],{"class":209},[203,33221,1160],{"class":262},[203,33223,33224],{"class":318}," val acc:",[203,33226,1110],{"class":262},[203,33228,33171],{"class":209},[203,33230,1160],{"class":262},[203,33232,3681],{"class":318},[203,33234,33235],{"class":213},".format(epoch,val_loss_all[",[203,33237,746],{"class":209},[203,33239,431],{"class":262},[203,33241,33242],{"class":213},"],val_acc_all[",[203,33244,746],{"class":209},[203,33246,431],{"class":262},[203,33248,33201],{"class":213},[203,33250,33252],{"class":205,"line":33251},153,[203,33253,2489],{"emptyLinePlaceholder":131},[203,33255,33257],{"class":205,"line":33256},154,[203,33258,33259],{"class":272},"        # 判断准确度--->保存最优模型\n",[203,33261,33263,33265,33268,33270,33272,33274,33276],{"class":205,"line":33262},155,[203,33264,2586],{"class":209},[203,33266,33267],{"class":213}," val_acc_all[",[203,33269,746],{"class":209},[203,33271,431],{"class":262},[203,33273,1154],{"class":213},[203,33275,1174],{"class":209},[203,33277,33278],{"class":213},"best_acc:\n",[203,33280,33282],{"class":205,"line":33281},156,[203,33283,33284],{"class":272},"            # 保存当前模型准确度\n",[203,33286,33288,33291,33293,33295,33298,33300,33302],{"class":205,"line":33287},157,[203,33289,33290],{"class":213},"            best_acc:",[203,33292,253],{"class":262},[203,33294,259],{"class":209},[203,33296,33297],{"class":213},"val_acc_all[",[203,33299,746],{"class":209},[203,33301,431],{"class":262},[203,33303,33304],{"class":213},"]\n",[203,33306,33308],{"class":205,"line":33307},158,[203,33309,33310],{"class":272},"            # 保存当前的准确度\n",[203,33312,33314],{"class":205,"line":33313},159,[203,33315,33316],{"class":272},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[203,33318,33320,33323,33325],{"class":205,"line":33319},160,[203,33321,33322],{"class":213},"            best_model_wts",[203,33324,259],{"class":209},[203,33326,32372],{"class":213},[203,33328,33330],{"class":205,"line":33329},161,[203,33331,2489],{"emptyLinePlaceholder":131},[203,33333,33335],{"class":205,"line":33334},162,[203,33336,33337],{"class":272},"        # 计算耗时\n",[203,33339,33341,33344,33346,33349,33351],{"class":205,"line":33340},163,[203,33342,33343],{"class":213},"        time_use",[203,33345,259],{"class":209},[203,33347,33348],{"class":213},"time.time()",[203,33350,746],{"class":209},[203,33352,33353],{"class":213},"since\n",[203,33355,33357,33359,33361,33364,33366,33369,33371,33373,33375,33377,33379,33382,33385,33388,33390,33393,33395,33397],{"class":205,"line":33356},164,[203,33358,32509],{"class":262},[203,33360,214],{"class":213},[203,33362,33363],{"class":318},"'训练和验证耗费的时间",[203,33365,1110],{"class":262},[203,33367,33368],{"class":209},":.0f",[203,33370,1160],{"class":262},[203,33372,758],{"class":318},[203,33374,1110],{"class":262},[203,33376,33368],{"class":209},[203,33378,1160],{"class":262},[203,33380,33381],{"class":318},"s'",[203,33383,33384],{"class":213},".format(time_use",[203,33386,33387],{"class":209},"\u002F\u002F",[203,33389,1121],{"class":262},[203,33391,33392],{"class":213},",time_use",[203,33394,542],{"class":209},[203,33396,1121],{"class":262},[203,33398,30555],{"class":213},[203,33400,33402],{"class":205,"line":33401},165,[203,33403,33404],{"class":272},"    # 选择最优参数\n",[203,33406,33408],{"class":205,"line":33407},166,[203,33409,33410],{"class":272},"    # 加载最高准确率下的模型参数\n",[203,33412,33414],{"class":205,"line":33413},167,[203,33415,33416],{"class":272},"    # model.load_state_dict(best_model_wts)\n",[203,33418,33420,33423,33426],{"class":205,"line":33419},168,[203,33421,33422],{"class":213},"    torch.save(model.state_dict(best_model_wts), ",[203,33424,33425],{"class":318},"'.\u002Fbest_model.pth'",[203,33427,220],{"class":213},[203,33429,33431],{"class":205,"line":33430},169,[203,33432,33433],{"class":272},"    # 或者写成\n",[203,33435,33437],{"class":205,"line":33436},170,[203,33438,33439],{"class":272},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[203,33441,33443],{"class":205,"line":33442},171,[203,33444,33445],{"class":272},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[203,33447,33449,33452,33454,33457,33460,33462],{"class":205,"line":33448},172,[203,33450,33451],{"class":213},"    train_process",[203,33453,259],{"class":209},[203,33455,33456],{"class":213},"pd.DataFrame(",[203,33458,33459],{"class":5306},"data",[203,33461,259],{"class":209},[203,33463,1635],{"class":213},[203,33465,33467,33470,33472,33475],{"class":205,"line":33466},173,[203,33468,33469],{"class":318},"        \"epoch\"",[203,33471,1073],{"class":213},[203,33473,33474],{"class":262},"range",[203,33476,33477],{"class":213},"(num_epochs),\n",[203,33479,33481,33484],{"class":205,"line":33480},174,[203,33482,33483],{"class":318},"        \"train_loss_all\"",[203,33485,33486],{"class":213},":train_loss_all,\n",[203,33488,33490,33493],{"class":205,"line":33489},175,[203,33491,33492],{"class":318},"        \"val_loss_all\"",[203,33494,33495],{"class":213},":val_loss_all,\n",[203,33497,33499,33502],{"class":205,"line":33498},176,[203,33500,33501],{"class":318},"        \"train_acc_all\"",[203,33503,33504],{"class":213},":train_acc_all,\n",[203,33506,33508,33511],{"class":205,"line":33507},177,[203,33509,33510],{"class":318},"        \"val_acc_all\"",[203,33512,33513],{"class":213},":val_acc_all\n",[203,33515,33517],{"class":205,"line":33516},178,[203,33518,33519],{"class":213},"    })\n",[203,33521,33523],{"class":205,"line":33522},179,[203,33524,33525],{"class":272},"    # 返回训练保存的过程\n",[203,33527,33529,33531],{"class":205,"line":33528},180,[203,33530,4179],{"class":209},[203,33532,33533],{"class":213}," train_process\n",[203,33535,33537],{"class":205,"line":33536},181,[203,33538,2489],{"emptyLinePlaceholder":131},[203,33540,33542],{"class":205,"line":33541},182,[203,33543,33544],{"class":272},"# 将loss值和精度按照图片的形式展示出来\n",[203,33546,33548,33550,33553],{"class":205,"line":33547},183,[203,33549,32005],{"class":209},[203,33551,33552],{"class":2052}," matplot_acc_loss",[203,33554,33555],{"class":213},"(train_process):\n",[203,33557,33559],{"class":205,"line":33558},184,[203,33560,33561],{"class":272},"    # 设置图的大小\n",[203,33563,33565,33568,33570,33572,33574,33576,33578,33580],{"class":205,"line":33564},185,[203,33566,33567],{"class":213},"    plt.figure(",[203,33569,31751],{"class":5306},[203,33571,259],{"class":209},[203,33573,214],{"class":213},[203,33575,712],{"class":262},[203,33577,592],{"class":213},[203,33579,507],{"class":262},[203,33581,30555],{"class":213},[203,33583,33585],{"class":205,"line":33584},186,[203,33586,33587],{"class":272},"    # 设置图中有几张图\n",[203,33589,33591],{"class":205,"line":33590},187,[203,33592,33593],{"class":272},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[203,33595,33597],{"class":205,"line":33596},188,[203,33598,33599],{"class":272},"    # ①loss图\n",[203,33601,33603,33605,33607,33609,33611,33613,33615],{"class":205,"line":33602},189,[203,33604,31785],{"class":213},[203,33606,431],{"class":262},[203,33608,592],{"class":213},[203,33610,291],{"class":262},[203,33612,592],{"class":213},[203,33614,431],{"class":262},[203,33616,220],{"class":213},[203,33618,33620],{"class":205,"line":33619},190,[203,33621,33622],{"class":272},"    # 补充:\n",[203,33624,33626],{"class":205,"line":33625},191,[203,33627,33628],{"class":272},"    # plt.subplot(nrows, ncols, index)\n",[203,33630,33632],{"class":205,"line":33631},192,[203,33633,33634],{"class":272},"    # nrows：行数\n",[203,33636,33638],{"class":205,"line":33637},193,[203,33639,33640],{"class":272},"    # ncols：列数\n",[203,33642,33644],{"class":205,"line":33643},194,[203,33645,33646],{"class":272},"    # index：目前选中第几个子图（从1开始）\n",[203,33648,33650,33653,33656,33659,33662,33664,33667,33669,33672],{"class":205,"line":33649},195,[203,33651,33652],{"class":213},"    plt.plot(train_process[",[203,33654,33655],{"class":318},"\"epoch\"",[203,33657,33658],{"class":213},"],train_process.train_loss_all,",[203,33660,33661],{"class":318},"'ro-'",[203,33663,592],{"class":213},[203,33665,33666],{"class":5306},"label",[203,33668,259],{"class":209},[203,33670,33671],{"class":318},"'train loss'",[203,33673,220],{"class":213},[203,33675,33677,33679,33681,33684,33687,33689,33691,33693,33696],{"class":205,"line":33676},196,[203,33678,33652],{"class":213},[203,33680,33655],{"class":318},[203,33682,33683],{"class":213},"],train_process.val_loss_all,",[203,33685,33686],{"class":318},"'bs--'",[203,33688,592],{"class":213},[203,33690,33666],{"class":5306},[203,33692,259],{"class":209},[203,33694,33695],{"class":318},"'val loss'",[203,33697,220],{"class":213},[203,33699,33701],{"class":205,"line":33700},197,[203,33702,33703],{"class":272},"    # 添加一个图例\n",[203,33705,33707],{"class":205,"line":33706},198,[203,33708,33709],{"class":213},"    plt.legend()\n",[203,33711,33713],{"class":205,"line":33712},199,[203,33714,33715],{"class":272},"    # 给轴添加标签\n",[203,33717,33719,33722,33725],{"class":205,"line":33718},200,[203,33720,33721],{"class":213},"    plt.xlabel(",[203,33723,33724],{"class":318},"'epoch'",[203,33726,220],{"class":213},[203,33728,33730,33733,33736],{"class":205,"line":33729},201,[203,33731,33732],{"class":213},"    plt.ylabel(",[203,33734,33735],{"class":318},"'loss'",[203,33737,220],{"class":213},[203,33739,33741],{"class":205,"line":33740},202,[203,33742,33743],{"class":272},"    # ②准确度图\n",[203,33745,33747,33749,33751,33753,33755,33757,33759],{"class":205,"line":33746},203,[203,33748,31785],{"class":213},[203,33750,431],{"class":262},[203,33752,592],{"class":213},[203,33754,291],{"class":262},[203,33756,592],{"class":213},[203,33758,291],{"class":262},[203,33760,220],{"class":213},[203,33762,33764,33766,33768,33771,33773,33775,33777,33779,33782],{"class":205,"line":33763},204,[203,33765,33652],{"class":213},[203,33767,33655],{"class":318},[203,33769,33770],{"class":213},"],train_process.train_acc_all,",[203,33772,33661],{"class":318},[203,33774,592],{"class":213},[203,33776,33666],{"class":5306},[203,33778,259],{"class":209},[203,33780,33781],{"class":318},"'train acc'",[203,33783,220],{"class":213},[203,33785,33787,33789,33791,33794,33796,33798,33800,33802,33805],{"class":205,"line":33786},205,[203,33788,33652],{"class":213},[203,33790,33655],{"class":318},[203,33792,33793],{"class":213},"],train_process.val_acc_all,",[203,33795,33686],{"class":318},[203,33797,592],{"class":213},[203,33799,33666],{"class":5306},[203,33801,259],{"class":209},[203,33803,33804],{"class":318},"'val acc'",[203,33806,220],{"class":213},[203,33808,33810],{"class":205,"line":33809},206,[203,33811,33812],{"class":272},"    # 添加图例\n",[203,33814,33816],{"class":205,"line":33815},207,[203,33817,33709],{"class":213},[203,33819,33821,33823,33825],{"class":205,"line":33820},208,[203,33822,33721],{"class":213},[203,33824,33655],{"class":318},[203,33826,220],{"class":213},[203,33828,33830,33832,33835],{"class":205,"line":33829},209,[203,33831,33732],{"class":213},[203,33833,33834],{"class":318},"\"acc\"",[203,33836,220],{"class":213},[203,33838,33840],{"class":205,"line":33839},210,[203,33841,33842],{"class":213},"    plt.show()\n",[203,33844,33846],{"class":205,"line":33845},211,[203,33847,2489],{"emptyLinePlaceholder":131},[203,33849,33851],{"class":205,"line":33850},212,[203,33852,33853],{"class":272},"# 正式开始训练:\n",[203,33855,33857,33859,33861,33863,33865],{"class":205,"line":33856},213,[203,33858,1620],{"class":209},[203,33860,31278],{"class":262},[203,33862,3038],{"class":209},[203,33864,31283],{"class":318},[203,33866,3828],{"class":213},[203,33868,33870],{"class":205,"line":33869},214,[203,33871,33872],{"class":272},"    # 将模型实例化\n",[203,33874,33876,33879,33881],{"class":205,"line":33875},215,[203,33877,33878],{"class":213},"    LeNet",[203,33880,259],{"class":209},[203,33882,33883],{"class":213},"LeNet()\n",[203,33885,33887,33890,33892],{"class":205,"line":33886},216,[203,33888,33889],{"class":213},"    train_dataloader,val_dataloader",[203,33891,259],{"class":209},[203,33893,33894],{"class":213},"train_val_data_process()\n",[203,33896,33898,33900,33902,33905,33908,33910,33912],{"class":205,"line":33897},217,[203,33899,33451],{"class":213},[203,33901,259],{"class":209},[203,33903,33904],{"class":213},"train_model_process(LeNet,train_dataloader,val_dataloader,",[203,33906,33907],{"class":5306},"num_epochs",[203,33909,259],{"class":209},[203,33911,914],{"class":262},[203,33913,220],{"class":213},[203,33915,33917],{"class":205,"line":33916},218,[203,33918,33919],{"class":213},"    matplot_acc_loss(train_process)\n",[19,33921,33922],{},"画图的补充点学习：",[19,33924,33925],{},[25,33926],{"alt":27,"src":33927},"\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",[157,33929,33930],{"start":1269},[160,33931,33932],{},"测试",[194,33934,33936],{"className":30436,"code":33935,"language":30438,"meta":27,"style":27},"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",[200,33937,33938,33944,33954,33966,33976,33981,33991,34001,34005,34010,34019,34036,34048,34065,34076,34092,34097,34108,34119,34130,34137,34141,34146,34156,34161,34178,34186,34190,34195,34204,34213,34217,34222,34227,34232,34239,34244,34256,34266,34276,34281,34285,34290,34299,34304,34320,34325,34330,34335,34349,34354,34368,34372,34377,34392,34397,34409,34413,34418,34430,34435,34443,34448,34453,34463,34468,34477,34482,34487,34491,34496,34501,34517,34525,34530,34535,34594,34600,34605,34616,34624,34632,34636,34641,34645,34650,34658,34663,34679,34684,34694,34704],{"__ignoreMap":27},[203,33939,33940,33942],{"class":205,"line":206},[203,33941,30450],{"class":209},[203,33943,30453],{"class":213},[203,33945,33946,33948,33950,33952],{"class":205,"line":124},[203,33947,30450],{"class":209},[203,33949,31473],{"class":213},[203,33951,31441],{"class":209},[203,33953,31478],{"class":213},[203,33955,33956,33958,33961,33963],{"class":205,"line":1269},[203,33957,30795],{"class":209},[203,33959,33960],{"class":213}," jupyter_client.consoleapp ",[203,33962,30450],{"class":209},[203,33964,33965],{"class":213}," classes\n",[203,33967,33968,33970,33972,33974],{"class":205,"line":1284},[203,33969,30795],{"class":209},[203,33971,31456],{"class":213},[203,33973,30450],{"class":209},[203,33975,31461],{"class":213},[203,33977,33978],{"class":205,"line":1290},[203,33979,33980],{"class":272},"# 导入数据集\n",[203,33982,33983,33985,33987,33989],{"class":205,"line":1304},[203,33984,30795],{"class":209},[203,33986,31426],{"class":213},[203,33988,30450],{"class":209},[203,33990,31431],{"class":213},[203,33992,33993,33995,33997,33999],{"class":205,"line":1310},[203,33994,30795],{"class":209},[203,33996,31972],{"class":213},[203,33998,30450],{"class":209},[203,34000,31977],{"class":213},[203,34002,34003],{"class":205,"line":1401},[203,34004,2489],{"emptyLinePlaceholder":131},[203,34006,34007],{"class":205,"line":1407},[203,34008,34009],{"class":272},"# 测试数据处理\n",[203,34011,34012,34014,34017],{"class":205,"line":1419},[203,34013,32005],{"class":209},[203,34015,34016],{"class":2052}," test_data_process",[203,34018,32011],{"class":213},[203,34020,34021,34024,34026,34028,34030,34032,34034],{"class":205,"line":1701},[203,34022,34023],{"class":213},"    test_data",[203,34025,259],{"class":209},[203,34027,31513],{"class":213},[203,34029,31516],{"class":5306},[203,34031,259],{"class":209},[203,34033,31521],{"class":318},[203,34035,31524],{"class":213},[203,34037,34038,34041,34043,34046],{"class":205,"line":1706},[203,34039,34040],{"class":5306},"                           train",[203,34042,259],{"class":209},[203,34044,34045],{"class":262},"False",[203,34047,31524],{"class":213},[203,34049,34050,34053,34055,34057,34059,34061,34063],{"class":205,"line":1712},[203,34051,34052],{"class":5306},"                           transform",[203,34054,259],{"class":209},[203,34056,31551],{"class":213},[203,34058,31554],{"class":5306},[203,34060,259],{"class":209},[203,34062,1115],{"class":262},[203,34064,31562],{"class":213},[203,34066,34067,34070,34072,34074],{"class":205,"line":1717},[203,34068,34069],{"class":5306},"                           download",[203,34071,259],{"class":209},[203,34073,31534],{"class":262},[203,34075,220],{"class":213},[203,34077,34078,34081,34083,34085,34087,34089],{"class":205,"line":1731},[203,34079,34080],{"class":213},"    test_dataloader",[203,34082,259],{"class":209},[203,34084,31592],{"class":213},[203,34086,31595],{"class":5306},[203,34088,259],{"class":209},[203,34090,34091],{"class":213},"test_data,\n",[203,34093,34094],{"class":205,"line":1736},[203,34095,34096],{"class":272},"                                    # 这里是一张一张进行测试\n",[203,34098,34099,34102,34104,34106],{"class":205,"line":1742},[203,34100,34101],{"class":5306},"                                    batch_size",[203,34103,259],{"class":209},[203,34105,431],{"class":262},[203,34107,31524],{"class":213},[203,34109,34110,34113,34115,34117],{"class":205,"line":1763},[203,34111,34112],{"class":5306},"                                    shuffle",[203,34114,259],{"class":209},[203,34116,31534],{"class":262},[203,34118,31524],{"class":213},[203,34120,34121,34124,34126,34128],{"class":205,"line":1768},[203,34122,34123],{"class":5306},"                                    num_workers",[203,34125,259],{"class":209},[203,34127,405],{"class":262},[203,34129,220],{"class":213},[203,34131,34132,34134],{"class":205,"line":1782},[203,34133,4179],{"class":209},[203,34135,34136],{"class":213}," test_dataloader\n",[203,34138,34139],{"class":205,"line":1787},[203,34140,2489],{"emptyLinePlaceholder":131},[203,34142,34143],{"class":205,"line":1816},[203,34144,34145],{"class":272},"# 定义模型测试函数\n",[203,34147,34148,34150,34153],{"class":205,"line":1821},[203,34149,32005],{"class":209},[203,34151,34152],{"class":2052}," test_model_process",[203,34154,34155],{"class":213},"(model,test_dataloader):\n",[203,34157,34158],{"class":205,"line":1838},[203,34159,34160],{"class":272},"    # 将模型放到设备当中，先进行判断\n",[203,34162,34163,34165,34167,34169,34171,34173,34175],{"class":205,"line":1843},[203,34164,31295],{"class":213},[203,34166,259],{"class":209},[203,34168,31302],{"class":318},[203,34170,1793],{"class":209},[203,34172,31307],{"class":213},[203,34174,1790],{"class":209},[203,34176,34177],{"class":318}," \"cpu\"\n",[203,34179,34180,34182,34184],{"class":205,"line":1848},[203,34181,31347],{"class":213},[203,34183,259],{"class":209},[203,34185,32347],{"class":213},[203,34187,34188],{"class":205,"line":1853},[203,34189,2489],{"emptyLinePlaceholder":131},[203,34191,34192],{"class":205,"line":1867},[203,34193,34194],{"class":272},"    # 设置初始化参数\n",[203,34196,34197,34200,34202],{"class":205,"line":1872},[203,34198,34199],{"class":213},"    test_corrects",[203,34201,259],{"class":209},[203,34203,32400],{"class":262},[203,34205,34206,34209,34211],{"class":205,"line":2666},[203,34207,34208],{"class":213},"    test_num",[203,34210,259],{"class":209},[203,34212,3174],{"class":262},[203,34214,34215],{"class":205,"line":2680},[203,34216,2489],{"emptyLinePlaceholder":131},[203,34218,34219],{"class":205,"line":2688},[203,34220,34221],{"class":272},"    # 进行模型测试\n",[203,34223,34224],{"class":205,"line":2693},[203,34225,34226],{"class":272},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[203,34228,34229],{"class":205,"line":2699},[203,34230,34231],{"class":272},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[203,34233,34234,34237],{"class":205,"line":2705},[203,34235,34236],{"class":209},"    with",[203,34238,32942],{"class":213},[203,34240,34241],{"class":205,"line":2710},[203,34242,34243],{"class":272},"        # 从数据中进行\n",[203,34245,34246,34248,34251,34253],{"class":205,"line":8038},[203,34247,3492],{"class":209},[203,34249,34250],{"class":213}," test_data_x,test_data_y ",[203,34252,26101],{"class":209},[203,34254,34255],{"class":213}," test_dataloader:\n",[203,34257,34258,34261,34263],{"class":205,"line":8062},[203,34259,34260],{"class":213},"            test_data_x",[203,34262,259],{"class":209},[203,34264,34265],{"class":213},"test_data_x.to(device)\n",[203,34267,34268,34271,34273],{"class":205,"line":8067},[203,34269,34270],{"class":213},"            test_data_y",[203,34272,259],{"class":209},[203,34274,34275],{"class":213},"test_data_y.to(device)\n",[203,34277,34278],{"class":205,"line":8073},[203,34279,34280],{"class":272},"            # 设置为验证模式\n",[203,34282,34283],{"class":205,"line":8100},[203,34284,32933],{"class":213},[203,34286,34287],{"class":205,"line":8105},[203,34288,34289],{"class":272},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[203,34291,34292,34294,34296],{"class":205,"line":8111},[203,34293,32718],{"class":213},[203,34295,259],{"class":209},[203,34297,34298],{"class":213},"model(test_data_x)\n",[203,34300,34301],{"class":205,"line":8123},[203,34302,34303],{"class":272},"            # 查找每一行中最大值对应的下标\n",[203,34305,34306,34308,34310,34312,34314,34316,34318],{"class":205,"line":8135},[203,34307,32735],{"class":213},[203,34309,259],{"class":209},[203,34311,32740],{"class":213},[203,34313,32743],{"class":5306},[203,34315,259],{"class":209},[203,34317,431],{"class":262},[203,34319,220],{"class":213},[203,34321,34322],{"class":205,"line":8147},[203,34323,34324],{"class":272},"            # 计算正确率\n",[203,34326,34327],{"class":205,"line":9806},[203,34328,34329],{"class":272},"            # .data表示是一个不带梯度信息的tensor\n",[203,34331,34332],{"class":205,"line":9831},[203,34333,34334],{"class":272},"            # 如果预测正确，则准确度test_corrects加1\n",[203,34336,34337,34340,34342,34344,34346],{"class":205,"line":9854},[203,34338,34339],{"class":213},"            test_corrects",[203,34341,9567],{"class":209},[203,34343,32845],{"class":213},[203,34345,3038],{"class":209},[203,34347,34348],{"class":213},"test_data_y.data)\n",[203,34350,34351],{"class":205,"line":9878},[203,34352,34353],{"class":272},"            # 将所有的测试样本进行累计\n",[203,34355,34356,34359,34361,34364,34366],{"class":205,"line":9883},[203,34357,34358],{"class":213},"            test_num",[203,34360,9567],{"class":209},[203,34362,34363],{"class":213},"test_data_x.size(",[203,34365,405],{"class":262},[203,34367,220],{"class":213},[203,34369,34370],{"class":205,"line":9888},[203,34371,2489],{"emptyLinePlaceholder":131},[203,34373,34374],{"class":205,"line":9893},[203,34375,34376],{"class":272},"        # 计算准确度\n",[203,34378,34379,34382,34384,34387,34389],{"class":205,"line":9902},[203,34380,34381],{"class":213},"        test_acc",[203,34383,259],{"class":209},[203,34385,34386],{"class":213},"test_corrects.double().item()",[203,34388,798],{"class":209},[203,34390,34391],{"class":213},"test_num\n",[203,34393,34394],{"class":205,"line":9907},[203,34395,34396],{"class":272},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[203,34398,34399,34401,34403,34406],{"class":205,"line":9913},[203,34400,32509],{"class":262},[203,34402,214],{"class":213},[203,34404,34405],{"class":318},"\"测试的准确率：\"",[203,34407,34408],{"class":213},",test_acc)\n",[203,34410,34411],{"class":205,"line":9934},[203,34412,2489],{"emptyLinePlaceholder":131},[203,34414,34415],{"class":205,"line":9940},[203,34416,34417],{"class":272},"# 实现模型的测试功能\n",[203,34419,34420,34422,34424,34426,34428],{"class":205,"line":9954},[203,34421,1620],{"class":209},[203,34423,31278],{"class":262},[203,34425,3038],{"class":209},[203,34427,31283],{"class":318},[203,34429,3828],{"class":213},[203,34431,34432],{"class":205,"line":9960},[203,34433,34434],{"class":272},"    # 加载模型\n",[203,34436,34437,34439,34441],{"class":205,"line":9987},[203,34438,31347],{"class":213},[203,34440,259],{"class":209},[203,34442,33883],{"class":213},[203,34444,34445],{"class":205,"line":9996},[203,34446,34447],{"class":272},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[203,34449,34450],{"class":205,"line":10002},[203,34451,34452],{"class":272},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[203,34454,34455,34458,34461],{"class":205,"line":10010},[203,34456,34457],{"class":213},"    model.load_state_dict(torch.load(",[203,34459,34460],{"class":318},"'best_model.pth'",[203,34462,30555],{"class":213},[203,34464,34465],{"class":205,"line":10015},[203,34466,34467],{"class":272},"    # 数据加载\n",[203,34469,34470,34472,34474],{"class":205,"line":16694},[203,34471,34080],{"class":213},[203,34473,259],{"class":209},[203,34475,34476],{"class":213},"test_data_process()\n",[203,34478,34479],{"class":205,"line":16700},[203,34480,34481],{"class":272},"    # 加载模型测试的函数\n",[203,34483,34484],{"class":205,"line":16723},[203,34485,34486],{"class":213},"    test_model_process(model,test_dataloader)\n",[203,34488,34489],{"class":205,"line":16729},[203,34490,2489],{"emptyLinePlaceholder":131},[203,34492,34493],{"class":205,"line":16752},[203,34494,34495],{"class":272},"    # 验证集推理实现：\n",[203,34497,34498],{"class":205,"line":16766},[203,34499,34500],{"class":272},"    # 加载数据加载的更详细一些\n",[203,34502,34503,34505,34507,34509,34511,34513,34515],{"class":205,"line":16786},[203,34504,31295],{"class":213},[203,34506,259],{"class":209},[203,34508,31302],{"class":318},[203,34510,1793],{"class":209},[203,34512,31307],{"class":213},[203,34514,1790],{"class":209},[203,34516,34177],{"class":318},[203,34518,34519,34521,34523],{"class":205,"line":16792},[203,34520,31347],{"class":213},[203,34522,259],{"class":209},[203,34524,32347],{"class":213},[203,34526,34527],{"class":205,"line":16803},[203,34528,34529],{"class":272},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[203,34531,34532],{"class":205,"line":16826},[203,34533,34534],{"class":272},"    # 顺序不可改变\n",[203,34536,34537,34540,34542,34544,34547,34549,34552,34554,34557,34559,34562,34564,34567,34569,34572,34574,34577,34579,34582,34584,34587,34589,34592],{"class":205,"line":16848},[203,34538,34539],{"class":213},"    classes",[203,34541,259],{"class":209},[203,34543,1104],{"class":213},[203,34545,34546],{"class":318},"'T-shirt\u002Ftop'",[203,34548,592],{"class":213},[203,34550,34551],{"class":318},"'Trouser'",[203,34553,592],{"class":213},[203,34555,34556],{"class":318},"'Pullover'",[203,34558,592],{"class":213},[203,34560,34561],{"class":318},"'Dress'",[203,34563,592],{"class":213},[203,34565,34566],{"class":318},"'Coat'",[203,34568,592],{"class":213},[203,34570,34571],{"class":318},"'Sandal'",[203,34573,592],{"class":213},[203,34575,34576],{"class":318},"'Shirt'",[203,34578,592],{"class":213},[203,34580,34581],{"class":318},"'Sneaker'",[203,34583,592],{"class":213},[203,34585,34586],{"class":318},"'Bag'",[203,34588,592],{"class":213},[203,34590,34591],{"class":318},"'Ankle boot'",[203,34593,33304],{"class":213},[203,34595,34596,34598],{"class":205,"line":16853},[203,34597,34236],{"class":209},[203,34599,32942],{"class":213},[203,34601,34602],{"class":205,"line":16859},[203,34603,34604],{"class":272},"        # 将数据和标签都放到设备当中\n",[203,34606,34607,34609,34612,34614],{"class":205,"line":16873},[203,34608,3492],{"class":209},[203,34610,34611],{"class":213}," b_x,b_y ",[203,34613,26101],{"class":209},[203,34615,34255],{"class":213},[203,34617,34618,34620,34622],{"class":205,"line":16886},[203,34619,32668],{"class":213},[203,34621,259],{"class":209},[203,34623,32673],{"class":213},[203,34625,34626,34628,34630],{"class":205,"line":16891},[203,34627,32683],{"class":213},[203,34629,259],{"class":209},[203,34631,32688],{"class":213},[203,34633,34634],{"class":205,"line":16905},[203,34635,2489],{"emptyLinePlaceholder":131},[203,34637,34638],{"class":205,"line":16910},[203,34639,34640],{"class":272},"            # 设置模型为验证模式\n",[203,34642,34643],{"class":205,"line":16916},[203,34644,32933],{"class":213},[203,34646,34647],{"class":205,"line":16921},[203,34648,34649],{"class":272},"            # 模型推理结果\n",[203,34651,34652,34654,34656],{"class":205,"line":16935},[203,34653,32718],{"class":213},[203,34655,259],{"class":209},[203,34657,32723],{"class":213},[203,34659,34660],{"class":205,"line":16940},[203,34661,34662],{"class":272},"            # 获取最大下标，最大下标就是类别号\n",[203,34664,34665,34667,34669,34671,34673,34675,34677],{"class":205,"line":16945},[203,34666,32735],{"class":213},[203,34668,259],{"class":209},[203,34670,32740],{"class":213},[203,34672,32743],{"class":5306},[203,34674,259],{"class":209},[203,34676,431],{"class":262},[203,34678,220],{"class":213},[203,34680,34681],{"class":205,"line":16959},[203,34682,34683],{"class":272},"            # 取出张量中的数值\n",[203,34685,34686,34689,34691],{"class":205,"line":16971},[203,34687,34688],{"class":213},"            result",[203,34690,259],{"class":209},[203,34692,34693],{"class":213},"pre_lab.item()\n",[203,34695,34696,34699,34701],{"class":205,"line":16976},[203,34697,34698],{"class":213},"            label",[203,34700,259],{"class":209},[203,34702,34703],{"class":213},"b_y.item()\n",[203,34705,34706,34709,34711,34714,34717,34720,34722,34725],{"class":205,"line":16989},[203,34707,34708],{"class":262},"            print",[203,34710,214],{"class":213},[203,34712,34713],{"class":318},"\"预测值：\"",[203,34715,34716],{"class":213},",classes[result],",[203,34718,34719],{"class":318},"\"------\"",[203,34721,592],{"class":213},[203,34723,34724],{"class":318},"\"真实值：\"",[203,34726,34727],{"class":213},",classes[label])\n",[19,34729,34730],{},"（2）AlexNet",[157,34732,34733],{},[160,34734,34735],{},"神经网络构建",[194,34737,34739],{"className":30436,"code":34738,"language":30438,"meta":27,"style":27},"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",[200,34740,34741,34747,34757,34767,34779,34783,34800,34808,34823,34835,34877,34904,34947,34973,35017,35060,35103,35130,35134,35144,35149,35177,35196,35215,35219,35224,35232,35247,35257,35271,35281,35296,35311,35326,35337,35341,35346,35356,35371,35376,35390,35405,35417,35422,35433,35438,35444,35449,35461,35481,35486,35495],{"__ignoreMap":27},[203,34742,34743,34745],{"class":205,"line":206},[203,34744,30450],{"class":209},[203,34746,30453],{"class":213},[203,34748,34749,34751,34753,34755],{"class":205,"line":124},[203,34750,30795],{"class":209},[203,34752,30798],{"class":213},[203,34754,30450],{"class":209},[203,34756,30803],{"class":213},[203,34758,34759,34761,34763,34765],{"class":205,"line":1269},[203,34760,30795],{"class":209},[203,34762,30815],{"class":213},[203,34764,30450],{"class":209},[203,34766,30820],{"class":213},[203,34768,34769,34771,34774,34776],{"class":205,"line":1284},[203,34770,30450],{"class":209},[203,34772,34773],{"class":213}," torch.nn.functional ",[203,34775,31441],{"class":209},[203,34777,34778],{"class":213}," F\n",[203,34780,34781],{"class":205,"line":1290},[203,34782,2489],{"emptyLinePlaceholder":131},[203,34784,34785,34787,34790,34792,34794,34796,34798],{"class":205,"line":1304},[203,34786,14784],{"class":209},[203,34788,34789],{"class":2052}," AlexNet",[203,34791,214],{"class":213},[203,34793,30836],{"class":2052},[203,34795,772],{"class":213},[203,34797,30841],{"class":2052},[203,34799,30844],{"class":213},[203,34801,34802,34804,34806],{"class":205,"line":1310},[203,34803,30859],{"class":209},[203,34805,30862],{"class":262},[203,34807,30865],{"class":213},[203,34809,34810,34812,34815,34817,34819,34821],{"class":205,"line":1401},[203,34811,30875],{"class":262},[203,34813,34814],{"class":213},"(AlexNet,",[203,34816,30881],{"class":262},[203,34818,30884],{"class":213},[203,34820,30887],{"class":262},[203,34822,2065],{"class":213},[203,34824,34825,34827,34830,34832],{"class":205,"line":1407},[203,34826,30903],{"class":262},[203,34828,34829],{"class":213},".ReLu",[203,34831,259],{"class":209},[203,34833,34834],{"class":213},"nn.ReLU()\n",[203,34836,34837,34839,34841,34843,34845,34847,34849,34851,34853,34855,34857,34859,34861,34863,34865,34867,34869,34871,34873,34875],{"class":205,"line":1419},[203,34838,30903],{"class":262},[203,34840,30906],{"class":213},[203,34842,259],{"class":209},[203,34844,30911],{"class":213},[203,34846,30914],{"class":5306},[203,34848,259],{"class":209},[203,34850,431],{"class":262},[203,34852,592],{"class":213},[203,34854,30923],{"class":5306},[203,34856,259],{"class":209},[203,34858,423],{"class":262},[203,34860,592],{"class":213},[203,34862,30932],{"class":5306},[203,34864,259],{"class":209},[203,34866,686],{"class":262},[203,34868,592],{"class":213},[203,34870,30987],{"class":5306},[203,34872,259],{"class":209},[203,34874,507],{"class":262},[203,34876,220],{"class":213},[203,34878,34879,34881,34883,34885,34888,34890,34892,34894,34896,34898,34900,34902],{"class":205,"line":1701},[203,34880,30903],{"class":262},[203,34882,30971],{"class":213},[203,34884,259],{"class":209},[203,34886,34887],{"class":213},"nn.MaxPool2d(",[203,34889,30932],{"class":5306},[203,34891,259],{"class":209},[203,34893,285],{"class":262},[203,34895,592],{"class":213},[203,34897,30987],{"class":5306},[203,34899,259],{"class":209},[203,34901,291],{"class":262},[203,34903,220],{"class":213},[203,34905,34906,34908,34910,34912,34914,34916,34918,34920,34922,34924,34926,34929,34931,34933,34935,34937,34939,34941,34943,34945],{"class":205,"line":1706},[203,34907,30903],{"class":262},[203,34909,31000],{"class":213},[203,34911,259],{"class":209},[203,34913,30911],{"class":213},[203,34915,30914],{"class":5306},[203,34917,259],{"class":209},[203,34919,423],{"class":262},[203,34921,592],{"class":213},[203,34923,30923],{"class":5306},[203,34925,259],{"class":209},[203,34927,34928],{"class":262},"256",[203,34930,592],{"class":213},[203,34932,30932],{"class":5306},[203,34934,259],{"class":209},[203,34936,533],{"class":262},[203,34938,592],{"class":213},[203,34940,30941],{"class":5306},[203,34942,259],{"class":209},[203,34944,291],{"class":262},[203,34946,220],{"class":213},[203,34948,34949,34951,34953,34955,34957,34959,34961,34963,34965,34967,34969,34971],{"class":205,"line":1712},[203,34950,30903],{"class":262},[203,34952,31035],{"class":213},[203,34954,259],{"class":209},[203,34956,34887],{"class":213},[203,34958,30932],{"class":5306},[203,34960,259],{"class":209},[203,34962,285],{"class":262},[203,34964,592],{"class":213},[203,34966,30987],{"class":5306},[203,34968,259],{"class":209},[203,34970,291],{"class":262},[203,34972,220],{"class":213},[203,34974,34975,34977,34980,34982,34984,34986,34988,34990,34992,34994,34996,34999,35001,35003,35005,35007,35009,35011,35013,35015],{"class":205,"line":1717},[203,34976,30903],{"class":262},[203,34978,34979],{"class":213},".c5",[203,34981,259],{"class":209},[203,34983,30911],{"class":213},[203,34985,30914],{"class":5306},[203,34987,259],{"class":209},[203,34989,34928],{"class":262},[203,34991,592],{"class":213},[203,34993,30923],{"class":5306},[203,34995,259],{"class":209},[203,34997,34998],{"class":262},"384",[203,35000,592],{"class":213},[203,35002,30932],{"class":5306},[203,35004,259],{"class":209},[203,35006,285],{"class":262},[203,35008,592],{"class":213},[203,35010,30941],{"class":5306},[203,35012,259],{"class":209},[203,35014,431],{"class":262},[203,35016,220],{"class":213},[203,35018,35019,35021,35024,35026,35028,35030,35032,35034,35036,35038,35040,35042,35044,35046,35048,35050,35052,35054,35056,35058],{"class":205,"line":1731},[203,35020,30903],{"class":262},[203,35022,35023],{"class":213},".c6",[203,35025,259],{"class":209},[203,35027,30911],{"class":213},[203,35029,30914],{"class":5306},[203,35031,259],{"class":209},[203,35033,34998],{"class":262},[203,35035,592],{"class":213},[203,35037,30923],{"class":5306},[203,35039,259],{"class":209},[203,35041,34998],{"class":262},[203,35043,592],{"class":213},[203,35045,30932],{"class":5306},[203,35047,259],{"class":209},[203,35049,285],{"class":262},[203,35051,592],{"class":213},[203,35053,30941],{"class":5306},[203,35055,259],{"class":209},[203,35057,431],{"class":262},[203,35059,220],{"class":213},[203,35061,35062,35064,35067,35069,35071,35073,35075,35077,35079,35081,35083,35085,35087,35089,35091,35093,35095,35097,35099,35101],{"class":205,"line":1736},[203,35063,30903],{"class":262},[203,35065,35066],{"class":213},".c7",[203,35068,259],{"class":209},[203,35070,30911],{"class":213},[203,35072,30914],{"class":5306},[203,35074,259],{"class":209},[203,35076,34998],{"class":262},[203,35078,592],{"class":213},[203,35080,30923],{"class":5306},[203,35082,259],{"class":209},[203,35084,34928],{"class":262},[203,35086,592],{"class":213},[203,35088,30932],{"class":5306},[203,35090,259],{"class":209},[203,35092,285],{"class":262},[203,35094,592],{"class":213},[203,35096,30941],{"class":5306},[203,35098,259],{"class":209},[203,35100,431],{"class":262},[203,35102,220],{"class":213},[203,35104,35105,35107,35110,35112,35114,35116,35118,35120,35122,35124,35126,35128],{"class":205,"line":1742},[203,35106,30903],{"class":262},[203,35108,35109],{"class":213},".s8",[203,35111,259],{"class":209},[203,35113,34887],{"class":213},[203,35115,30932],{"class":5306},[203,35117,259],{"class":209},[203,35119,285],{"class":262},[203,35121,592],{"class":213},[203,35123,30987],{"class":5306},[203,35125,259],{"class":209},[203,35127,291],{"class":262},[203,35129,220],{"class":213},[203,35131,35132],{"class":205,"line":1763},[203,35133,31060],{"class":272},[203,35135,35136,35138,35140,35142],{"class":205,"line":1768},[203,35137,30903],{"class":262},[203,35139,31067],{"class":213},[203,35141,259],{"class":209},[203,35143,31072],{"class":213},[203,35145,35146],{"class":205,"line":1782},[203,35147,35148],{"class":272},"       # 定义全连接层\n",[203,35150,35151,35153,35156,35158,35160,35162,35164,35166,35168,35170,35172,35175],{"class":205,"line":1787},[203,35152,30903],{"class":262},[203,35154,35155],{"class":213},".f1",[203,35157,259],{"class":209},[203,35159,31089],{"class":213},[203,35161,558],{"class":262},[203,35163,669],{"class":209},[203,35165,558],{"class":262},[203,35167,669],{"class":209},[203,35169,34928],{"class":262},[203,35171,592],{"class":213},[203,35173,35174],{"class":262},"4096",[203,35176,220],{"class":213},[203,35178,35179,35181,35184,35186,35188,35190,35192,35194],{"class":205,"line":1816},[203,35180,30903],{"class":262},[203,35182,35183],{"class":213},".f2",[203,35185,259],{"class":209},[203,35187,31089],{"class":213},[203,35189,35174],{"class":262},[203,35191,592],{"class":213},[203,35193,35174],{"class":262},[203,35195,220],{"class":213},[203,35197,35198,35200,35203,35205,35207,35209,35211,35213],{"class":205,"line":1821},[203,35199,30903],{"class":262},[203,35201,35202],{"class":213},".f3",[203,35204,259],{"class":209},[203,35206,31089],{"class":213},[203,35208,35174],{"class":262},[203,35210,592],{"class":213},[203,35212,660],{"class":262},[203,35214,220],{"class":213},[203,35216,35217],{"class":205,"line":1838},[203,35218,2489],{"emptyLinePlaceholder":131},[203,35220,35221],{"class":205,"line":1843},[203,35222,35223],{"class":272},"    # 定义前向传播\n",[203,35225,35226,35228,35230],{"class":205,"line":1848},[203,35227,30859],{"class":209},[203,35229,31151],{"class":2052},[203,35231,31154],{"class":213},[203,35233,35234,35236,35238,35240,35243,35245],{"class":205,"line":1853},[203,35235,31159],{"class":213},[203,35237,259],{"class":209},[203,35239,30881],{"class":262},[203,35241,35242],{"class":213},".ReLu(",[203,35244,30881],{"class":262},[203,35246,31171],{"class":213},[203,35248,35249,35251,35253,35255],{"class":205,"line":1867},[203,35250,31159],{"class":213},[203,35252,259],{"class":209},[203,35254,30881],{"class":262},[203,35256,31182],{"class":213},[203,35258,35259,35261,35263,35265,35267,35269],{"class":205,"line":1872},[203,35260,31159],{"class":213},[203,35262,259],{"class":209},[203,35264,30881],{"class":262},[203,35266,35242],{"class":213},[203,35268,30881],{"class":262},[203,35270,31197],{"class":213},[203,35272,35273,35275,35277,35279],{"class":205,"line":2666},[203,35274,31159],{"class":213},[203,35276,259],{"class":209},[203,35278,30881],{"class":262},[203,35280,31208],{"class":213},[203,35282,35283,35285,35287,35289,35291,35293],{"class":205,"line":2680},[203,35284,31159],{"class":213},[203,35286,259],{"class":209},[203,35288,30881],{"class":262},[203,35290,35242],{"class":213},[203,35292,30881],{"class":262},[203,35294,35295],{"class":213},".c5(x))\n",[203,35297,35298,35300,35302,35304,35306,35308],{"class":205,"line":2688},[203,35299,31159],{"class":213},[203,35301,259],{"class":209},[203,35303,30881],{"class":262},[203,35305,35242],{"class":213},[203,35307,30881],{"class":262},[203,35309,35310],{"class":213},".c6(x))\n",[203,35312,35313,35315,35317,35319,35321,35323],{"class":205,"line":2693},[203,35314,31159],{"class":213},[203,35316,259],{"class":209},[203,35318,30881],{"class":262},[203,35320,35242],{"class":213},[203,35322,30881],{"class":262},[203,35324,35325],{"class":213},".c7(x))\n",[203,35327,35328,35330,35332,35334],{"class":205,"line":2699},[203,35329,31159],{"class":213},[203,35331,259],{"class":209},[203,35333,30881],{"class":262},[203,35335,35336],{"class":213},".s8(x)\n",[203,35338,35339],{"class":205,"line":2705},[203,35340,2489],{"emptyLinePlaceholder":131},[203,35342,35343],{"class":205,"line":2710},[203,35344,35345],{"class":272},"        # 展平加线性全连接层\n",[203,35347,35348,35350,35352,35354],{"class":205,"line":8038},[203,35349,31159],{"class":213},[203,35351,259],{"class":209},[203,35353,30881],{"class":262},[203,35355,31219],{"class":213},[203,35357,35358,35360,35362,35364,35366,35368],{"class":205,"line":8062},[203,35359,31159],{"class":213},[203,35361,259],{"class":209},[203,35363,30881],{"class":262},[203,35365,35242],{"class":213},[203,35367,30881],{"class":262},[203,35369,35370],{"class":213},".f1(x))\n",[203,35372,35373],{"class":205,"line":8067},[203,35374,35375],{"class":272},"        # 还需要dropout对神经元随机进行失活\n",[203,35377,35378,35380,35382,35385,35388],{"class":205,"line":8073},[203,35379,31159],{"class":213},[203,35381,259],{"class":209},[203,35383,35384],{"class":213},"F.dropout(x,",[203,35386,35387],{"class":262},"0.5",[203,35389,220],{"class":213},[203,35391,35392,35394,35396,35398,35400,35402],{"class":205,"line":8100},[203,35393,31159],{"class":213},[203,35395,259],{"class":209},[203,35397,30881],{"class":262},[203,35399,35242],{"class":213},[203,35401,30881],{"class":262},[203,35403,35404],{"class":213},".f2(x))\n",[203,35406,35407,35409,35411,35413,35415],{"class":205,"line":8105},[203,35408,31159],{"class":213},[203,35410,259],{"class":209},[203,35412,35384],{"class":213},[203,35414,35387],{"class":262},[203,35416,220],{"class":213},[203,35418,35419],{"class":205,"line":8111},[203,35420,35421],{"class":272},"        # 直接输出\n",[203,35423,35424,35426,35428,35430],{"class":205,"line":8123},[203,35425,31159],{"class":213},[203,35427,259],{"class":209},[203,35429,30881],{"class":262},[203,35431,35432],{"class":213},".f3(x)\n",[203,35434,35435],{"class":205,"line":8135},[203,35436,35437],{"class":272},"        # 前向传播输出\n",[203,35439,35440,35442],{"class":205,"line":8147},[203,35441,14842],{"class":209},[203,35443,31267],{"class":213},[203,35445,35446],{"class":205,"line":9806},[203,35447,35448],{"class":272},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[203,35450,35451,35453,35455,35457,35459],{"class":205,"line":9831},[203,35452,1620],{"class":209},[203,35454,31278],{"class":262},[203,35456,3038],{"class":209},[203,35458,31283],{"class":318},[203,35460,3828],{"class":213},[203,35462,35463,35465,35467,35469,35471,35473,35475,35477,35479],{"class":205,"line":9854},[203,35464,31295],{"class":213},[203,35466,259],{"class":209},[203,35468,30509],{"class":213},[203,35470,31302],{"class":318},[203,35472,1793],{"class":209},[203,35474,31307],{"class":213},[203,35476,1790],{"class":209},[203,35478,30534],{"class":318},[203,35480,220],{"class":213},[203,35482,35483],{"class":205,"line":9878},[203,35484,35485],{"class":272},"    # 模型实例化，然后将实例化的模型放到设备中\n",[203,35487,35488,35490,35492],{"class":205,"line":9883},[203,35489,31347],{"class":213},[203,35491,259],{"class":209},[203,35493,35494],{"class":213},"AlexNet().to(device)\n",[203,35496,35497,35499,35501,35503,35505,35508,35510,35512],{"class":205,"line":9888},[203,35498,31357],{"class":262},[203,35500,31360],{"class":213},[203,35502,431],{"class":262},[203,35504,592],{"class":213},[203,35506,35507],{"class":262},"227",[203,35509,592],{"class":213},[203,35511,35507],{"class":262},[203,35513,31373],{"class":213},[157,35515,35516],{"start":124},[160,35517,31386],{},[194,35519,35521],{"className":30436,"code":35520,"language":30438,"meta":27,"style":27},"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",[200,35522,35523,35529,35535,35545,35551,35561,35571,35581,35591,35601,35605,35616,35626,35630,35634,35638,35646,35658,35668,35684,35694,35726,35740,35750,35760,35764,35774,35788,35798,35808,35818,35824,35828,35832,35836,35840,35844,35852,35872,35876,35880,35884,35888,35892,35908,35912,35916,35924,35928,35932,35940,35944,35948,35952,35960,35964,35968,35972,35976,35984,35988,35996,36000,36008,36012,36020,36024,36032,36036,36040,36048,36052,36056,36060,36072,36096,36110,36114,36118,36122,36130,36134,36142,36146,36154,36158,36166,36170,36178,36182,36190,36194,36206,36210,36218,36222,36230,36234,36238,36242,36246,36254,36258,36274,36278,36286,36290,36294,36298,36302,36306,36310,36314,36330,36334,36346,36350,36362,36366,36378,36382,36390,36394,36402,36406,36410,36415,36421,36425,36434,36438,36455,36459,36468,36472,36490,36503,36508,36521,36525,36529,36537,36541,36545,36553,36557,36565,36569,36577,36581,36585,36627,36669,36673,36677,36693,36697,36713,36717,36721,36729,36733,36737,36749,36787,36792,36797,36806,36810,36824,36834,36840,36846,36852,36858,36862,36866,36872,36876,36880,36888,36892,36910,36914,36918,36922,36938,36942,36946,36950,36954,36958,36978,36998,37002,37006,37010,37018,37026,37030,37046,37066,37086,37090,37094,37102,37110,37114,37118,37122,37134,37138,37148,37156,37173],{"__ignoreMap":27},[203,35524,35525,35527],{"class":205,"line":206},[203,35526,30450],{"class":209},[203,35528,31880],{"class":213},[203,35530,35531,35533],{"class":205,"line":124},[203,35532,30450],{"class":209},[203,35534,31887],{"class":213},[203,35536,35537,35539,35541,35543],{"class":205,"line":1269},[203,35538,30450],{"class":209},[203,35540,31898],{"class":213},[203,35542,31441],{"class":209},[203,35544,31903],{"class":213},[203,35546,35547,35549],{"class":205,"line":1284},[203,35548,30450],{"class":209},[203,35550,30453],{"class":213},[203,35552,35553,35555,35557,35559],{"class":205,"line":1290},[203,35554,30795],{"class":209},[203,35556,31473],{"class":213},[203,35558,30450],{"class":209},[203,35560,31920],{"class":213},[203,35562,35563,35565,35567,35569],{"class":205,"line":1304},[203,35564,30795],{"class":209},[203,35566,31426],{"class":213},[203,35568,30450],{"class":209},[203,35570,31431],{"class":213},[203,35572,35573,35575,35577,35579],{"class":205,"line":1310},[203,35574,30795],{"class":209},[203,35576,31456],{"class":213},[203,35578,30450],{"class":209},[203,35580,31461],{"class":213},[203,35582,35583,35585,35587,35589],{"class":205,"line":1401},[203,35584,30450],{"class":209},[203,35586,31473],{"class":213},[203,35588,31441],{"class":209},[203,35590,31478],{"class":213},[203,35592,35593,35595,35597,35599],{"class":205,"line":1407},[203,35594,30450],{"class":209},[203,35596,31490],{"class":213},[203,35598,31441],{"class":209},[203,35600,31495],{"class":213},[203,35602,35603],{"class":205,"line":1419},[203,35604,31965],{"class":272},[203,35606,35607,35609,35611,35613],{"class":205,"line":1701},[203,35608,30795],{"class":209},[203,35610,31972],{"class":213},[203,35612,30450],{"class":209},[203,35614,35615],{"class":213}," AlexNet\n",[203,35617,35618,35620,35622,35624],{"class":205,"line":1706},[203,35619,30795],{"class":209},[203,35621,30798],{"class":213},[203,35623,30450],{"class":209},[203,35625,30803],{"class":213},[203,35627,35628],{"class":205,"line":1712},[203,35629,2489],{"emptyLinePlaceholder":131},[203,35631,35632],{"class":205,"line":1717},[203,35633,2489],{"emptyLinePlaceholder":131},[203,35635,35636],{"class":205,"line":1731},[203,35637,32000],{"class":272},[203,35639,35640,35642,35644],{"class":205,"line":1736},[203,35641,32005],{"class":209},[203,35643,32008],{"class":2052},[203,35645,32011],{"class":213},[203,35647,35648,35650,35652,35654,35656],{"class":205,"line":1742},[203,35649,32016],{"class":213},[203,35651,259],{"class":209},[203,35653,31513],{"class":213},[203,35655,31521],{"class":318},[203,35657,31524],{"class":213},[203,35659,35660,35662,35664,35666],{"class":205,"line":1763},[203,35661,32029],{"class":5306},[203,35663,259],{"class":209},[203,35665,31534],{"class":262},[203,35667,31524],{"class":213},[203,35669,35670,35672,35674,35676,35678,35680,35682],{"class":205,"line":1768},[203,35671,32040],{"class":5306},[203,35673,259],{"class":209},[203,35675,31551],{"class":213},[203,35677,31554],{"class":5306},[203,35679,259],{"class":209},[203,35681,35507],{"class":262},[203,35683,31562],{"class":213},[203,35685,35686,35688,35690,35692],{"class":205,"line":1782},[203,35687,32057],{"class":5306},[203,35689,259],{"class":209},[203,35691,31534],{"class":262},[203,35693,220],{"class":213},[203,35695,35696,35698,35700,35702,35704,35706,35708,35710,35712,35714,35716,35718,35720,35722,35724],{"class":205,"line":1787},[203,35697,32068],{"class":213},[203,35699,259],{"class":209},[203,35701,32073],{"class":213},[203,35703,32076],{"class":262},[203,35705,214],{"class":213},[203,35707,32081],{"class":262},[203,35709,669],{"class":209},[203,35711,7448],{"class":262},[203,35713,32088],{"class":213},[203,35715,32076],{"class":262},[203,35717,214],{"class":213},[203,35719,32095],{"class":262},[203,35721,669],{"class":209},[203,35723,7448],{"class":262},[203,35725,32102],{"class":213},[203,35727,35728,35730,35732,35734,35736,35738],{"class":205,"line":1816},[203,35729,32107],{"class":213},[203,35731,259],{"class":209},[203,35733,32112],{"class":213},[203,35735,31595],{"class":5306},[203,35737,259],{"class":209},[203,35739,31600],{"class":213},[203,35741,35742,35744,35746,35748],{"class":205,"line":1821},[203,35743,32123],{"class":5306},[203,35745,259],{"class":209},[203,35747,32128],{"class":262},[203,35749,31524],{"class":213},[203,35751,35752,35754,35756,35758],{"class":205,"line":1838},[203,35753,32135],{"class":5306},[203,35755,259],{"class":209},[203,35757,31534],{"class":262},[203,35759,31524],{"class":213},[203,35761,35762],{"class":205,"line":1843},[203,35763,32146],{"class":272},[203,35765,35766,35768,35770,35772],{"class":205,"line":1848},[203,35767,32151],{"class":5306},[203,35769,259],{"class":209},[203,35771,609],{"class":262},[203,35773,220],{"class":213},[203,35775,35776,35778,35780,35782,35784,35786],{"class":205,"line":1853},[203,35777,32162],{"class":213},[203,35779,259],{"class":209},[203,35781,31592],{"class":213},[203,35783,31595],{"class":5306},[203,35785,259],{"class":209},[203,35787,32173],{"class":213},[203,35789,35790,35792,35794,35796],{"class":205,"line":1867},[203,35791,32178],{"class":5306},[203,35793,259],{"class":209},[203,35795,32128],{"class":262},[203,35797,31524],{"class":213},[203,35799,35800,35802,35804,35806],{"class":205,"line":1872},[203,35801,32189],{"class":5306},[203,35803,259],{"class":209},[203,35805,31534],{"class":262},[203,35807,31524],{"class":213},[203,35809,35810,35812,35814,35816],{"class":205,"line":2666},[203,35811,32200],{"class":5306},[203,35813,259],{"class":209},[203,35815,609],{"class":262},[203,35817,220],{"class":213},[203,35819,35820,35822],{"class":205,"line":2680},[203,35821,4179],{"class":209},[203,35823,32213],{"class":213},[203,35825,35826],{"class":205,"line":2688},[203,35827,2489],{"emptyLinePlaceholder":131},[203,35829,35830],{"class":205,"line":2693},[203,35831,32222],{"class":272},[203,35833,35834],{"class":205,"line":2699},[203,35835,32227],{"class":272},[203,35837,35838],{"class":205,"line":2705},[203,35839,2489],{"emptyLinePlaceholder":131},[203,35841,35842],{"class":205,"line":2710},[203,35843,32236],{"class":272},[203,35845,35846,35848,35850],{"class":205,"line":8038},[203,35847,32005],{"class":209},[203,35849,32243],{"class":2052},[203,35851,32246],{"class":213},[203,35853,35854,35856,35858,35860,35862,35864,35866,35868,35870],{"class":205,"line":8062},[203,35855,31295],{"class":213},[203,35857,259],{"class":209},[203,35859,30509],{"class":213},[203,35861,31302],{"class":318},[203,35863,1793],{"class":209},[203,35865,31307],{"class":213},[203,35867,1790],{"class":209},[203,35869,32265],{"class":318},[203,35871,220],{"class":213},[203,35873,35874],{"class":205,"line":8067},[203,35875,2489],{"emptyLinePlaceholder":131},[203,35877,35878],{"class":205,"line":8073},[203,35879,2489],{"emptyLinePlaceholder":131},[203,35881,35882],{"class":205,"line":8100},[203,35883,32280],{"class":272},[203,35885,35886],{"class":205,"line":8105},[203,35887,32285],{"class":272},[203,35889,35890],{"class":205,"line":8111},[203,35891,32290],{"class":272},[203,35893,35894,35896,35898,35900,35902,35904,35906],{"class":205,"line":8123},[203,35895,32295],{"class":213},[203,35897,259],{"class":209},[203,35899,32300],{"class":213},[203,35901,32303],{"class":5306},[203,35903,259],{"class":209},[203,35905,32308],{"class":262},[203,35907,220],{"class":213},[203,35909,35910],{"class":205,"line":8135},[203,35911,2489],{"emptyLinePlaceholder":131},[203,35913,35914],{"class":205,"line":8147},[203,35915,32319],{"class":272},[203,35917,35918,35920,35922],{"class":205,"line":9806},[203,35919,32324],{"class":213},[203,35921,259],{"class":209},[203,35923,32329],{"class":213},[203,35925,35926],{"class":205,"line":9831},[203,35927,2489],{"emptyLinePlaceholder":131},[203,35929,35930],{"class":205,"line":9854},[203,35931,32338],{"class":272},[203,35933,35934,35936,35938],{"class":205,"line":9878},[203,35935,31347],{"class":213},[203,35937,259],{"class":209},[203,35939,32347],{"class":213},[203,35941,35942],{"class":205,"line":9883},[203,35943,32352],{"class":272},[203,35945,35946],{"class":205,"line":9888},[203,35947,32357],{"class":272},[203,35949,35950],{"class":205,"line":9893},[203,35951,32362],{"class":272},[203,35953,35954,35956,35958],{"class":205,"line":9902},[203,35955,32367],{"class":213},[203,35957,259],{"class":209},[203,35959,32372],{"class":213},[203,35961,35962],{"class":205,"line":9907},[203,35963,2489],{"emptyLinePlaceholder":131},[203,35965,35966],{"class":205,"line":9913},[203,35967,2489],{"emptyLinePlaceholder":131},[203,35969,35970],{"class":205,"line":9934},[203,35971,32385],{"class":272},[203,35973,35974],{"class":205,"line":9940},[203,35975,32390],{"class":272},[203,35977,35978,35980,35982],{"class":205,"line":9954},[203,35979,32395],{"class":213},[203,35981,259],{"class":209},[203,35983,32400],{"class":262},[203,35985,35986],{"class":205,"line":9960},[203,35987,32405],{"class":272},[203,35989,35990,35992,35994],{"class":205,"line":9987},[203,35991,32410],{"class":213},[203,35993,259],{"class":209},[203,35995,32415],{"class":213},[203,35997,35998],{"class":205,"line":9996},[203,35999,32420],{"class":272},[203,36001,36002,36004,36006],{"class":205,"line":10002},[203,36003,32425],{"class":213},[203,36005,259],{"class":209},[203,36007,32415],{"class":213},[203,36009,36010],{"class":205,"line":10010},[203,36011,32434],{"class":272},[203,36013,36014,36016,36018],{"class":205,"line":10015},[203,36015,32439],{"class":213},[203,36017,259],{"class":209},[203,36019,32415],{"class":213},[203,36021,36022],{"class":205,"line":16694},[203,36023,32448],{"class":272},[203,36025,36026,36028,36030],{"class":205,"line":16700},[203,36027,32453],{"class":213},[203,36029,259],{"class":209},[203,36031,32415],{"class":213},[203,36033,36034],{"class":205,"line":16723},[203,36035,2489],{"emptyLinePlaceholder":131},[203,36037,36038],{"class":205,"line":16729},[203,36039,32466],{"class":272},[203,36041,36042,36044,36046],{"class":205,"line":16752},[203,36043,32471],{"class":213},[203,36045,259],{"class":209},[203,36047,32476],{"class":213},[203,36049,36050],{"class":205,"line":16766},[203,36051,2489],{"emptyLinePlaceholder":131},[203,36053,36054],{"class":205,"line":16786},[203,36055,2489],{"emptyLinePlaceholder":131},[203,36057,36058],{"class":205,"line":16792},[203,36059,32489],{"class":272},[203,36061,36062,36064,36066,36068,36070],{"class":205,"line":16803},[203,36063,3290],{"class":209},[203,36065,32496],{"class":213},[203,36067,26101],{"class":209},[203,36069,32501],{"class":262},[203,36071,32504],{"class":213},[203,36073,36074,36076,36078,36080,36082,36084,36086,36088,36090,36092,36094],{"class":205,"line":16826},[203,36075,32509],{"class":262},[203,36077,214],{"class":213},[203,36079,32514],{"class":318},[203,36081,32517],{"class":262},[203,36083,798],{"class":318},[203,36085,32517],{"class":262},[203,36087,465],{"class":318},[203,36089,32526],{"class":213},[203,36091,746],{"class":209},[203,36093,431],{"class":262},[203,36095,30555],{"class":213},[203,36097,36098,36100,36102,36104,36106,36108],{"class":205,"line":16848},[203,36099,32509],{"class":262},[203,36101,214],{"class":213},[203,36103,32541],{"class":318},[203,36105,669],{"class":209},[203,36107,660],{"class":262},[203,36109,220],{"class":213},[203,36111,36112],{"class":205,"line":16853},[203,36113,2489],{"emptyLinePlaceholder":131},[203,36115,36116],{"class":205,"line":16859},[203,36117,32556],{"class":272},[203,36119,36120],{"class":205,"line":16873},[203,36121,32561],{"class":272},[203,36123,36124,36126,36128],{"class":205,"line":16886},[203,36125,32566],{"class":213},[203,36127,259],{"class":209},[203,36129,32400],{"class":262},[203,36131,36132],{"class":205,"line":16891},[203,36133,32575],{"class":272},[203,36135,36136,36138,36140],{"class":205,"line":16905},[203,36137,32580],{"class":213},[203,36139,259],{"class":209},[203,36141,3174],{"class":262},[203,36143,36144],{"class":205,"line":16910},[203,36145,32589],{"class":272},[203,36147,36148,36150,36152],{"class":205,"line":16916},[203,36149,32594],{"class":213},[203,36151,259],{"class":209},[203,36153,32400],{"class":262},[203,36155,36156],{"class":205,"line":16921},[203,36157,32603],{"class":272},[203,36159,36160,36162,36164],{"class":205,"line":16935},[203,36161,32608],{"class":213},[203,36163,259],{"class":209},[203,36165,3174],{"class":262},[203,36167,36168],{"class":205,"line":16940},[203,36169,32617],{"class":272},[203,36171,36172,36174,36176],{"class":205,"line":16945},[203,36173,32622],{"class":213},[203,36175,259],{"class":209},[203,36177,3174],{"class":262},[203,36179,36180],{"class":205,"line":16959},[203,36181,32631],{"class":272},[203,36183,36184,36186,36188],{"class":205,"line":16971},[203,36185,32636],{"class":213},[203,36187,259],{"class":209},[203,36189,3174],{"class":262},[203,36191,36192],{"class":205,"line":16976},[203,36193,32645],{"class":272},[203,36195,36196,36198,36200,36202,36204],{"class":205,"line":16989},[203,36197,3492],{"class":209},[203,36199,31659],{"class":213},[203,36201,26101],{"class":209},[203,36203,31664],{"class":262},[203,36205,32658],{"class":213},[203,36207,36208],{"class":205,"line":16994},[203,36209,32663],{"class":272},[203,36211,36212,36214,36216],{"class":205,"line":16999},[203,36213,32668],{"class":213},[203,36215,259],{"class":209},[203,36217,32673],{"class":213},[203,36219,36220],{"class":205,"line":17004},[203,36221,32678],{"class":272},[203,36223,36224,36226,36228],{"class":205,"line":17017},[203,36225,32683],{"class":213},[203,36227,259],{"class":209},[203,36229,32688],{"class":213},[203,36231,36232],{"class":205,"line":17022},[203,36233,32694],{"class":272},[203,36235,36236],{"class":205,"line":32691},[203,36237,32700],{"class":213},[203,36239,36240],{"class":205,"line":32697},[203,36241,32706],{"class":272},[203,36243,36244],{"class":205,"line":32703},[203,36245,32712],{"class":272},[203,36247,36248,36250,36252],{"class":205,"line":32709},[203,36249,32718],{"class":213},[203,36251,259],{"class":209},[203,36253,32723],{"class":213},[203,36255,36256],{"class":205,"line":32715},[203,36257,32729],{"class":272},[203,36259,36260,36262,36264,36266,36268,36270,36272],{"class":205,"line":32726},[203,36261,32735],{"class":213},[203,36263,259],{"class":209},[203,36265,32740],{"class":213},[203,36267,32743],{"class":5306},[203,36269,259],{"class":209},[203,36271,431],{"class":262},[203,36273,220],{"class":213},[203,36275,36276],{"class":205,"line":32732},[203,36277,32755],{"class":272},[203,36279,36280,36282,36284],{"class":205,"line":32752},[203,36281,32761],{"class":213},[203,36283,259],{"class":209},[203,36285,32766],{"class":213},[203,36287,36288],{"class":205,"line":32758},[203,36289,32772],{"class":272},[203,36291,36292],{"class":205,"line":32769},[203,36293,32778],{"class":213},[203,36295,36296],{"class":205,"line":32775},[203,36297,32784],{"class":272},[203,36299,36300],{"class":205,"line":32781},[203,36301,32790],{"class":213},[203,36303,36304],{"class":205,"line":32787},[203,36305,32796],{"class":272},[203,36307,36308],{"class":205,"line":32793},[203,36309,32802],{"class":213},[203,36311,36312],{"class":205,"line":32799},[203,36313,32808],{"class":272},[203,36315,36316,36318,36320,36322,36324,36326,36328],{"class":205,"line":32805},[203,36317,32814],{"class":213},[203,36319,9567],{"class":209},[203,36321,32819],{"class":213},[203,36323,669],{"class":209},[203,36325,32824],{"class":213},[203,36327,405],{"class":262},[203,36329,220],{"class":213},[203,36331,36332],{"class":205,"line":32811},[203,36333,32834],{"class":272},[203,36335,36336,36338,36340,36342,36344],{"class":205,"line":32831},[203,36337,32840],{"class":213},[203,36339,9567],{"class":209},[203,36341,32845],{"class":213},[203,36343,3038],{"class":209},[203,36345,32850],{"class":213},[203,36347,36348],{"class":205,"line":32837},[203,36349,32856],{"class":272},[203,36351,36352,36354,36356,36358,36360],{"class":205,"line":32853},[203,36353,32862],{"class":213},[203,36355,9567],{"class":209},[203,36357,32824],{"class":213},[203,36359,405],{"class":262},[203,36361,220],{"class":213},[203,36363,36364],{"class":205,"line":32859},[203,36365,32876],{"class":272},[203,36367,36368,36370,36372,36374,36376],{"class":205,"line":32873},[203,36369,3492],{"class":209},[203,36371,32884],{"class":213},[203,36373,26101],{"class":209},[203,36375,31664],{"class":262},[203,36377,32891],{"class":213},[203,36379,36380],{"class":205,"line":32879},[203,36381,32897],{"class":272},[203,36383,36384,36386,36388],{"class":205,"line":32894},[203,36385,32668],{"class":213},[203,36387,259],{"class":209},[203,36389,32673],{"class":213},[203,36391,36392],{"class":205,"line":32900},[203,36393,32912],{"class":272},[203,36395,36396,36398,36400],{"class":205,"line":32909},[203,36397,32683],{"class":213},[203,36399,259],{"class":209},[203,36401,32688],{"class":213},[203,36403,36404],{"class":205,"line":32915},[203,36405,32927],{"class":272},[203,36407,36408],{"class":205,"line":32924},[203,36409,32933],{"class":213},[203,36411,36412],{"class":205,"line":32930},[203,36413,36414],{"class":272},"            # 验证时不计算梯度以节省内存\u002F计算\n",[203,36416,36417,36419],{"class":205,"line":32936},[203,36418,32939],{"class":209},[203,36420,32942],{"class":213},[203,36422,36423],{"class":205,"line":32945},[203,36424,32948],{"class":272},[203,36426,36427,36430,36432],{"class":205,"line":32951},[203,36428,36429],{"class":213},"                output",[203,36431,259],{"class":209},[203,36433,32723],{"class":213},[203,36435,36436],{"class":205,"line":32962},[203,36437,32965],{"class":272},[203,36439,36440,36443,36445,36447,36449,36451,36453],{"class":205,"line":32968},[203,36441,36442],{"class":213},"                pre_lab",[203,36444,259],{"class":209},[203,36446,32740],{"class":213},[203,36448,32743],{"class":5306},[203,36450,259],{"class":209},[203,36452,431],{"class":262},[203,36454,220],{"class":213},[203,36456,36457],{"class":205,"line":32987},[203,36458,32990],{"class":272},[203,36460,36461,36464,36466],{"class":205,"line":32993},[203,36462,36463],{"class":213},"                val_batch_loss",[203,36465,259],{"class":209},[203,36467,32766],{"class":213},[203,36469,36470],{"class":205,"line":33004},[203,36471,33007],{"class":272},[203,36473,36474,36477,36479,36482,36484,36486,36488],{"class":205,"line":33010},[203,36475,36476],{"class":213},"                val_loss",[203,36478,9567],{"class":209},[203,36480,36481],{"class":213},"val_batch_loss.item()",[203,36483,669],{"class":209},[203,36485,32824],{"class":213},[203,36487,405],{"class":262},[203,36489,220],{"class":213},[203,36491,36492,36495,36497,36499,36501],{"class":205,"line":33030},[203,36493,36494],{"class":213},"                val_corrects",[203,36496,9567],{"class":209},[203,36498,32845],{"class":213},[203,36500,3038],{"class":209},[203,36502,32850],{"class":213},[203,36504,36505],{"class":205,"line":33046},[203,36506,36507],{"class":272},"            # 当前用于验证的样本数量\n",[203,36509,36510,36513,36515,36517,36519],{"class":205,"line":33052},[203,36511,36512],{"class":213},"            val_num",[203,36514,9567],{"class":209},[203,36516,32824],{"class":213},[203,36518,405],{"class":262},[203,36520,220],{"class":213},[203,36522,36523],{"class":205,"line":33066},[203,36524,33069],{"class":272},[203,36526,36527],{"class":205,"line":33072},[203,36528,33075],{"class":272},[203,36530,36531,36533,36535],{"class":205,"line":33078},[203,36532,33081],{"class":213},[203,36534,798],{"class":209},[203,36536,33086],{"class":213},[203,36538,36539],{"class":205,"line":33089},[203,36540,33092],{"class":272},[203,36542,36543],{"class":205,"line":33095},[203,36544,33098],{"class":272},[203,36546,36547,36549,36551],{"class":205,"line":33101},[203,36548,33104],{"class":213},[203,36550,798],{"class":209},[203,36552,33086],{"class":213},[203,36554,36555],{"class":205,"line":33111},[203,36556,33114],{"class":272},[203,36558,36559,36561,36563],{"class":205,"line":33117},[203,36560,33120],{"class":213},[203,36562,798],{"class":209},[203,36564,33125],{"class":213},[203,36566,36567],{"class":205,"line":33128},[203,36568,33131],{"class":272},[203,36570,36571,36573,36575],{"class":205,"line":33134},[203,36572,33137],{"class":213},[203,36574,798],{"class":209},[203,36576,33125],{"class":213},[203,36578,36579],{"class":205,"line":33144},[203,36580,2489],{"emptyLinePlaceholder":131},[203,36582,36583],{"class":205,"line":33149},[203,36584,33152],{"class":272},[203,36586,36587,36589,36591,36593,36595,36597,36599,36601,36603,36605,36607,36609,36611,36613,36615,36617,36619,36621,36623,36625],{"class":205,"line":33155},[203,36588,32509],{"class":262},[203,36590,214],{"class":213},[203,36592,3681],{"class":318},[203,36594,32517],{"class":262},[203,36596,33166],{"class":318},[203,36598,1110],{"class":262},[203,36600,33171],{"class":209},[203,36602,1160],{"class":262},[203,36604,33176],{"class":318},[203,36606,1110],{"class":262},[203,36608,33171],{"class":209},[203,36610,1160],{"class":262},[203,36612,3681],{"class":318},[203,36614,33187],{"class":213},[203,36616,746],{"class":209},[203,36618,431],{"class":262},[203,36620,33194],{"class":213},[203,36622,746],{"class":209},[203,36624,431],{"class":262},[203,36626,33201],{"class":213},[203,36628,36629,36631,36633,36635,36637,36639,36641,36643,36645,36647,36649,36651,36653,36655,36657,36659,36661,36663,36665,36667],{"class":205,"line":33204},[203,36630,32509],{"class":262},[203,36632,214],{"class":213},[203,36634,3681],{"class":318},[203,36636,32517],{"class":262},[203,36638,33215],{"class":318},[203,36640,1110],{"class":262},[203,36642,33171],{"class":209},[203,36644,1160],{"class":262},[203,36646,33224],{"class":318},[203,36648,1110],{"class":262},[203,36650,33171],{"class":209},[203,36652,1160],{"class":262},[203,36654,3681],{"class":318},[203,36656,33235],{"class":213},[203,36658,746],{"class":209},[203,36660,431],{"class":262},[203,36662,33242],{"class":213},[203,36664,746],{"class":209},[203,36666,431],{"class":262},[203,36668,33201],{"class":213},[203,36670,36671],{"class":205,"line":33251},[203,36672,2489],{"emptyLinePlaceholder":131},[203,36674,36675],{"class":205,"line":33256},[203,36676,33259],{"class":272},[203,36678,36679,36681,36683,36685,36687,36689,36691],{"class":205,"line":33262},[203,36680,2586],{"class":209},[203,36682,33267],{"class":213},[203,36684,746],{"class":209},[203,36686,431],{"class":262},[203,36688,1154],{"class":213},[203,36690,1174],{"class":209},[203,36692,33278],{"class":213},[203,36694,36695],{"class":205,"line":33281},[203,36696,33284],{"class":272},[203,36698,36699,36701,36703,36705,36707,36709,36711],{"class":205,"line":33287},[203,36700,33290],{"class":213},[203,36702,253],{"class":262},[203,36704,259],{"class":209},[203,36706,33297],{"class":213},[203,36708,746],{"class":209},[203,36710,431],{"class":262},[203,36712,33304],{"class":213},[203,36714,36715],{"class":205,"line":33307},[203,36716,33310],{"class":272},[203,36718,36719],{"class":205,"line":33313},[203,36720,33316],{"class":272},[203,36722,36723,36725,36727],{"class":205,"line":33319},[203,36724,33322],{"class":213},[203,36726,259],{"class":209},[203,36728,32372],{"class":213},[203,36730,36731],{"class":205,"line":33329},[203,36732,2489],{"emptyLinePlaceholder":131},[203,36734,36735],{"class":205,"line":33334},[203,36736,33337],{"class":272},[203,36738,36739,36741,36743,36745,36747],{"class":205,"line":33340},[203,36740,33343],{"class":213},[203,36742,259],{"class":209},[203,36744,33348],{"class":213},[203,36746,746],{"class":209},[203,36748,33353],{"class":213},[203,36750,36751,36753,36755,36757,36759,36761,36763,36765,36767,36769,36771,36773,36775,36777,36779,36781,36783,36785],{"class":205,"line":33356},[203,36752,32509],{"class":262},[203,36754,214],{"class":213},[203,36756,33363],{"class":318},[203,36758,1110],{"class":262},[203,36760,33368],{"class":209},[203,36762,1160],{"class":262},[203,36764,758],{"class":318},[203,36766,1110],{"class":262},[203,36768,33368],{"class":209},[203,36770,1160],{"class":262},[203,36772,33381],{"class":318},[203,36774,33384],{"class":213},[203,36776,33387],{"class":209},[203,36778,1121],{"class":262},[203,36780,33392],{"class":213},[203,36782,542],{"class":209},[203,36784,1121],{"class":262},[203,36786,30555],{"class":213},[203,36788,36789],{"class":205,"line":33401},[203,36790,36791],{"class":272},"    # 选择最优参数并保存\n",[203,36793,36794],{"class":205,"line":33407},[203,36795,36796],{"class":272},"    # 保存最佳模型权重字典\n",[203,36798,36799,36802,36804],{"class":205,"line":33413},[203,36800,36801],{"class":213},"    torch.save(best_model_wts,",[203,36803,33425],{"class":318},[203,36805,220],{"class":213},[203,36807,36808],{"class":205,"line":33419},[203,36809,33445],{"class":272},[203,36811,36812,36814,36816,36818,36820,36822],{"class":205,"line":33430},[203,36813,33451],{"class":213},[203,36815,259],{"class":209},[203,36817,33456],{"class":213},[203,36819,33459],{"class":5306},[203,36821,259],{"class":209},[203,36823,1635],{"class":213},[203,36825,36826,36828,36830,36832],{"class":205,"line":33436},[203,36827,33469],{"class":318},[203,36829,1073],{"class":213},[203,36831,33474],{"class":262},[203,36833,33477],{"class":213},[203,36835,36836,36838],{"class":205,"line":33442},[203,36837,33483],{"class":318},[203,36839,33486],{"class":213},[203,36841,36842,36844],{"class":205,"line":33448},[203,36843,33492],{"class":318},[203,36845,33495],{"class":213},[203,36847,36848,36850],{"class":205,"line":33466},[203,36849,33501],{"class":318},[203,36851,33504],{"class":213},[203,36853,36854,36856],{"class":205,"line":33480},[203,36855,33510],{"class":318},[203,36857,33513],{"class":213},[203,36859,36860],{"class":205,"line":33489},[203,36861,33519],{"class":213},[203,36863,36864],{"class":205,"line":33498},[203,36865,33525],{"class":272},[203,36867,36868,36870],{"class":205,"line":33507},[203,36869,4179],{"class":209},[203,36871,33533],{"class":213},[203,36873,36874],{"class":205,"line":33516},[203,36875,2489],{"emptyLinePlaceholder":131},[203,36877,36878],{"class":205,"line":33522},[203,36879,33544],{"class":272},[203,36881,36882,36884,36886],{"class":205,"line":33528},[203,36883,32005],{"class":209},[203,36885,33552],{"class":2052},[203,36887,33555],{"class":213},[203,36889,36890],{"class":205,"line":33536},[203,36891,33561],{"class":272},[203,36893,36894,36896,36898,36900,36902,36904,36906,36908],{"class":205,"line":33541},[203,36895,33567],{"class":213},[203,36897,31751],{"class":5306},[203,36899,259],{"class":209},[203,36901,214],{"class":213},[203,36903,712],{"class":262},[203,36905,592],{"class":213},[203,36907,507],{"class":262},[203,36909,30555],{"class":213},[203,36911,36912],{"class":205,"line":33547},[203,36913,33587],{"class":272},[203,36915,36916],{"class":205,"line":33558},[203,36917,33593],{"class":272},[203,36919,36920],{"class":205,"line":33564},[203,36921,33599],{"class":272},[203,36923,36924,36926,36928,36930,36932,36934,36936],{"class":205,"line":33584},[203,36925,31785],{"class":213},[203,36927,431],{"class":262},[203,36929,592],{"class":213},[203,36931,291],{"class":262},[203,36933,592],{"class":213},[203,36935,431],{"class":262},[203,36937,220],{"class":213},[203,36939,36940],{"class":205,"line":33590},[203,36941,33622],{"class":272},[203,36943,36944],{"class":205,"line":33596},[203,36945,33628],{"class":272},[203,36947,36948],{"class":205,"line":33602},[203,36949,33634],{"class":272},[203,36951,36952],{"class":205,"line":33619},[203,36953,33640],{"class":272},[203,36955,36956],{"class":205,"line":33625},[203,36957,33646],{"class":272},[203,36959,36960,36962,36964,36966,36968,36970,36972,36974,36976],{"class":205,"line":33631},[203,36961,33652],{"class":213},[203,36963,33655],{"class":318},[203,36965,33658],{"class":213},[203,36967,33661],{"class":318},[203,36969,592],{"class":213},[203,36971,33666],{"class":5306},[203,36973,259],{"class":209},[203,36975,33671],{"class":318},[203,36977,220],{"class":213},[203,36979,36980,36982,36984,36986,36988,36990,36992,36994,36996],{"class":205,"line":33637},[203,36981,33652],{"class":213},[203,36983,33655],{"class":318},[203,36985,33683],{"class":213},[203,36987,33686],{"class":318},[203,36989,592],{"class":213},[203,36991,33666],{"class":5306},[203,36993,259],{"class":209},[203,36995,33695],{"class":318},[203,36997,220],{"class":213},[203,36999,37000],{"class":205,"line":33643},[203,37001,33703],{"class":272},[203,37003,37004],{"class":205,"line":33649},[203,37005,33709],{"class":213},[203,37007,37008],{"class":205,"line":33676},[203,37009,33715],{"class":272},[203,37011,37012,37014,37016],{"class":205,"line":33700},[203,37013,33721],{"class":213},[203,37015,33724],{"class":318},[203,37017,220],{"class":213},[203,37019,37020,37022,37024],{"class":205,"line":33706},[203,37021,33732],{"class":213},[203,37023,33735],{"class":318},[203,37025,220],{"class":213},[203,37027,37028],{"class":205,"line":33712},[203,37029,33743],{"class":272},[203,37031,37032,37034,37036,37038,37040,37042,37044],{"class":205,"line":33718},[203,37033,31785],{"class":213},[203,37035,431],{"class":262},[203,37037,592],{"class":213},[203,37039,291],{"class":262},[203,37041,592],{"class":213},[203,37043,291],{"class":262},[203,37045,220],{"class":213},[203,37047,37048,37050,37052,37054,37056,37058,37060,37062,37064],{"class":205,"line":33729},[203,37049,33652],{"class":213},[203,37051,33655],{"class":318},[203,37053,33770],{"class":213},[203,37055,33661],{"class":318},[203,37057,592],{"class":213},[203,37059,33666],{"class":5306},[203,37061,259],{"class":209},[203,37063,33781],{"class":318},[203,37065,220],{"class":213},[203,37067,37068,37070,37072,37074,37076,37078,37080,37082,37084],{"class":205,"line":33740},[203,37069,33652],{"class":213},[203,37071,33655],{"class":318},[203,37073,33793],{"class":213},[203,37075,33686],{"class":318},[203,37077,592],{"class":213},[203,37079,33666],{"class":5306},[203,37081,259],{"class":209},[203,37083,33804],{"class":318},[203,37085,220],{"class":213},[203,37087,37088],{"class":205,"line":33746},[203,37089,33812],{"class":272},[203,37091,37092],{"class":205,"line":33763},[203,37093,33709],{"class":213},[203,37095,37096,37098,37100],{"class":205,"line":33786},[203,37097,33721],{"class":213},[203,37099,33655],{"class":318},[203,37101,220],{"class":213},[203,37103,37104,37106,37108],{"class":205,"line":33809},[203,37105,33732],{"class":213},[203,37107,33834],{"class":318},[203,37109,220],{"class":213},[203,37111,37112],{"class":205,"line":33815},[203,37113,33842],{"class":213},[203,37115,37116],{"class":205,"line":33820},[203,37117,2489],{"emptyLinePlaceholder":131},[203,37119,37120],{"class":205,"line":33829},[203,37121,33853],{"class":272},[203,37123,37124,37126,37128,37130,37132],{"class":205,"line":33839},[203,37125,1620],{"class":209},[203,37127,31278],{"class":262},[203,37129,3038],{"class":209},[203,37131,31283],{"class":318},[203,37133,3828],{"class":213},[203,37135,37136],{"class":205,"line":33845},[203,37137,33872],{"class":272},[203,37139,37140,37143,37145],{"class":205,"line":33850},[203,37141,37142],{"class":213},"    AlexNet",[203,37144,259],{"class":209},[203,37146,37147],{"class":213},"AlexNet()\n",[203,37149,37150,37152,37154],{"class":205,"line":33856},[203,37151,33889],{"class":213},[203,37153,259],{"class":209},[203,37155,33894],{"class":213},[203,37157,37158,37160,37162,37165,37167,37169,37171],{"class":205,"line":33869},[203,37159,33451],{"class":213},[203,37161,259],{"class":209},[203,37163,37164],{"class":213},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[203,37166,33907],{"class":5306},[203,37168,259],{"class":209},[203,37170,914],{"class":262},[203,37172,220],{"class":213},[203,37174,37175],{"class":205,"line":33875},[203,37176,33919],{"class":213},[157,37178,37179],{"start":1269},[160,37180,33932],{},[194,37182,37184],{"className":30436,"code":37183,"language":30438,"meta":27,"style":27},"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",[200,37185,37186,37192,37202,37212,37222,37226,37236,37246,37257,37261,37265,37269,37277,37293,37303,37319,37329,37343,37347,37357,37367,37377,37383,37387,37391,37399,37403,37419,37427,37431,37435,37443,37451,37455,37459,37463,37467,37473,37477,37487,37495,37503,37507,37511,37515,37523,37527,37543,37547,37551,37555,37567,37571,37583,37587,37591,37603,37607,37617,37621,37625,37637,37641,37649,37653,37657,37665,37669,37677,37681,37685,37689,37693,37697,37713,37721,37725,37729,37777,37783,37787,37797,37805,37813,37817,37821,37825,37829,37837,37841,37857,37861,37869,37877],{"__ignoreMap":27},[203,37187,37188,37190],{"class":205,"line":206},[203,37189,30450],{"class":209},[203,37191,30453],{"class":213},[203,37193,37194,37196,37198,37200],{"class":205,"line":124},[203,37195,30450],{"class":209},[203,37197,31473],{"class":213},[203,37199,31441],{"class":209},[203,37201,31478],{"class":213},[203,37203,37204,37206,37208,37210],{"class":205,"line":1269},[203,37205,30795],{"class":209},[203,37207,33960],{"class":213},[203,37209,30450],{"class":209},[203,37211,33965],{"class":213},[203,37213,37214,37216,37218,37220],{"class":205,"line":1284},[203,37215,30795],{"class":209},[203,37217,31456],{"class":213},[203,37219,30450],{"class":209},[203,37221,31461],{"class":213},[203,37223,37224],{"class":205,"line":1290},[203,37225,33980],{"class":272},[203,37227,37228,37230,37232,37234],{"class":205,"line":1304},[203,37229,30795],{"class":209},[203,37231,31426],{"class":213},[203,37233,30450],{"class":209},[203,37235,31431],{"class":213},[203,37237,37238,37240,37242,37244],{"class":205,"line":1310},[203,37239,30795],{"class":209},[203,37241,31972],{"class":213},[203,37243,30450],{"class":209},[203,37245,35615],{"class":213},[203,37247,37248,37250,37253,37255],{"class":205,"line":1401},[203,37249,30795],{"class":209},[203,37251,37252],{"class":213}," 练习.AlexNet.model ",[203,37254,30450],{"class":209},[203,37256,35615],{"class":213},[203,37258,37259],{"class":205,"line":1407},[203,37260,2489],{"emptyLinePlaceholder":131},[203,37262,37263],{"class":205,"line":1419},[203,37264,2489],{"emptyLinePlaceholder":131},[203,37266,37267],{"class":205,"line":1701},[203,37268,34009],{"class":272},[203,37270,37271,37273,37275],{"class":205,"line":1706},[203,37272,32005],{"class":209},[203,37274,34016],{"class":2052},[203,37276,32011],{"class":213},[203,37278,37279,37281,37283,37285,37287,37289,37291],{"class":205,"line":1712},[203,37280,34023],{"class":213},[203,37282,259],{"class":209},[203,37284,31513],{"class":213},[203,37286,31516],{"class":5306},[203,37288,259],{"class":209},[203,37290,31521],{"class":318},[203,37292,31524],{"class":213},[203,37294,37295,37297,37299,37301],{"class":205,"line":1717},[203,37296,34040],{"class":5306},[203,37298,259],{"class":209},[203,37300,34045],{"class":262},[203,37302,31524],{"class":213},[203,37304,37305,37307,37309,37311,37313,37315,37317],{"class":205,"line":1731},[203,37306,34052],{"class":5306},[203,37308,259],{"class":209},[203,37310,31551],{"class":213},[203,37312,31554],{"class":5306},[203,37314,259],{"class":209},[203,37316,35507],{"class":262},[203,37318,31562],{"class":213},[203,37320,37321,37323,37325,37327],{"class":205,"line":1736},[203,37322,34069],{"class":5306},[203,37324,259],{"class":209},[203,37326,31534],{"class":262},[203,37328,220],{"class":213},[203,37330,37331,37333,37335,37337,37339,37341],{"class":205,"line":1742},[203,37332,34080],{"class":213},[203,37334,259],{"class":209},[203,37336,31592],{"class":213},[203,37338,31595],{"class":5306},[203,37340,259],{"class":209},[203,37342,34091],{"class":213},[203,37344,37345],{"class":205,"line":1763},[203,37346,34096],{"class":272},[203,37348,37349,37351,37353,37355],{"class":205,"line":1768},[203,37350,34101],{"class":5306},[203,37352,259],{"class":209},[203,37354,431],{"class":262},[203,37356,31524],{"class":213},[203,37358,37359,37361,37363,37365],{"class":205,"line":1782},[203,37360,34112],{"class":5306},[203,37362,259],{"class":209},[203,37364,31534],{"class":262},[203,37366,31524],{"class":213},[203,37368,37369,37371,37373,37375],{"class":205,"line":1787},[203,37370,34123],{"class":5306},[203,37372,259],{"class":209},[203,37374,405],{"class":262},[203,37376,220],{"class":213},[203,37378,37379,37381],{"class":205,"line":1816},[203,37380,4179],{"class":209},[203,37382,34136],{"class":213},[203,37384,37385],{"class":205,"line":1821},[203,37386,2489],{"emptyLinePlaceholder":131},[203,37388,37389],{"class":205,"line":1838},[203,37390,34145],{"class":272},[203,37392,37393,37395,37397],{"class":205,"line":1843},[203,37394,32005],{"class":209},[203,37396,34152],{"class":2052},[203,37398,34155],{"class":213},[203,37400,37401],{"class":205,"line":1848},[203,37402,34160],{"class":272},[203,37404,37405,37407,37409,37411,37413,37415,37417],{"class":205,"line":1853},[203,37406,31295],{"class":213},[203,37408,259],{"class":209},[203,37410,31302],{"class":318},[203,37412,1793],{"class":209},[203,37414,31307],{"class":213},[203,37416,1790],{"class":209},[203,37418,34177],{"class":318},[203,37420,37421,37423,37425],{"class":205,"line":1867},[203,37422,31347],{"class":213},[203,37424,259],{"class":209},[203,37426,32347],{"class":213},[203,37428,37429],{"class":205,"line":1872},[203,37430,2489],{"emptyLinePlaceholder":131},[203,37432,37433],{"class":205,"line":2666},[203,37434,34194],{"class":272},[203,37436,37437,37439,37441],{"class":205,"line":2680},[203,37438,34199],{"class":213},[203,37440,259],{"class":209},[203,37442,32400],{"class":262},[203,37444,37445,37447,37449],{"class":205,"line":2688},[203,37446,34208],{"class":213},[203,37448,259],{"class":209},[203,37450,3174],{"class":262},[203,37452,37453],{"class":205,"line":2693},[203,37454,2489],{"emptyLinePlaceholder":131},[203,37456,37457],{"class":205,"line":2699},[203,37458,34221],{"class":272},[203,37460,37461],{"class":205,"line":2705},[203,37462,34226],{"class":272},[203,37464,37465],{"class":205,"line":2710},[203,37466,34231],{"class":272},[203,37468,37469,37471],{"class":205,"line":8038},[203,37470,34236],{"class":209},[203,37472,32942],{"class":213},[203,37474,37475],{"class":205,"line":8062},[203,37476,34243],{"class":272},[203,37478,37479,37481,37483,37485],{"class":205,"line":8067},[203,37480,3492],{"class":209},[203,37482,34250],{"class":213},[203,37484,26101],{"class":209},[203,37486,34255],{"class":213},[203,37488,37489,37491,37493],{"class":205,"line":8073},[203,37490,34260],{"class":213},[203,37492,259],{"class":209},[203,37494,34265],{"class":213},[203,37496,37497,37499,37501],{"class":205,"line":8100},[203,37498,34270],{"class":213},[203,37500,259],{"class":209},[203,37502,34275],{"class":213},[203,37504,37505],{"class":205,"line":8105},[203,37506,34280],{"class":272},[203,37508,37509],{"class":205,"line":8111},[203,37510,32933],{"class":213},[203,37512,37513],{"class":205,"line":8123},[203,37514,34289],{"class":272},[203,37516,37517,37519,37521],{"class":205,"line":8135},[203,37518,32718],{"class":213},[203,37520,259],{"class":209},[203,37522,34298],{"class":213},[203,37524,37525],{"class":205,"line":8147},[203,37526,34303],{"class":272},[203,37528,37529,37531,37533,37535,37537,37539,37541],{"class":205,"line":9806},[203,37530,32735],{"class":213},[203,37532,259],{"class":209},[203,37534,32740],{"class":213},[203,37536,32743],{"class":5306},[203,37538,259],{"class":209},[203,37540,431],{"class":262},[203,37542,220],{"class":213},[203,37544,37545],{"class":205,"line":9831},[203,37546,34324],{"class":272},[203,37548,37549],{"class":205,"line":9854},[203,37550,34329],{"class":272},[203,37552,37553],{"class":205,"line":9878},[203,37554,34334],{"class":272},[203,37556,37557,37559,37561,37563,37565],{"class":205,"line":9883},[203,37558,34339],{"class":213},[203,37560,9567],{"class":209},[203,37562,32845],{"class":213},[203,37564,3038],{"class":209},[203,37566,34348],{"class":213},[203,37568,37569],{"class":205,"line":9888},[203,37570,34353],{"class":272},[203,37572,37573,37575,37577,37579,37581],{"class":205,"line":9893},[203,37574,34358],{"class":213},[203,37576,9567],{"class":209},[203,37578,34363],{"class":213},[203,37580,405],{"class":262},[203,37582,220],{"class":213},[203,37584,37585],{"class":205,"line":9902},[203,37586,2489],{"emptyLinePlaceholder":131},[203,37588,37589],{"class":205,"line":9907},[203,37590,34376],{"class":272},[203,37592,37593,37595,37597,37599,37601],{"class":205,"line":9913},[203,37594,34381],{"class":213},[203,37596,259],{"class":209},[203,37598,34386],{"class":213},[203,37600,798],{"class":209},[203,37602,34391],{"class":213},[203,37604,37605],{"class":205,"line":9934},[203,37606,34396],{"class":272},[203,37608,37609,37611,37613,37615],{"class":205,"line":9940},[203,37610,32509],{"class":262},[203,37612,214],{"class":213},[203,37614,34405],{"class":318},[203,37616,34408],{"class":213},[203,37618,37619],{"class":205,"line":9954},[203,37620,2489],{"emptyLinePlaceholder":131},[203,37622,37623],{"class":205,"line":9960},[203,37624,34417],{"class":272},[203,37626,37627,37629,37631,37633,37635],{"class":205,"line":9987},[203,37628,1620],{"class":209},[203,37630,31278],{"class":262},[203,37632,3038],{"class":209},[203,37634,31283],{"class":318},[203,37636,3828],{"class":213},[203,37638,37639],{"class":205,"line":9996},[203,37640,34434],{"class":272},[203,37642,37643,37645,37647],{"class":205,"line":10002},[203,37644,31347],{"class":213},[203,37646,259],{"class":209},[203,37648,37147],{"class":213},[203,37650,37651],{"class":205,"line":10010},[203,37652,34447],{"class":272},[203,37654,37655],{"class":205,"line":10015},[203,37656,34452],{"class":272},[203,37658,37659,37661,37663],{"class":205,"line":16694},[203,37660,34457],{"class":213},[203,37662,34460],{"class":318},[203,37664,30555],{"class":213},[203,37666,37667],{"class":205,"line":16700},[203,37668,34467],{"class":272},[203,37670,37671,37673,37675],{"class":205,"line":16723},[203,37672,34080],{"class":213},[203,37674,259],{"class":209},[203,37676,34476],{"class":213},[203,37678,37679],{"class":205,"line":16729},[203,37680,34481],{"class":272},[203,37682,37683],{"class":205,"line":16752},[203,37684,34486],{"class":213},[203,37686,37687],{"class":205,"line":16766},[203,37688,2489],{"emptyLinePlaceholder":131},[203,37690,37691],{"class":205,"line":16786},[203,37692,34495],{"class":272},[203,37694,37695],{"class":205,"line":16792},[203,37696,34500],{"class":272},[203,37698,37699,37701,37703,37705,37707,37709,37711],{"class":205,"line":16803},[203,37700,31295],{"class":213},[203,37702,259],{"class":209},[203,37704,31302],{"class":318},[203,37706,1793],{"class":209},[203,37708,31307],{"class":213},[203,37710,1790],{"class":209},[203,37712,34177],{"class":318},[203,37714,37715,37717,37719],{"class":205,"line":16826},[203,37716,31347],{"class":213},[203,37718,259],{"class":209},[203,37720,32347],{"class":213},[203,37722,37723],{"class":205,"line":16848},[203,37724,34529],{"class":272},[203,37726,37727],{"class":205,"line":16853},[203,37728,34534],{"class":272},[203,37730,37731,37733,37735,37737,37739,37741,37743,37745,37747,37749,37751,37753,37755,37757,37759,37761,37763,37765,37767,37769,37771,37773,37775],{"class":205,"line":16859},[203,37732,34539],{"class":213},[203,37734,259],{"class":209},[203,37736,1104],{"class":213},[203,37738,34546],{"class":318},[203,37740,592],{"class":213},[203,37742,34551],{"class":318},[203,37744,592],{"class":213},[203,37746,34556],{"class":318},[203,37748,592],{"class":213},[203,37750,34561],{"class":318},[203,37752,592],{"class":213},[203,37754,34566],{"class":318},[203,37756,592],{"class":213},[203,37758,34571],{"class":318},[203,37760,592],{"class":213},[203,37762,34576],{"class":318},[203,37764,592],{"class":213},[203,37766,34581],{"class":318},[203,37768,592],{"class":213},[203,37770,34586],{"class":318},[203,37772,592],{"class":213},[203,37774,34591],{"class":318},[203,37776,33304],{"class":213},[203,37778,37779,37781],{"class":205,"line":16873},[203,37780,34236],{"class":209},[203,37782,32942],{"class":213},[203,37784,37785],{"class":205,"line":16886},[203,37786,34604],{"class":272},[203,37788,37789,37791,37793,37795],{"class":205,"line":16891},[203,37790,3492],{"class":209},[203,37792,34611],{"class":213},[203,37794,26101],{"class":209},[203,37796,34255],{"class":213},[203,37798,37799,37801,37803],{"class":205,"line":16905},[203,37800,32668],{"class":213},[203,37802,259],{"class":209},[203,37804,32673],{"class":213},[203,37806,37807,37809,37811],{"class":205,"line":16910},[203,37808,32683],{"class":213},[203,37810,259],{"class":209},[203,37812,32688],{"class":213},[203,37814,37815],{"class":205,"line":16916},[203,37816,2489],{"emptyLinePlaceholder":131},[203,37818,37819],{"class":205,"line":16921},[203,37820,34640],{"class":272},[203,37822,37823],{"class":205,"line":16935},[203,37824,32933],{"class":213},[203,37826,37827],{"class":205,"line":16940},[203,37828,34649],{"class":272},[203,37830,37831,37833,37835],{"class":205,"line":16945},[203,37832,32718],{"class":213},[203,37834,259],{"class":209},[203,37836,32723],{"class":213},[203,37838,37839],{"class":205,"line":16959},[203,37840,34662],{"class":272},[203,37842,37843,37845,37847,37849,37851,37853,37855],{"class":205,"line":16971},[203,37844,32735],{"class":213},[203,37846,259],{"class":209},[203,37848,32740],{"class":213},[203,37850,32743],{"class":5306},[203,37852,259],{"class":209},[203,37854,431],{"class":262},[203,37856,220],{"class":213},[203,37858,37859],{"class":205,"line":16976},[203,37860,34683],{"class":272},[203,37862,37863,37865,37867],{"class":205,"line":16989},[203,37864,34688],{"class":213},[203,37866,259],{"class":209},[203,37868,34693],{"class":213},[203,37870,37871,37873,37875],{"class":205,"line":16994},[203,37872,34698],{"class":213},[203,37874,259],{"class":209},[203,37876,34703],{"class":213},[203,37878,37879,37881,37883,37885,37887,37889,37891,37893],{"class":205,"line":16999},[203,37880,34708],{"class":262},[203,37882,214],{"class":213},[203,37884,34713],{"class":318},[203,37886,34716],{"class":213},[203,37888,34719],{"class":318},[203,37890,592],{"class":213},[203,37892,34724],{"class":318},[203,37894,34727],{"class":213},[174,37896,37898],{"id":37897},"_22vgg","2.2.VGG",[22088,37900,37902],{"id":37901},"_221原理","2.2.1.原理",[19,37904,37905],{},[25,37906],{"alt":27,"src":37907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[19,37909,37910],{},[25,37911],{"alt":27,"src":37912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[19,37914,37915],{},[25,37916],{"alt":27,"src":37917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[19,37919,37920],{},"参数详细描述：",[19,37922,37923],{},[25,37924],{"alt":27,"src":37925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[19,37927,37928],{},[25,37929],{"alt":27,"src":37930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[19,37932,37933],{},[25,37934],{"alt":27,"src":37935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[19,37937,37938],{},[25,37939],{"alt":27,"src":37940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[19,37942,37943],{},[25,37944],{"alt":27,"src":37945},"\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",[22088,37947,37949],{"id":37948},"_222代码实现","2.2.2.代码实现",[157,37951,37952],{},[160,37953,37954],{},"网络搭建",[194,37956,37958],{"className":30436,"code":37957,"language":30438,"meta":27,"style":27},"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",[200,37959,37960,37966,37978,37988,37998,38002,38019,38027,38046,38051,38056,38068,38106,38111,38147,38151,38180,38185,38190,38201,38237,38241,38277,38281,38309,38313,38318,38329,38365,38369,38405,38409,38445,38449,38477,38481,38486,38497,38534,38538,38574,38578,38614,38618,38646,38650,38655,38666,38702,38706,38742,38746,38782,38786,38814,38818,38823,38834,38839,38844,38849,38870,38874,38886,38890,38902,38906,38910,38915,38920,38935,38940,38950,38955,38970,38975,38994,38999,39008,39013,39023,39028,39033,39047,39052,39066,39074,39078,39082,39090,39101,39112,39123,39134,39145,39156,39162,39166,39171,39184,39204,39210,39219],{"__ignoreMap":27},[203,37961,37962,37964],{"class":205,"line":206},[203,37963,30450],{"class":209},[203,37965,30453],{"class":213},[203,37967,37968,37970,37973,37975],{"class":205,"line":124},[203,37969,30795],{"class":209},[203,37971,37972],{"class":213}," sympy.core.sympify ",[203,37974,30450],{"class":209},[203,37976,37977],{"class":213}," kernS\n",[203,37979,37980,37982,37984,37986],{"class":205,"line":1269},[203,37981,30795],{"class":209},[203,37983,30798],{"class":213},[203,37985,30450],{"class":209},[203,37987,30803],{"class":213},[203,37989,37990,37992,37994,37996],{"class":205,"line":1284},[203,37991,30795],{"class":209},[203,37993,30815],{"class":213},[203,37995,30450],{"class":209},[203,37997,30820],{"class":213},[203,37999,38000],{"class":205,"line":1290},[203,38001,2489],{"emptyLinePlaceholder":131},[203,38003,38004,38006,38009,38011,38013,38015,38017],{"class":205,"line":1304},[203,38005,14784],{"class":209},[203,38007,38008],{"class":2052}," VGG16",[203,38010,214],{"class":213},[203,38012,30836],{"class":2052},[203,38014,772],{"class":213},[203,38016,30841],{"class":2052},[203,38018,30844],{"class":213},[203,38020,38021,38023,38025],{"class":205,"line":1310},[203,38022,30859],{"class":209},[203,38024,30862],{"class":262},[203,38026,30865],{"class":213},[203,38028,38029,38031,38033,38036,38038,38040,38042,38044],{"class":205,"line":1401},[203,38030,30875],{"class":262},[203,38032,214],{"class":213},[203,38034,38035],{"class":262},"VGG16",[203,38037,12525],{"class":213},[203,38039,30881],{"class":262},[203,38041,30884],{"class":213},[203,38043,30887],{"class":262},[203,38045,2065],{"class":213},[203,38047,38048],{"class":205,"line":1407},[203,38049,38050],{"class":272},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[203,38052,38053],{"class":205,"line":1419},[203,38054,38055],{"class":272},"        # 这里用的是灰度图\n",[203,38057,38058,38060,38063,38065],{"class":205,"line":1701},[203,38059,30903],{"class":262},[203,38061,38062],{"class":213},".block1",[203,38064,259],{"class":209},[203,38066,38067],{"class":213},"nn.Sequential(\n",[203,38069,38070,38073,38075,38077,38079,38081,38083,38085,38087,38089,38091,38093,38095,38097,38099,38101,38103],{"class":205,"line":1706},[203,38071,38072],{"class":213},"            nn.Conv2d(",[203,38074,30914],{"class":5306},[203,38076,259],{"class":209},[203,38078,431],{"class":262},[203,38080,592],{"class":213},[203,38082,30923],{"class":5306},[203,38084,259],{"class":209},[203,38086,417],{"class":262},[203,38088,592],{"class":213},[203,38090,30932],{"class":5306},[203,38092,259],{"class":209},[203,38094,285],{"class":262},[203,38096,592],{"class":213},[203,38098,30941],{"class":5306},[203,38100,259],{"class":209},[203,38102,431],{"class":262},[203,38104,38105],{"class":213},"),\n",[203,38107,38108],{"class":205,"line":1712},[203,38109,38110],{"class":213},"            nn.ReLU(),\n",[203,38112,38113,38115,38117,38119,38121,38123,38125,38127,38129,38131,38133,38135,38137,38139,38141,38143,38145],{"class":205,"line":1717},[203,38114,38072],{"class":213},[203,38116,30914],{"class":5306},[203,38118,259],{"class":209},[203,38120,417],{"class":262},[203,38122,592],{"class":213},[203,38124,30923],{"class":5306},[203,38126,259],{"class":209},[203,38128,417],{"class":262},[203,38130,592],{"class":213},[203,38132,30932],{"class":5306},[203,38134,259],{"class":209},[203,38136,285],{"class":262},[203,38138,592],{"class":213},[203,38140,30941],{"class":5306},[203,38142,259],{"class":209},[203,38144,431],{"class":262},[203,38146,38105],{"class":213},[203,38148,38149],{"class":205,"line":1731},[203,38150,38110],{"class":213},[203,38152,38153,38156,38158,38160,38162,38164,38166,38168,38170,38172,38174,38176,38178],{"class":205,"line":1736},[203,38154,38155],{"class":213},"            nn.MaxPool2d(",[203,38157,30932],{"class":5306},[203,38159,259],{"class":209},[203,38161,291],{"class":262},[203,38163,592],{"class":213},[203,38165,30987],{"class":5306},[203,38167,259],{"class":209},[203,38169,291],{"class":262},[203,38171,592],{"class":213},[203,38173,30941],{"class":5306},[203,38175,259],{"class":209},[203,38177,405],{"class":262},[203,38179,220],{"class":213},[203,38181,38182],{"class":205,"line":1742},[203,38183,38184],{"class":213},"        )\n",[203,38186,38187],{"class":205,"line":1763},[203,38188,38189],{"class":272},"        # 第二层\n",[203,38191,38192,38194,38197,38199],{"class":205,"line":1768},[203,38193,30903],{"class":262},[203,38195,38196],{"class":213},".block2",[203,38198,259],{"class":209},[203,38200,38067],{"class":213},[203,38202,38203,38205,38207,38209,38211,38213,38215,38217,38219,38221,38223,38225,38227,38229,38231,38233,38235],{"class":205,"line":1782},[203,38204,38072],{"class":213},[203,38206,30914],{"class":5306},[203,38208,259],{"class":209},[203,38210,417],{"class":262},[203,38212,592],{"class":213},[203,38214,30923],{"class":5306},[203,38216,259],{"class":209},[203,38218,32128],{"class":262},[203,38220,592],{"class":213},[203,38222,30932],{"class":5306},[203,38224,259],{"class":209},[203,38226,285],{"class":262},[203,38228,592],{"class":213},[203,38230,30941],{"class":5306},[203,38232,259],{"class":209},[203,38234,431],{"class":262},[203,38236,38105],{"class":213},[203,38238,38239],{"class":205,"line":1787},[203,38240,38110],{"class":213},[203,38242,38243,38245,38247,38249,38251,38253,38255,38257,38259,38261,38263,38265,38267,38269,38271,38273,38275],{"class":205,"line":1816},[203,38244,38072],{"class":213},[203,38246,30914],{"class":5306},[203,38248,259],{"class":209},[203,38250,32128],{"class":262},[203,38252,592],{"class":213},[203,38254,30923],{"class":5306},[203,38256,259],{"class":209},[203,38258,32128],{"class":262},[203,38260,592],{"class":213},[203,38262,30932],{"class":5306},[203,38264,259],{"class":209},[203,38266,285],{"class":262},[203,38268,592],{"class":213},[203,38270,30941],{"class":5306},[203,38272,259],{"class":209},[203,38274,431],{"class":262},[203,38276,38105],{"class":213},[203,38278,38279],{"class":205,"line":1821},[203,38280,38110],{"class":213},[203,38282,38283,38285,38287,38289,38291,38293,38295,38297,38299,38301,38303,38305,38307],{"class":205,"line":1838},[203,38284,38155],{"class":213},[203,38286,30932],{"class":5306},[203,38288,259],{"class":209},[203,38290,291],{"class":262},[203,38292,592],{"class":213},[203,38294,30987],{"class":5306},[203,38296,259],{"class":209},[203,38298,291],{"class":262},[203,38300,592],{"class":213},[203,38302,30941],{"class":5306},[203,38304,259],{"class":209},[203,38306,405],{"class":262},[203,38308,220],{"class":213},[203,38310,38311],{"class":205,"line":1843},[203,38312,38184],{"class":213},[203,38314,38315],{"class":205,"line":1848},[203,38316,38317],{"class":272},"        # 第三层\n",[203,38319,38320,38322,38325,38327],{"class":205,"line":1853},[203,38321,30903],{"class":262},[203,38323,38324],{"class":213},".block3",[203,38326,259],{"class":209},[203,38328,38067],{"class":213},[203,38330,38331,38333,38335,38337,38339,38341,38343,38345,38347,38349,38351,38353,38355,38357,38359,38361,38363],{"class":205,"line":1867},[203,38332,38072],{"class":213},[203,38334,30914],{"class":5306},[203,38336,259],{"class":209},[203,38338,32128],{"class":262},[203,38340,592],{"class":213},[203,38342,30923],{"class":5306},[203,38344,259],{"class":209},[203,38346,34928],{"class":262},[203,38348,592],{"class":213},[203,38350,30932],{"class":5306},[203,38352,259],{"class":209},[203,38354,285],{"class":262},[203,38356,592],{"class":213},[203,38358,30941],{"class":5306},[203,38360,259],{"class":209},[203,38362,431],{"class":262},[203,38364,38105],{"class":213},[203,38366,38367],{"class":205,"line":1872},[203,38368,38110],{"class":213},[203,38370,38371,38373,38375,38377,38379,38381,38383,38385,38387,38389,38391,38393,38395,38397,38399,38401,38403],{"class":205,"line":2666},[203,38372,38072],{"class":213},[203,38374,30914],{"class":5306},[203,38376,259],{"class":209},[203,38378,34928],{"class":262},[203,38380,592],{"class":213},[203,38382,30923],{"class":5306},[203,38384,259],{"class":209},[203,38386,34928],{"class":262},[203,38388,592],{"class":213},[203,38390,30932],{"class":5306},[203,38392,259],{"class":209},[203,38394,285],{"class":262},[203,38396,592],{"class":213},[203,38398,30941],{"class":5306},[203,38400,259],{"class":209},[203,38402,431],{"class":262},[203,38404,38105],{"class":213},[203,38406,38407],{"class":205,"line":2680},[203,38408,38110],{"class":213},[203,38410,38411,38413,38415,38417,38419,38421,38423,38425,38427,38429,38431,38433,38435,38437,38439,38441,38443],{"class":205,"line":2688},[203,38412,38072],{"class":213},[203,38414,30914],{"class":5306},[203,38416,259],{"class":209},[203,38418,34928],{"class":262},[203,38420,592],{"class":213},[203,38422,30923],{"class":5306},[203,38424,259],{"class":209},[203,38426,34928],{"class":262},[203,38428,592],{"class":213},[203,38430,30932],{"class":5306},[203,38432,259],{"class":209},[203,38434,285],{"class":262},[203,38436,592],{"class":213},[203,38438,30941],{"class":5306},[203,38440,259],{"class":209},[203,38442,431],{"class":262},[203,38444,38105],{"class":213},[203,38446,38447],{"class":205,"line":2693},[203,38448,38110],{"class":213},[203,38450,38451,38453,38455,38457,38459,38461,38463,38465,38467,38469,38471,38473,38475],{"class":205,"line":2699},[203,38452,38155],{"class":213},[203,38454,30932],{"class":5306},[203,38456,259],{"class":209},[203,38458,291],{"class":262},[203,38460,592],{"class":213},[203,38462,30987],{"class":5306},[203,38464,259],{"class":209},[203,38466,291],{"class":262},[203,38468,592],{"class":213},[203,38470,30941],{"class":5306},[203,38472,259],{"class":209},[203,38474,405],{"class":262},[203,38476,220],{"class":213},[203,38478,38479],{"class":205,"line":2705},[203,38480,38184],{"class":213},[203,38482,38483],{"class":205,"line":2710},[203,38484,38485],{"class":272},"        # 第四层\n",[203,38487,38488,38490,38493,38495],{"class":205,"line":8038},[203,38489,30903],{"class":262},[203,38491,38492],{"class":213},".block4",[203,38494,259],{"class":209},[203,38496,38067],{"class":213},[203,38498,38499,38501,38503,38505,38507,38509,38511,38513,38516,38518,38520,38522,38524,38526,38528,38530,38532],{"class":205,"line":8062},[203,38500,38072],{"class":213},[203,38502,30914],{"class":5306},[203,38504,259],{"class":209},[203,38506,34928],{"class":262},[203,38508,592],{"class":213},[203,38510,30923],{"class":5306},[203,38512,259],{"class":209},[203,38514,38515],{"class":262},"512",[203,38517,592],{"class":213},[203,38519,30932],{"class":5306},[203,38521,259],{"class":209},[203,38523,285],{"class":262},[203,38525,592],{"class":213},[203,38527,30941],{"class":5306},[203,38529,259],{"class":209},[203,38531,431],{"class":262},[203,38533,38105],{"class":213},[203,38535,38536],{"class":205,"line":8067},[203,38537,38110],{"class":213},[203,38539,38540,38542,38544,38546,38548,38550,38552,38554,38556,38558,38560,38562,38564,38566,38568,38570,38572],{"class":205,"line":8073},[203,38541,38072],{"class":213},[203,38543,30914],{"class":5306},[203,38545,259],{"class":209},[203,38547,38515],{"class":262},[203,38549,592],{"class":213},[203,38551,30923],{"class":5306},[203,38553,259],{"class":209},[203,38555,38515],{"class":262},[203,38557,592],{"class":213},[203,38559,30932],{"class":5306},[203,38561,259],{"class":209},[203,38563,285],{"class":262},[203,38565,592],{"class":213},[203,38567,30941],{"class":5306},[203,38569,259],{"class":209},[203,38571,431],{"class":262},[203,38573,38105],{"class":213},[203,38575,38576],{"class":205,"line":8100},[203,38577,38110],{"class":213},[203,38579,38580,38582,38584,38586,38588,38590,38592,38594,38596,38598,38600,38602,38604,38606,38608,38610,38612],{"class":205,"line":8105},[203,38581,38072],{"class":213},[203,38583,30914],{"class":5306},[203,38585,259],{"class":209},[203,38587,38515],{"class":262},[203,38589,592],{"class":213},[203,38591,30923],{"class":5306},[203,38593,259],{"class":209},[203,38595,38515],{"class":262},[203,38597,592],{"class":213},[203,38599,30932],{"class":5306},[203,38601,259],{"class":209},[203,38603,285],{"class":262},[203,38605,592],{"class":213},[203,38607,30941],{"class":5306},[203,38609,259],{"class":209},[203,38611,431],{"class":262},[203,38613,38105],{"class":213},[203,38615,38616],{"class":205,"line":8111},[203,38617,38110],{"class":213},[203,38619,38620,38622,38624,38626,38628,38630,38632,38634,38636,38638,38640,38642,38644],{"class":205,"line":8123},[203,38621,38155],{"class":213},[203,38623,30932],{"class":5306},[203,38625,259],{"class":209},[203,38627,291],{"class":262},[203,38629,592],{"class":213},[203,38631,30987],{"class":5306},[203,38633,259],{"class":209},[203,38635,291],{"class":262},[203,38637,592],{"class":213},[203,38639,30941],{"class":5306},[203,38641,259],{"class":209},[203,38643,405],{"class":262},[203,38645,220],{"class":213},[203,38647,38648],{"class":205,"line":8135},[203,38649,38184],{"class":213},[203,38651,38652],{"class":205,"line":8147},[203,38653,38654],{"class":272},"        # 第五层\n",[203,38656,38657,38659,38662,38664],{"class":205,"line":9806},[203,38658,30903],{"class":262},[203,38660,38661],{"class":213},".block5",[203,38663,259],{"class":209},[203,38665,38067],{"class":213},[203,38667,38668,38670,38672,38674,38676,38678,38680,38682,38684,38686,38688,38690,38692,38694,38696,38698,38700],{"class":205,"line":9831},[203,38669,38072],{"class":213},[203,38671,30914],{"class":5306},[203,38673,259],{"class":209},[203,38675,38515],{"class":262},[203,38677,592],{"class":213},[203,38679,30923],{"class":5306},[203,38681,259],{"class":209},[203,38683,38515],{"class":262},[203,38685,592],{"class":213},[203,38687,30932],{"class":5306},[203,38689,259],{"class":209},[203,38691,285],{"class":262},[203,38693,592],{"class":213},[203,38695,30941],{"class":5306},[203,38697,259],{"class":209},[203,38699,431],{"class":262},[203,38701,38105],{"class":213},[203,38703,38704],{"class":205,"line":9854},[203,38705,38110],{"class":213},[203,38707,38708,38710,38712,38714,38716,38718,38720,38722,38724,38726,38728,38730,38732,38734,38736,38738,38740],{"class":205,"line":9878},[203,38709,38072],{"class":213},[203,38711,30914],{"class":5306},[203,38713,259],{"class":209},[203,38715,38515],{"class":262},[203,38717,592],{"class":213},[203,38719,30923],{"class":5306},[203,38721,259],{"class":209},[203,38723,38515],{"class":262},[203,38725,592],{"class":213},[203,38727,30932],{"class":5306},[203,38729,259],{"class":209},[203,38731,285],{"class":262},[203,38733,592],{"class":213},[203,38735,30941],{"class":5306},[203,38737,259],{"class":209},[203,38739,431],{"class":262},[203,38741,38105],{"class":213},[203,38743,38744],{"class":205,"line":9883},[203,38745,38110],{"class":213},[203,38747,38748,38750,38752,38754,38756,38758,38760,38762,38764,38766,38768,38770,38772,38774,38776,38778,38780],{"class":205,"line":9888},[203,38749,38072],{"class":213},[203,38751,30914],{"class":5306},[203,38753,259],{"class":209},[203,38755,38515],{"class":262},[203,38757,592],{"class":213},[203,38759,30923],{"class":5306},[203,38761,259],{"class":209},[203,38763,38515],{"class":262},[203,38765,592],{"class":213},[203,38767,30932],{"class":5306},[203,38769,259],{"class":209},[203,38771,285],{"class":262},[203,38773,592],{"class":213},[203,38775,30941],{"class":5306},[203,38777,259],{"class":209},[203,38779,431],{"class":262},[203,38781,38105],{"class":213},[203,38783,38784],{"class":205,"line":9893},[203,38785,38110],{"class":213},[203,38787,38788,38790,38792,38794,38796,38798,38800,38802,38804,38806,38808,38810,38812],{"class":205,"line":9902},[203,38789,38155],{"class":213},[203,38791,30932],{"class":5306},[203,38793,259],{"class":209},[203,38795,291],{"class":262},[203,38797,592],{"class":213},[203,38799,30987],{"class":5306},[203,38801,259],{"class":209},[203,38803,291],{"class":262},[203,38805,592],{"class":213},[203,38807,30941],{"class":5306},[203,38809,259],{"class":209},[203,38811,405],{"class":262},[203,38813,220],{"class":213},[203,38815,38816],{"class":205,"line":9907},[203,38817,38184],{"class":213},[203,38819,38820],{"class":205,"line":9913},[203,38821,38822],{"class":272},"        # 全连接层\n",[203,38824,38825,38827,38830,38832],{"class":205,"line":9934},[203,38826,30903],{"class":262},[203,38828,38829],{"class":213},".block6",[203,38831,259],{"class":209},[203,38833,38067],{"class":213},[203,38835,38836],{"class":205,"line":9940},[203,38837,38838],{"class":272},"            # 平展操作\n",[203,38840,38841],{"class":205,"line":9954},[203,38842,38843],{"class":272},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[203,38845,38846],{"class":205,"line":9960},[203,38847,38848],{"class":213},"            nn.Flatten(),\n",[203,38850,38851,38854,38856,38858,38860,38862,38864,38866,38868],{"class":205,"line":9987},[203,38852,38853],{"class":213},"            nn.Linear(",[203,38855,583],{"class":262},[203,38857,669],{"class":209},[203,38859,583],{"class":262},[203,38861,669],{"class":209},[203,38863,38515],{"class":262},[203,38865,592],{"class":213},[203,38867,34928],{"class":262},[203,38869,38105],{"class":213},[203,38871,38872],{"class":205,"line":9996},[203,38873,38110],{"class":213},[203,38875,38876,38878,38880,38882,38884],{"class":205,"line":10002},[203,38877,38853],{"class":213},[203,38879,34928],{"class":262},[203,38881,592],{"class":213},[203,38883,32128],{"class":262},[203,38885,38105],{"class":213},[203,38887,38888],{"class":205,"line":10010},[203,38889,38110],{"class":213},[203,38891,38892,38894,38896,38898,38900],{"class":205,"line":10015},[203,38893,38853],{"class":213},[203,38895,32128],{"class":262},[203,38897,592],{"class":213},[203,38899,660],{"class":262},[203,38901,220],{"class":213},[203,38903,38904],{"class":205,"line":16694},[203,38905,38184],{"class":213},[203,38907,38908],{"class":205,"line":16700},[203,38909,2489],{"emptyLinePlaceholder":131},[203,38911,38912],{"class":205,"line":16723},[203,38913,38914],{"class":272},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[203,38916,38917],{"class":205,"line":16729},[203,38918,38919],{"class":272},"        # 循环遍历模型\n",[203,38921,38922,38924,38927,38929,38932],{"class":205,"line":16752},[203,38923,3492],{"class":209},[203,38925,38926],{"class":213}," m ",[203,38928,26101],{"class":209},[203,38930,38931],{"class":262}," self",[203,38933,38934],{"class":213},".modules():\n",[203,38936,38937],{"class":205,"line":16766},[203,38938,38939],{"class":272},"            # print(m)\n",[203,38941,38942,38944,38947],{"class":205,"line":16786},[203,38943,4731],{"class":209},[203,38945,38946],{"class":262}," isinstance",[203,38948,38949],{"class":213},"(m,nn.Conv2d):\n",[203,38951,38952],{"class":205,"line":16792},[203,38953,38954],{"class":272},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[203,38956,38957,38960,38963,38965,38968],{"class":205,"line":16803},[203,38958,38959],{"class":213},"                nn.init.kaiming_normal_(m.weight,",[203,38961,38962],{"class":5306},"nonlinearity",[203,38964,259],{"class":209},[203,38966,38967],{"class":318},"'relu'",[203,38969,220],{"class":213},[203,38971,38972],{"class":205,"line":16826},[203,38973,38974],{"class":272},"                # 判断b参数是否存在\n",[203,38976,38977,38980,38983,38986,38989,38992],{"class":205,"line":16848},[203,38978,38979],{"class":209},"                if",[203,38981,38982],{"class":213}," m.bias ",[203,38984,38985],{"class":209},"is",[203,38987,38988],{"class":209}," not",[203,38990,38991],{"class":262}," None",[203,38993,3828],{"class":213},[203,38995,38996],{"class":205,"line":16853},[203,38997,38998],{"class":272},"                    # 如果参数不存在的化初始化b=0\n",[203,39000,39001,39004,39006],{"class":205,"line":16859},[203,39002,39003],{"class":213},"                    nn.init.constant_(m.bias,",[203,39005,405],{"class":262},[203,39007,220],{"class":213},[203,39009,39010],{"class":205,"line":16873},[203,39011,39012],{"class":272},"            # 全连接层初始化\n",[203,39014,39015,39018,39020],{"class":205,"line":16886},[203,39016,39017],{"class":209},"            elif",[203,39019,38946],{"class":262},[203,39021,39022],{"class":213},"(m,nn.Linear):\n",[203,39024,39025],{"class":205,"line":16891},[203,39026,39027],{"class":272},"                # 这个初始化方法是利用的是正太分布的方式\n",[203,39029,39030],{"class":205,"line":16905},[203,39031,39032],{"class":272},"                # 均值为0，方差为0.01\n",[203,39034,39035,39038,39040,39042,39045],{"class":205,"line":16910},[203,39036,39037],{"class":213},"                nn.init.normal_(m.weight,",[203,39039,405],{"class":262},[203,39041,592],{"class":213},[203,39043,39044],{"class":262},"0.01",[203,39046,220],{"class":213},[203,39048,39049],{"class":205,"line":16916},[203,39050,39051],{"class":272},"                # 初始化b参数\n",[203,39053,39054,39056,39058,39060,39062,39064],{"class":205,"line":16921},[203,39055,38979],{"class":209},[203,39057,38982],{"class":213},[203,39059,38985],{"class":209},[203,39061,38988],{"class":209},[203,39063,38991],{"class":262},[203,39065,3828],{"class":213},[203,39067,39068,39070,39072],{"class":205,"line":16935},[203,39069,39003],{"class":213},[203,39071,405],{"class":262},[203,39073,220],{"class":213},[203,39075,39076],{"class":205,"line":16940},[203,39077,2489],{"emptyLinePlaceholder":131},[203,39079,39080],{"class":205,"line":16945},[203,39081,35223],{"class":272},[203,39083,39084,39086,39088],{"class":205,"line":16959},[203,39085,30859],{"class":209},[203,39087,31151],{"class":2052},[203,39089,31154],{"class":213},[203,39091,39092,39094,39096,39098],{"class":205,"line":16971},[203,39093,31159],{"class":213},[203,39095,259],{"class":209},[203,39097,30881],{"class":262},[203,39099,39100],{"class":213},".block1(x)\n",[203,39102,39103,39105,39107,39109],{"class":205,"line":16976},[203,39104,31159],{"class":213},[203,39106,259],{"class":209},[203,39108,30881],{"class":262},[203,39110,39111],{"class":213},".block2(x)\n",[203,39113,39114,39116,39118,39120],{"class":205,"line":16989},[203,39115,31159],{"class":213},[203,39117,259],{"class":209},[203,39119,30881],{"class":262},[203,39121,39122],{"class":213},".block3(x)\n",[203,39124,39125,39127,39129,39131],{"class":205,"line":16994},[203,39126,31159],{"class":213},[203,39128,259],{"class":209},[203,39130,30881],{"class":262},[203,39132,39133],{"class":213},".block4(x)\n",[203,39135,39136,39138,39140,39142],{"class":205,"line":16999},[203,39137,31159],{"class":213},[203,39139,259],{"class":209},[203,39141,30881],{"class":262},[203,39143,39144],{"class":213},".block5(x)\n",[203,39146,39147,39149,39151,39153],{"class":205,"line":17004},[203,39148,31159],{"class":213},[203,39150,259],{"class":209},[203,39152,30881],{"class":262},[203,39154,39155],{"class":213},".block6(x)\n",[203,39157,39158,39160],{"class":205,"line":17017},[203,39159,14842],{"class":209},[203,39161,31267],{"class":213},[203,39163,39164],{"class":205,"line":17022},[203,39165,2489],{"emptyLinePlaceholder":131},[203,39167,39168],{"class":205,"line":32691},[203,39169,39170],{"class":272},"# 验证模型\n",[203,39172,39173,39175,39177,39179,39182],{"class":205,"line":32697},[203,39174,1620],{"class":209},[203,39176,31278],{"class":262},[203,39178,3038],{"class":209},[203,39180,39181],{"class":318},"'__main__'",[203,39183,3828],{"class":213},[203,39185,39186,39188,39190,39192,39194,39196,39198,39200,39202],{"class":205,"line":32703},[203,39187,31295],{"class":213},[203,39189,259],{"class":209},[203,39191,30509],{"class":213},[203,39193,31302],{"class":318},[203,39195,1793],{"class":209},[203,39197,31307],{"class":213},[203,39199,1790],{"class":209},[203,39201,30534],{"class":318},[203,39203,220],{"class":213},[203,39205,39206,39208],{"class":205,"line":32709},[203,39207,31357],{"class":262},[203,39209,30543],{"class":213},[203,39211,39212,39214,39216],{"class":205,"line":32715},[203,39213,31347],{"class":213},[203,39215,259],{"class":209},[203,39217,39218],{"class":213},"VGG16().to(device)\n",[203,39220,39221,39223,39225,39227,39229,39231,39233,39235],{"class":205,"line":32726},[203,39222,31357],{"class":262},[203,39224,31360],{"class":213},[203,39226,431],{"class":262},[203,39228,592],{"class":213},[203,39230,31559],{"class":262},[203,39232,592],{"class":213},[203,39234,31559],{"class":262},[203,39236,31373],{"class":213},[157,39238,39239],{"start":124},[160,39240,39241],{},"训练代码",[19,39243,39244],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39246,39247],{},"解决方式:",[19,39249,39250],{},"①权重初始化",[194,39252,39254],{"className":30436,"code":39253,"language":30438,"meta":27,"style":27},"# 权重初始化,保证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",[200,39255,39256,39261,39266,39278,39283,39291,39296,39309,39314,39328,39333,39342,39347,39356,39361,39366,39379,39384,39398],{"__ignoreMap":27},[203,39257,39258],{"class":205,"line":206},[203,39259,39260],{"class":272},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[203,39262,39263],{"class":205,"line":124},[203,39264,39265],{"class":272},"# 循环遍历模型\n",[203,39267,39268,39270,39272,39274,39276],{"class":205,"line":1269},[203,39269,3114],{"class":209},[203,39271,38926],{"class":213},[203,39273,26101],{"class":209},[203,39275,38931],{"class":262},[203,39277,38934],{"class":213},[203,39279,39280],{"class":205,"line":1284},[203,39281,39282],{"class":272},"    # print(m)\n",[203,39284,39285,39287,39289],{"class":205,"line":1290},[203,39286,3190],{"class":209},[203,39288,38946],{"class":262},[203,39290,38949],{"class":213},[203,39292,39293],{"class":205,"line":1304},[203,39294,39295],{"class":272},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[203,39297,39298,39301,39303,39305,39307],{"class":205,"line":1310},[203,39299,39300],{"class":213},"        nn.init.kaiming_normal_(m.weight,",[203,39302,38962],{"class":5306},[203,39304,259],{"class":209},[203,39306,38967],{"class":318},[203,39308,220],{"class":213},[203,39310,39311],{"class":205,"line":1401},[203,39312,39313],{"class":272},"        # 判断b参数是否存在\n",[203,39315,39316,39318,39320,39322,39324,39326],{"class":205,"line":1407},[203,39317,2586],{"class":209},[203,39319,38982],{"class":213},[203,39321,38985],{"class":209},[203,39323,38988],{"class":209},[203,39325,38991],{"class":262},[203,39327,3828],{"class":213},[203,39329,39330],{"class":205,"line":1419},[203,39331,39332],{"class":272},"            # 如果参数不存在的化初始化b=0\n",[203,39334,39335,39338,39340],{"class":205,"line":1701},[203,39336,39337],{"class":213},"            nn.init.constant_(m.bias,",[203,39339,405],{"class":262},[203,39341,220],{"class":213},[203,39343,39344],{"class":205,"line":1706},[203,39345,39346],{"class":272},"    # 全连接层初始化\n",[203,39348,39349,39352,39354],{"class":205,"line":1712},[203,39350,39351],{"class":209},"    elif",[203,39353,38946],{"class":262},[203,39355,39022],{"class":213},[203,39357,39358],{"class":205,"line":1717},[203,39359,39360],{"class":272},"        # 这个初始化方法是利用的是正太分布的方式\n",[203,39362,39363],{"class":205,"line":1731},[203,39364,39365],{"class":272},"        # 均值为0，方差为0.01\n",[203,39367,39368,39371,39373,39375,39377],{"class":205,"line":1736},[203,39369,39370],{"class":213},"        nn.init.normal_(m.weight,",[203,39372,405],{"class":262},[203,39374,592],{"class":213},[203,39376,39044],{"class":262},[203,39378,220],{"class":213},[203,39380,39381],{"class":205,"line":1742},[203,39382,39383],{"class":272},"        # 初始化b参数\n",[203,39385,39386,39388,39390,39392,39394,39396],{"class":205,"line":1763},[203,39387,2586],{"class":209},[203,39389,38982],{"class":213},[203,39391,38985],{"class":209},[203,39393,38988],{"class":209},[203,39395,38991],{"class":262},[203,39397,3828],{"class":213},[203,39399,39400,39402,39404],{"class":205,"line":1768},[203,39401,39337],{"class":213},[203,39403,405],{"class":262},[203,39405,220],{"class":213},[19,39407,39408],{},"②尽可能地增加批次",[19,39410,39411],{},"训练完整代码：",[194,39413,39414],{"className":30436,"code":37957,"language":30438,"meta":27,"style":27},[200,39415,39416,39422,39432,39442,39452,39456,39472,39480,39498,39502,39506,39516,39552,39556,39592,39596,39624,39628,39632,39642,39678,39682,39718,39722,39750,39754,39758,39768,39804,39808,39844,39848,39884,39888,39916,39920,39924,39934,39970,39974,40010,40014,40050,40054,40082,40086,40090,40100,40136,40140,40176,40180,40216,40220,40248,40252,40256,40266,40270,40274,40278,40298,40302,40314,40318,40330,40334,40338,40342,40346,40358,40362,40370,40374,40386,40390,40404,40408,40416,40420,40428,40432,40436,40448,40452,40466,40474,40478,40482,40490,40500,40510,40520,40530,40540,40550,40556,40560,40564,40576,40596,40602,40610],{"__ignoreMap":27},[203,39417,39418,39420],{"class":205,"line":206},[203,39419,30450],{"class":209},[203,39421,30453],{"class":213},[203,39423,39424,39426,39428,39430],{"class":205,"line":124},[203,39425,30795],{"class":209},[203,39427,37972],{"class":213},[203,39429,30450],{"class":209},[203,39431,37977],{"class":213},[203,39433,39434,39436,39438,39440],{"class":205,"line":1269},[203,39435,30795],{"class":209},[203,39437,30798],{"class":213},[203,39439,30450],{"class":209},[203,39441,30803],{"class":213},[203,39443,39444,39446,39448,39450],{"class":205,"line":1284},[203,39445,30795],{"class":209},[203,39447,30815],{"class":213},[203,39449,30450],{"class":209},[203,39451,30820],{"class":213},[203,39453,39454],{"class":205,"line":1290},[203,39455,2489],{"emptyLinePlaceholder":131},[203,39457,39458,39460,39462,39464,39466,39468,39470],{"class":205,"line":1304},[203,39459,14784],{"class":209},[203,39461,38008],{"class":2052},[203,39463,214],{"class":213},[203,39465,30836],{"class":2052},[203,39467,772],{"class":213},[203,39469,30841],{"class":2052},[203,39471,30844],{"class":213},[203,39473,39474,39476,39478],{"class":205,"line":1310},[203,39475,30859],{"class":209},[203,39477,30862],{"class":262},[203,39479,30865],{"class":213},[203,39481,39482,39484,39486,39488,39490,39492,39494,39496],{"class":205,"line":1401},[203,39483,30875],{"class":262},[203,39485,214],{"class":213},[203,39487,38035],{"class":262},[203,39489,12525],{"class":213},[203,39491,30881],{"class":262},[203,39493,30884],{"class":213},[203,39495,30887],{"class":262},[203,39497,2065],{"class":213},[203,39499,39500],{"class":205,"line":1407},[203,39501,38050],{"class":272},[203,39503,39504],{"class":205,"line":1419},[203,39505,38055],{"class":272},[203,39507,39508,39510,39512,39514],{"class":205,"line":1701},[203,39509,30903],{"class":262},[203,39511,38062],{"class":213},[203,39513,259],{"class":209},[203,39515,38067],{"class":213},[203,39517,39518,39520,39522,39524,39526,39528,39530,39532,39534,39536,39538,39540,39542,39544,39546,39548,39550],{"class":205,"line":1706},[203,39519,38072],{"class":213},[203,39521,30914],{"class":5306},[203,39523,259],{"class":209},[203,39525,431],{"class":262},[203,39527,592],{"class":213},[203,39529,30923],{"class":5306},[203,39531,259],{"class":209},[203,39533,417],{"class":262},[203,39535,592],{"class":213},[203,39537,30932],{"class":5306},[203,39539,259],{"class":209},[203,39541,285],{"class":262},[203,39543,592],{"class":213},[203,39545,30941],{"class":5306},[203,39547,259],{"class":209},[203,39549,431],{"class":262},[203,39551,38105],{"class":213},[203,39553,39554],{"class":205,"line":1712},[203,39555,38110],{"class":213},[203,39557,39558,39560,39562,39564,39566,39568,39570,39572,39574,39576,39578,39580,39582,39584,39586,39588,39590],{"class":205,"line":1717},[203,39559,38072],{"class":213},[203,39561,30914],{"class":5306},[203,39563,259],{"class":209},[203,39565,417],{"class":262},[203,39567,592],{"class":213},[203,39569,30923],{"class":5306},[203,39571,259],{"class":209},[203,39573,417],{"class":262},[203,39575,592],{"class":213},[203,39577,30932],{"class":5306},[203,39579,259],{"class":209},[203,39581,285],{"class":262},[203,39583,592],{"class":213},[203,39585,30941],{"class":5306},[203,39587,259],{"class":209},[203,39589,431],{"class":262},[203,39591,38105],{"class":213},[203,39593,39594],{"class":205,"line":1731},[203,39595,38110],{"class":213},[203,39597,39598,39600,39602,39604,39606,39608,39610,39612,39614,39616,39618,39620,39622],{"class":205,"line":1736},[203,39599,38155],{"class":213},[203,39601,30932],{"class":5306},[203,39603,259],{"class":209},[203,39605,291],{"class":262},[203,39607,592],{"class":213},[203,39609,30987],{"class":5306},[203,39611,259],{"class":209},[203,39613,291],{"class":262},[203,39615,592],{"class":213},[203,39617,30941],{"class":5306},[203,39619,259],{"class":209},[203,39621,405],{"class":262},[203,39623,220],{"class":213},[203,39625,39626],{"class":205,"line":1742},[203,39627,38184],{"class":213},[203,39629,39630],{"class":205,"line":1763},[203,39631,38189],{"class":272},[203,39633,39634,39636,39638,39640],{"class":205,"line":1768},[203,39635,30903],{"class":262},[203,39637,38196],{"class":213},[203,39639,259],{"class":209},[203,39641,38067],{"class":213},[203,39643,39644,39646,39648,39650,39652,39654,39656,39658,39660,39662,39664,39666,39668,39670,39672,39674,39676],{"class":205,"line":1782},[203,39645,38072],{"class":213},[203,39647,30914],{"class":5306},[203,39649,259],{"class":209},[203,39651,417],{"class":262},[203,39653,592],{"class":213},[203,39655,30923],{"class":5306},[203,39657,259],{"class":209},[203,39659,32128],{"class":262},[203,39661,592],{"class":213},[203,39663,30932],{"class":5306},[203,39665,259],{"class":209},[203,39667,285],{"class":262},[203,39669,592],{"class":213},[203,39671,30941],{"class":5306},[203,39673,259],{"class":209},[203,39675,431],{"class":262},[203,39677,38105],{"class":213},[203,39679,39680],{"class":205,"line":1787},[203,39681,38110],{"class":213},[203,39683,39684,39686,39688,39690,39692,39694,39696,39698,39700,39702,39704,39706,39708,39710,39712,39714,39716],{"class":205,"line":1816},[203,39685,38072],{"class":213},[203,39687,30914],{"class":5306},[203,39689,259],{"class":209},[203,39691,32128],{"class":262},[203,39693,592],{"class":213},[203,39695,30923],{"class":5306},[203,39697,259],{"class":209},[203,39699,32128],{"class":262},[203,39701,592],{"class":213},[203,39703,30932],{"class":5306},[203,39705,259],{"class":209},[203,39707,285],{"class":262},[203,39709,592],{"class":213},[203,39711,30941],{"class":5306},[203,39713,259],{"class":209},[203,39715,431],{"class":262},[203,39717,38105],{"class":213},[203,39719,39720],{"class":205,"line":1821},[203,39721,38110],{"class":213},[203,39723,39724,39726,39728,39730,39732,39734,39736,39738,39740,39742,39744,39746,39748],{"class":205,"line":1838},[203,39725,38155],{"class":213},[203,39727,30932],{"class":5306},[203,39729,259],{"class":209},[203,39731,291],{"class":262},[203,39733,592],{"class":213},[203,39735,30987],{"class":5306},[203,39737,259],{"class":209},[203,39739,291],{"class":262},[203,39741,592],{"class":213},[203,39743,30941],{"class":5306},[203,39745,259],{"class":209},[203,39747,405],{"class":262},[203,39749,220],{"class":213},[203,39751,39752],{"class":205,"line":1843},[203,39753,38184],{"class":213},[203,39755,39756],{"class":205,"line":1848},[203,39757,38317],{"class":272},[203,39759,39760,39762,39764,39766],{"class":205,"line":1853},[203,39761,30903],{"class":262},[203,39763,38324],{"class":213},[203,39765,259],{"class":209},[203,39767,38067],{"class":213},[203,39769,39770,39772,39774,39776,39778,39780,39782,39784,39786,39788,39790,39792,39794,39796,39798,39800,39802],{"class":205,"line":1867},[203,39771,38072],{"class":213},[203,39773,30914],{"class":5306},[203,39775,259],{"class":209},[203,39777,32128],{"class":262},[203,39779,592],{"class":213},[203,39781,30923],{"class":5306},[203,39783,259],{"class":209},[203,39785,34928],{"class":262},[203,39787,592],{"class":213},[203,39789,30932],{"class":5306},[203,39791,259],{"class":209},[203,39793,285],{"class":262},[203,39795,592],{"class":213},[203,39797,30941],{"class":5306},[203,39799,259],{"class":209},[203,39801,431],{"class":262},[203,39803,38105],{"class":213},[203,39805,39806],{"class":205,"line":1872},[203,39807,38110],{"class":213},[203,39809,39810,39812,39814,39816,39818,39820,39822,39824,39826,39828,39830,39832,39834,39836,39838,39840,39842],{"class":205,"line":2666},[203,39811,38072],{"class":213},[203,39813,30914],{"class":5306},[203,39815,259],{"class":209},[203,39817,34928],{"class":262},[203,39819,592],{"class":213},[203,39821,30923],{"class":5306},[203,39823,259],{"class":209},[203,39825,34928],{"class":262},[203,39827,592],{"class":213},[203,39829,30932],{"class":5306},[203,39831,259],{"class":209},[203,39833,285],{"class":262},[203,39835,592],{"class":213},[203,39837,30941],{"class":5306},[203,39839,259],{"class":209},[203,39841,431],{"class":262},[203,39843,38105],{"class":213},[203,39845,39846],{"class":205,"line":2680},[203,39847,38110],{"class":213},[203,39849,39850,39852,39854,39856,39858,39860,39862,39864,39866,39868,39870,39872,39874,39876,39878,39880,39882],{"class":205,"line":2688},[203,39851,38072],{"class":213},[203,39853,30914],{"class":5306},[203,39855,259],{"class":209},[203,39857,34928],{"class":262},[203,39859,592],{"class":213},[203,39861,30923],{"class":5306},[203,39863,259],{"class":209},[203,39865,34928],{"class":262},[203,39867,592],{"class":213},[203,39869,30932],{"class":5306},[203,39871,259],{"class":209},[203,39873,285],{"class":262},[203,39875,592],{"class":213},[203,39877,30941],{"class":5306},[203,39879,259],{"class":209},[203,39881,431],{"class":262},[203,39883,38105],{"class":213},[203,39885,39886],{"class":205,"line":2693},[203,39887,38110],{"class":213},[203,39889,39890,39892,39894,39896,39898,39900,39902,39904,39906,39908,39910,39912,39914],{"class":205,"line":2699},[203,39891,38155],{"class":213},[203,39893,30932],{"class":5306},[203,39895,259],{"class":209},[203,39897,291],{"class":262},[203,39899,592],{"class":213},[203,39901,30987],{"class":5306},[203,39903,259],{"class":209},[203,39905,291],{"class":262},[203,39907,592],{"class":213},[203,39909,30941],{"class":5306},[203,39911,259],{"class":209},[203,39913,405],{"class":262},[203,39915,220],{"class":213},[203,39917,39918],{"class":205,"line":2705},[203,39919,38184],{"class":213},[203,39921,39922],{"class":205,"line":2710},[203,39923,38485],{"class":272},[203,39925,39926,39928,39930,39932],{"class":205,"line":8038},[203,39927,30903],{"class":262},[203,39929,38492],{"class":213},[203,39931,259],{"class":209},[203,39933,38067],{"class":213},[203,39935,39936,39938,39940,39942,39944,39946,39948,39950,39952,39954,39956,39958,39960,39962,39964,39966,39968],{"class":205,"line":8062},[203,39937,38072],{"class":213},[203,39939,30914],{"class":5306},[203,39941,259],{"class":209},[203,39943,34928],{"class":262},[203,39945,592],{"class":213},[203,39947,30923],{"class":5306},[203,39949,259],{"class":209},[203,39951,38515],{"class":262},[203,39953,592],{"class":213},[203,39955,30932],{"class":5306},[203,39957,259],{"class":209},[203,39959,285],{"class":262},[203,39961,592],{"class":213},[203,39963,30941],{"class":5306},[203,39965,259],{"class":209},[203,39967,431],{"class":262},[203,39969,38105],{"class":213},[203,39971,39972],{"class":205,"line":8067},[203,39973,38110],{"class":213},[203,39975,39976,39978,39980,39982,39984,39986,39988,39990,39992,39994,39996,39998,40000,40002,40004,40006,40008],{"class":205,"line":8073},[203,39977,38072],{"class":213},[203,39979,30914],{"class":5306},[203,39981,259],{"class":209},[203,39983,38515],{"class":262},[203,39985,592],{"class":213},[203,39987,30923],{"class":5306},[203,39989,259],{"class":209},[203,39991,38515],{"class":262},[203,39993,592],{"class":213},[203,39995,30932],{"class":5306},[203,39997,259],{"class":209},[203,39999,285],{"class":262},[203,40001,592],{"class":213},[203,40003,30941],{"class":5306},[203,40005,259],{"class":209},[203,40007,431],{"class":262},[203,40009,38105],{"class":213},[203,40011,40012],{"class":205,"line":8100},[203,40013,38110],{"class":213},[203,40015,40016,40018,40020,40022,40024,40026,40028,40030,40032,40034,40036,40038,40040,40042,40044,40046,40048],{"class":205,"line":8105},[203,40017,38072],{"class":213},[203,40019,30914],{"class":5306},[203,40021,259],{"class":209},[203,40023,38515],{"class":262},[203,40025,592],{"class":213},[203,40027,30923],{"class":5306},[203,40029,259],{"class":209},[203,40031,38515],{"class":262},[203,40033,592],{"class":213},[203,40035,30932],{"class":5306},[203,40037,259],{"class":209},[203,40039,285],{"class":262},[203,40041,592],{"class":213},[203,40043,30941],{"class":5306},[203,40045,259],{"class":209},[203,40047,431],{"class":262},[203,40049,38105],{"class":213},[203,40051,40052],{"class":205,"line":8111},[203,40053,38110],{"class":213},[203,40055,40056,40058,40060,40062,40064,40066,40068,40070,40072,40074,40076,40078,40080],{"class":205,"line":8123},[203,40057,38155],{"class":213},[203,40059,30932],{"class":5306},[203,40061,259],{"class":209},[203,40063,291],{"class":262},[203,40065,592],{"class":213},[203,40067,30987],{"class":5306},[203,40069,259],{"class":209},[203,40071,291],{"class":262},[203,40073,592],{"class":213},[203,40075,30941],{"class":5306},[203,40077,259],{"class":209},[203,40079,405],{"class":262},[203,40081,220],{"class":213},[203,40083,40084],{"class":205,"line":8135},[203,40085,38184],{"class":213},[203,40087,40088],{"class":205,"line":8147},[203,40089,38654],{"class":272},[203,40091,40092,40094,40096,40098],{"class":205,"line":9806},[203,40093,30903],{"class":262},[203,40095,38661],{"class":213},[203,40097,259],{"class":209},[203,40099,38067],{"class":213},[203,40101,40102,40104,40106,40108,40110,40112,40114,40116,40118,40120,40122,40124,40126,40128,40130,40132,40134],{"class":205,"line":9831},[203,40103,38072],{"class":213},[203,40105,30914],{"class":5306},[203,40107,259],{"class":209},[203,40109,38515],{"class":262},[203,40111,592],{"class":213},[203,40113,30923],{"class":5306},[203,40115,259],{"class":209},[203,40117,38515],{"class":262},[203,40119,592],{"class":213},[203,40121,30932],{"class":5306},[203,40123,259],{"class":209},[203,40125,285],{"class":262},[203,40127,592],{"class":213},[203,40129,30941],{"class":5306},[203,40131,259],{"class":209},[203,40133,431],{"class":262},[203,40135,38105],{"class":213},[203,40137,40138],{"class":205,"line":9854},[203,40139,38110],{"class":213},[203,40141,40142,40144,40146,40148,40150,40152,40154,40156,40158,40160,40162,40164,40166,40168,40170,40172,40174],{"class":205,"line":9878},[203,40143,38072],{"class":213},[203,40145,30914],{"class":5306},[203,40147,259],{"class":209},[203,40149,38515],{"class":262},[203,40151,592],{"class":213},[203,40153,30923],{"class":5306},[203,40155,259],{"class":209},[203,40157,38515],{"class":262},[203,40159,592],{"class":213},[203,40161,30932],{"class":5306},[203,40163,259],{"class":209},[203,40165,285],{"class":262},[203,40167,592],{"class":213},[203,40169,30941],{"class":5306},[203,40171,259],{"class":209},[203,40173,431],{"class":262},[203,40175,38105],{"class":213},[203,40177,40178],{"class":205,"line":9883},[203,40179,38110],{"class":213},[203,40181,40182,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206,40208,40210,40212,40214],{"class":205,"line":9888},[203,40183,38072],{"class":213},[203,40185,30914],{"class":5306},[203,40187,259],{"class":209},[203,40189,38515],{"class":262},[203,40191,592],{"class":213},[203,40193,30923],{"class":5306},[203,40195,259],{"class":209},[203,40197,38515],{"class":262},[203,40199,592],{"class":213},[203,40201,30932],{"class":5306},[203,40203,259],{"class":209},[203,40205,285],{"class":262},[203,40207,592],{"class":213},[203,40209,30941],{"class":5306},[203,40211,259],{"class":209},[203,40213,431],{"class":262},[203,40215,38105],{"class":213},[203,40217,40218],{"class":205,"line":9893},[203,40219,38110],{"class":213},[203,40221,40222,40224,40226,40228,40230,40232,40234,40236,40238,40240,40242,40244,40246],{"class":205,"line":9902},[203,40223,38155],{"class":213},[203,40225,30932],{"class":5306},[203,40227,259],{"class":209},[203,40229,291],{"class":262},[203,40231,592],{"class":213},[203,40233,30987],{"class":5306},[203,40235,259],{"class":209},[203,40237,291],{"class":262},[203,40239,592],{"class":213},[203,40241,30941],{"class":5306},[203,40243,259],{"class":209},[203,40245,405],{"class":262},[203,40247,220],{"class":213},[203,40249,40250],{"class":205,"line":9907},[203,40251,38184],{"class":213},[203,40253,40254],{"class":205,"line":9913},[203,40255,38822],{"class":272},[203,40257,40258,40260,40262,40264],{"class":205,"line":9934},[203,40259,30903],{"class":262},[203,40261,38829],{"class":213},[203,40263,259],{"class":209},[203,40265,38067],{"class":213},[203,40267,40268],{"class":205,"line":9940},[203,40269,38838],{"class":272},[203,40271,40272],{"class":205,"line":9954},[203,40273,38843],{"class":272},[203,40275,40276],{"class":205,"line":9960},[203,40277,38848],{"class":213},[203,40279,40280,40282,40284,40286,40288,40290,40292,40294,40296],{"class":205,"line":9987},[203,40281,38853],{"class":213},[203,40283,583],{"class":262},[203,40285,669],{"class":209},[203,40287,583],{"class":262},[203,40289,669],{"class":209},[203,40291,38515],{"class":262},[203,40293,592],{"class":213},[203,40295,34928],{"class":262},[203,40297,38105],{"class":213},[203,40299,40300],{"class":205,"line":9996},[203,40301,38110],{"class":213},[203,40303,40304,40306,40308,40310,40312],{"class":205,"line":10002},[203,40305,38853],{"class":213},[203,40307,34928],{"class":262},[203,40309,592],{"class":213},[203,40311,32128],{"class":262},[203,40313,38105],{"class":213},[203,40315,40316],{"class":205,"line":10010},[203,40317,38110],{"class":213},[203,40319,40320,40322,40324,40326,40328],{"class":205,"line":10015},[203,40321,38853],{"class":213},[203,40323,32128],{"class":262},[203,40325,592],{"class":213},[203,40327,660],{"class":262},[203,40329,220],{"class":213},[203,40331,40332],{"class":205,"line":16694},[203,40333,38184],{"class":213},[203,40335,40336],{"class":205,"line":16700},[203,40337,2489],{"emptyLinePlaceholder":131},[203,40339,40340],{"class":205,"line":16723},[203,40341,38914],{"class":272},[203,40343,40344],{"class":205,"line":16729},[203,40345,38919],{"class":272},[203,40347,40348,40350,40352,40354,40356],{"class":205,"line":16752},[203,40349,3492],{"class":209},[203,40351,38926],{"class":213},[203,40353,26101],{"class":209},[203,40355,38931],{"class":262},[203,40357,38934],{"class":213},[203,40359,40360],{"class":205,"line":16766},[203,40361,38939],{"class":272},[203,40363,40364,40366,40368],{"class":205,"line":16786},[203,40365,4731],{"class":209},[203,40367,38946],{"class":262},[203,40369,38949],{"class":213},[203,40371,40372],{"class":205,"line":16792},[203,40373,38954],{"class":272},[203,40375,40376,40378,40380,40382,40384],{"class":205,"line":16803},[203,40377,38959],{"class":213},[203,40379,38962],{"class":5306},[203,40381,259],{"class":209},[203,40383,38967],{"class":318},[203,40385,220],{"class":213},[203,40387,40388],{"class":205,"line":16826},[203,40389,38974],{"class":272},[203,40391,40392,40394,40396,40398,40400,40402],{"class":205,"line":16848},[203,40393,38979],{"class":209},[203,40395,38982],{"class":213},[203,40397,38985],{"class":209},[203,40399,38988],{"class":209},[203,40401,38991],{"class":262},[203,40403,3828],{"class":213},[203,40405,40406],{"class":205,"line":16853},[203,40407,38998],{"class":272},[203,40409,40410,40412,40414],{"class":205,"line":16859},[203,40411,39003],{"class":213},[203,40413,405],{"class":262},[203,40415,220],{"class":213},[203,40417,40418],{"class":205,"line":16873},[203,40419,39012],{"class":272},[203,40421,40422,40424,40426],{"class":205,"line":16886},[203,40423,39017],{"class":209},[203,40425,38946],{"class":262},[203,40427,39022],{"class":213},[203,40429,40430],{"class":205,"line":16891},[203,40431,39027],{"class":272},[203,40433,40434],{"class":205,"line":16905},[203,40435,39032],{"class":272},[203,40437,40438,40440,40442,40444,40446],{"class":205,"line":16910},[203,40439,39037],{"class":213},[203,40441,405],{"class":262},[203,40443,592],{"class":213},[203,40445,39044],{"class":262},[203,40447,220],{"class":213},[203,40449,40450],{"class":205,"line":16916},[203,40451,39051],{"class":272},[203,40453,40454,40456,40458,40460,40462,40464],{"class":205,"line":16921},[203,40455,38979],{"class":209},[203,40457,38982],{"class":213},[203,40459,38985],{"class":209},[203,40461,38988],{"class":209},[203,40463,38991],{"class":262},[203,40465,3828],{"class":213},[203,40467,40468,40470,40472],{"class":205,"line":16935},[203,40469,39003],{"class":213},[203,40471,405],{"class":262},[203,40473,220],{"class":213},[203,40475,40476],{"class":205,"line":16940},[203,40477,2489],{"emptyLinePlaceholder":131},[203,40479,40480],{"class":205,"line":16945},[203,40481,35223],{"class":272},[203,40483,40484,40486,40488],{"class":205,"line":16959},[203,40485,30859],{"class":209},[203,40487,31151],{"class":2052},[203,40489,31154],{"class":213},[203,40491,40492,40494,40496,40498],{"class":205,"line":16971},[203,40493,31159],{"class":213},[203,40495,259],{"class":209},[203,40497,30881],{"class":262},[203,40499,39100],{"class":213},[203,40501,40502,40504,40506,40508],{"class":205,"line":16976},[203,40503,31159],{"class":213},[203,40505,259],{"class":209},[203,40507,30881],{"class":262},[203,40509,39111],{"class":213},[203,40511,40512,40514,40516,40518],{"class":205,"line":16989},[203,40513,31159],{"class":213},[203,40515,259],{"class":209},[203,40517,30881],{"class":262},[203,40519,39122],{"class":213},[203,40521,40522,40524,40526,40528],{"class":205,"line":16994},[203,40523,31159],{"class":213},[203,40525,259],{"class":209},[203,40527,30881],{"class":262},[203,40529,39133],{"class":213},[203,40531,40532,40534,40536,40538],{"class":205,"line":16999},[203,40533,31159],{"class":213},[203,40535,259],{"class":209},[203,40537,30881],{"class":262},[203,40539,39144],{"class":213},[203,40541,40542,40544,40546,40548],{"class":205,"line":17004},[203,40543,31159],{"class":213},[203,40545,259],{"class":209},[203,40547,30881],{"class":262},[203,40549,39155],{"class":213},[203,40551,40552,40554],{"class":205,"line":17017},[203,40553,14842],{"class":209},[203,40555,31267],{"class":213},[203,40557,40558],{"class":205,"line":17022},[203,40559,2489],{"emptyLinePlaceholder":131},[203,40561,40562],{"class":205,"line":32691},[203,40563,39170],{"class":272},[203,40565,40566,40568,40570,40572,40574],{"class":205,"line":32697},[203,40567,1620],{"class":209},[203,40569,31278],{"class":262},[203,40571,3038],{"class":209},[203,40573,39181],{"class":318},[203,40575,3828],{"class":213},[203,40577,40578,40580,40582,40584,40586,40588,40590,40592,40594],{"class":205,"line":32703},[203,40579,31295],{"class":213},[203,40581,259],{"class":209},[203,40583,30509],{"class":213},[203,40585,31302],{"class":318},[203,40587,1793],{"class":209},[203,40589,31307],{"class":213},[203,40591,1790],{"class":209},[203,40593,30534],{"class":318},[203,40595,220],{"class":213},[203,40597,40598,40600],{"class":205,"line":32709},[203,40599,31357],{"class":262},[203,40601,30543],{"class":213},[203,40603,40604,40606,40608],{"class":205,"line":32715},[203,40605,31347],{"class":213},[203,40607,259],{"class":209},[203,40609,39218],{"class":213},[203,40611,40612,40614,40616,40618,40620,40622,40624,40626],{"class":205,"line":32726},[203,40613,31357],{"class":262},[203,40615,31360],{"class":213},[203,40617,431],{"class":262},[203,40619,592],{"class":213},[203,40621,31559],{"class":262},[203,40623,592],{"class":213},[203,40625,31559],{"class":262},[203,40627,31373],{"class":213},[157,40629,40630],{"start":1269},[160,40631,40632],{},"测试代码",[194,40634,40636],{"className":30436,"code":40635,"language":30438,"meta":27,"style":27},"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",[200,40637,40638,40644,40654,40664,40668,40678,40689,40693,40697,40701,40709,40725,40735,40751,40761,40775,40779,40789,40799,40809,40815,40819,40823,40831,40835,40851,40859,40863,40867,40875,40883,40887,40891,40895,40899,40905,40909,40919,40927,40935,40939,40943,40947,40955,40959,40975,40979,40983,40987,40999,41003,41015,41019,41023,41035,41039,41049,41053,41057,41069,41073,41082,41086,41090,41098,41102,41110,41114,41118,41122,41126,41130,41146,41154,41158,41162,41210,41216,41220,41230,41238,41246,41250,41254,41258,41262,41270,41274,41290,41294,41302,41310],{"__ignoreMap":27},[203,40639,40640,40642],{"class":205,"line":206},[203,40641,30450],{"class":209},[203,40643,30453],{"class":213},[203,40645,40646,40648,40650,40652],{"class":205,"line":124},[203,40647,30450],{"class":209},[203,40649,31473],{"class":213},[203,40651,31441],{"class":209},[203,40653,31478],{"class":213},[203,40655,40656,40658,40660,40662],{"class":205,"line":1269},[203,40657,30795],{"class":209},[203,40659,31456],{"class":213},[203,40661,30450],{"class":209},[203,40663,31461],{"class":213},[203,40665,40666],{"class":205,"line":1284},[203,40667,33980],{"class":272},[203,40669,40670,40672,40674,40676],{"class":205,"line":1290},[203,40671,30795],{"class":209},[203,40673,31426],{"class":213},[203,40675,30450],{"class":209},[203,40677,31431],{"class":213},[203,40679,40680,40682,40684,40686],{"class":205,"line":1304},[203,40681,30795],{"class":209},[203,40683,31972],{"class":213},[203,40685,30450],{"class":209},[203,40687,40688],{"class":262}," VGG16\n",[203,40690,40691],{"class":205,"line":1310},[203,40692,2489],{"emptyLinePlaceholder":131},[203,40694,40695],{"class":205,"line":1401},[203,40696,2489],{"emptyLinePlaceholder":131},[203,40698,40699],{"class":205,"line":1407},[203,40700,34009],{"class":272},[203,40702,40703,40705,40707],{"class":205,"line":1419},[203,40704,32005],{"class":209},[203,40706,34016],{"class":2052},[203,40708,32011],{"class":213},[203,40710,40711,40713,40715,40717,40719,40721,40723],{"class":205,"line":1701},[203,40712,34023],{"class":213},[203,40714,259],{"class":209},[203,40716,31513],{"class":213},[203,40718,31516],{"class":5306},[203,40720,259],{"class":209},[203,40722,31521],{"class":318},[203,40724,31524],{"class":213},[203,40726,40727,40729,40731,40733],{"class":205,"line":1706},[203,40728,34040],{"class":5306},[203,40730,259],{"class":209},[203,40732,34045],{"class":262},[203,40734,31524],{"class":213},[203,40736,40737,40739,40741,40743,40745,40747,40749],{"class":205,"line":1712},[203,40738,34052],{"class":5306},[203,40740,259],{"class":209},[203,40742,31551],{"class":213},[203,40744,31554],{"class":5306},[203,40746,259],{"class":209},[203,40748,31559],{"class":262},[203,40750,31562],{"class":213},[203,40752,40753,40755,40757,40759],{"class":205,"line":1717},[203,40754,34069],{"class":5306},[203,40756,259],{"class":209},[203,40758,31534],{"class":262},[203,40760,220],{"class":213},[203,40762,40763,40765,40767,40769,40771,40773],{"class":205,"line":1731},[203,40764,34080],{"class":213},[203,40766,259],{"class":209},[203,40768,31592],{"class":213},[203,40770,31595],{"class":5306},[203,40772,259],{"class":209},[203,40774,34091],{"class":213},[203,40776,40777],{"class":205,"line":1736},[203,40778,34096],{"class":272},[203,40780,40781,40783,40785,40787],{"class":205,"line":1742},[203,40782,34101],{"class":5306},[203,40784,259],{"class":209},[203,40786,431],{"class":262},[203,40788,31524],{"class":213},[203,40790,40791,40793,40795,40797],{"class":205,"line":1763},[203,40792,34112],{"class":5306},[203,40794,259],{"class":209},[203,40796,31534],{"class":262},[203,40798,31524],{"class":213},[203,40800,40801,40803,40805,40807],{"class":205,"line":1768},[203,40802,34123],{"class":5306},[203,40804,259],{"class":209},[203,40806,405],{"class":262},[203,40808,220],{"class":213},[203,40810,40811,40813],{"class":205,"line":1782},[203,40812,4179],{"class":209},[203,40814,34136],{"class":213},[203,40816,40817],{"class":205,"line":1787},[203,40818,2489],{"emptyLinePlaceholder":131},[203,40820,40821],{"class":205,"line":1816},[203,40822,34145],{"class":272},[203,40824,40825,40827,40829],{"class":205,"line":1821},[203,40826,32005],{"class":209},[203,40828,34152],{"class":2052},[203,40830,34155],{"class":213},[203,40832,40833],{"class":205,"line":1838},[203,40834,34160],{"class":272},[203,40836,40837,40839,40841,40843,40845,40847,40849],{"class":205,"line":1843},[203,40838,31295],{"class":213},[203,40840,259],{"class":209},[203,40842,31302],{"class":318},[203,40844,1793],{"class":209},[203,40846,31307],{"class":213},[203,40848,1790],{"class":209},[203,40850,34177],{"class":318},[203,40852,40853,40855,40857],{"class":205,"line":1848},[203,40854,31347],{"class":213},[203,40856,259],{"class":209},[203,40858,32347],{"class":213},[203,40860,40861],{"class":205,"line":1853},[203,40862,2489],{"emptyLinePlaceholder":131},[203,40864,40865],{"class":205,"line":1867},[203,40866,34194],{"class":272},[203,40868,40869,40871,40873],{"class":205,"line":1872},[203,40870,34199],{"class":213},[203,40872,259],{"class":209},[203,40874,32400],{"class":262},[203,40876,40877,40879,40881],{"class":205,"line":2666},[203,40878,34208],{"class":213},[203,40880,259],{"class":209},[203,40882,3174],{"class":262},[203,40884,40885],{"class":205,"line":2680},[203,40886,2489],{"emptyLinePlaceholder":131},[203,40888,40889],{"class":205,"line":2688},[203,40890,34221],{"class":272},[203,40892,40893],{"class":205,"line":2693},[203,40894,34226],{"class":272},[203,40896,40897],{"class":205,"line":2699},[203,40898,34231],{"class":272},[203,40900,40901,40903],{"class":205,"line":2705},[203,40902,34236],{"class":209},[203,40904,32942],{"class":213},[203,40906,40907],{"class":205,"line":2710},[203,40908,34243],{"class":272},[203,40910,40911,40913,40915,40917],{"class":205,"line":8038},[203,40912,3492],{"class":209},[203,40914,34250],{"class":213},[203,40916,26101],{"class":209},[203,40918,34255],{"class":213},[203,40920,40921,40923,40925],{"class":205,"line":8062},[203,40922,34260],{"class":213},[203,40924,259],{"class":209},[203,40926,34265],{"class":213},[203,40928,40929,40931,40933],{"class":205,"line":8067},[203,40930,34270],{"class":213},[203,40932,259],{"class":209},[203,40934,34275],{"class":213},[203,40936,40937],{"class":205,"line":8073},[203,40938,34280],{"class":272},[203,40940,40941],{"class":205,"line":8100},[203,40942,32933],{"class":213},[203,40944,40945],{"class":205,"line":8105},[203,40946,34289],{"class":272},[203,40948,40949,40951,40953],{"class":205,"line":8111},[203,40950,32718],{"class":213},[203,40952,259],{"class":209},[203,40954,34298],{"class":213},[203,40956,40957],{"class":205,"line":8123},[203,40958,34303],{"class":272},[203,40960,40961,40963,40965,40967,40969,40971,40973],{"class":205,"line":8135},[203,40962,32735],{"class":213},[203,40964,259],{"class":209},[203,40966,32740],{"class":213},[203,40968,32743],{"class":5306},[203,40970,259],{"class":209},[203,40972,431],{"class":262},[203,40974,220],{"class":213},[203,40976,40977],{"class":205,"line":8147},[203,40978,34324],{"class":272},[203,40980,40981],{"class":205,"line":9806},[203,40982,34329],{"class":272},[203,40984,40985],{"class":205,"line":9831},[203,40986,34334],{"class":272},[203,40988,40989,40991,40993,40995,40997],{"class":205,"line":9854},[203,40990,34339],{"class":213},[203,40992,9567],{"class":209},[203,40994,32845],{"class":213},[203,40996,3038],{"class":209},[203,40998,34348],{"class":213},[203,41000,41001],{"class":205,"line":9878},[203,41002,34353],{"class":272},[203,41004,41005,41007,41009,41011,41013],{"class":205,"line":9883},[203,41006,34358],{"class":213},[203,41008,9567],{"class":209},[203,41010,34363],{"class":213},[203,41012,405],{"class":262},[203,41014,220],{"class":213},[203,41016,41017],{"class":205,"line":9888},[203,41018,2489],{"emptyLinePlaceholder":131},[203,41020,41021],{"class":205,"line":9893},[203,41022,34376],{"class":272},[203,41024,41025,41027,41029,41031,41033],{"class":205,"line":9902},[203,41026,34381],{"class":213},[203,41028,259],{"class":209},[203,41030,34386],{"class":213},[203,41032,798],{"class":209},[203,41034,34391],{"class":213},[203,41036,41037],{"class":205,"line":9907},[203,41038,34396],{"class":272},[203,41040,41041,41043,41045,41047],{"class":205,"line":9913},[203,41042,32509],{"class":262},[203,41044,214],{"class":213},[203,41046,34405],{"class":318},[203,41048,34408],{"class":213},[203,41050,41051],{"class":205,"line":9934},[203,41052,2489],{"emptyLinePlaceholder":131},[203,41054,41055],{"class":205,"line":9940},[203,41056,34417],{"class":272},[203,41058,41059,41061,41063,41065,41067],{"class":205,"line":9954},[203,41060,1620],{"class":209},[203,41062,31278],{"class":262},[203,41064,3038],{"class":209},[203,41066,31283],{"class":318},[203,41068,3828],{"class":213},[203,41070,41071],{"class":205,"line":9960},[203,41072,34434],{"class":272},[203,41074,41075,41077,41079],{"class":205,"line":9987},[203,41076,31347],{"class":213},[203,41078,259],{"class":209},[203,41080,41081],{"class":213},"VGG16()\n",[203,41083,41084],{"class":205,"line":9996},[203,41085,34447],{"class":272},[203,41087,41088],{"class":205,"line":10002},[203,41089,34452],{"class":272},[203,41091,41092,41094,41096],{"class":205,"line":10010},[203,41093,34457],{"class":213},[203,41095,34460],{"class":318},[203,41097,30555],{"class":213},[203,41099,41100],{"class":205,"line":10015},[203,41101,34467],{"class":272},[203,41103,41104,41106,41108],{"class":205,"line":16694},[203,41105,34080],{"class":213},[203,41107,259],{"class":209},[203,41109,34476],{"class":213},[203,41111,41112],{"class":205,"line":16700},[203,41113,34481],{"class":272},[203,41115,41116],{"class":205,"line":16723},[203,41117,34486],{"class":213},[203,41119,41120],{"class":205,"line":16729},[203,41121,2489],{"emptyLinePlaceholder":131},[203,41123,41124],{"class":205,"line":16752},[203,41125,34495],{"class":272},[203,41127,41128],{"class":205,"line":16766},[203,41129,34500],{"class":272},[203,41131,41132,41134,41136,41138,41140,41142,41144],{"class":205,"line":16786},[203,41133,31295],{"class":213},[203,41135,259],{"class":209},[203,41137,31302],{"class":318},[203,41139,1793],{"class":209},[203,41141,31307],{"class":213},[203,41143,1790],{"class":209},[203,41145,34177],{"class":318},[203,41147,41148,41150,41152],{"class":205,"line":16792},[203,41149,31347],{"class":213},[203,41151,259],{"class":209},[203,41153,32347],{"class":213},[203,41155,41156],{"class":205,"line":16803},[203,41157,34529],{"class":272},[203,41159,41160],{"class":205,"line":16826},[203,41161,34534],{"class":272},[203,41163,41164,41166,41168,41170,41172,41174,41176,41178,41180,41182,41184,41186,41188,41190,41192,41194,41196,41198,41200,41202,41204,41206,41208],{"class":205,"line":16848},[203,41165,34539],{"class":213},[203,41167,259],{"class":209},[203,41169,1104],{"class":213},[203,41171,34546],{"class":318},[203,41173,592],{"class":213},[203,41175,34551],{"class":318},[203,41177,592],{"class":213},[203,41179,34556],{"class":318},[203,41181,592],{"class":213},[203,41183,34561],{"class":318},[203,41185,592],{"class":213},[203,41187,34566],{"class":318},[203,41189,592],{"class":213},[203,41191,34571],{"class":318},[203,41193,592],{"class":213},[203,41195,34576],{"class":318},[203,41197,592],{"class":213},[203,41199,34581],{"class":318},[203,41201,592],{"class":213},[203,41203,34586],{"class":318},[203,41205,592],{"class":213},[203,41207,34591],{"class":318},[203,41209,33304],{"class":213},[203,41211,41212,41214],{"class":205,"line":16853},[203,41213,34236],{"class":209},[203,41215,32942],{"class":213},[203,41217,41218],{"class":205,"line":16859},[203,41219,34604],{"class":272},[203,41221,41222,41224,41226,41228],{"class":205,"line":16873},[203,41223,3492],{"class":209},[203,41225,34611],{"class":213},[203,41227,26101],{"class":209},[203,41229,34255],{"class":213},[203,41231,41232,41234,41236],{"class":205,"line":16886},[203,41233,32668],{"class":213},[203,41235,259],{"class":209},[203,41237,32673],{"class":213},[203,41239,41240,41242,41244],{"class":205,"line":16891},[203,41241,32683],{"class":213},[203,41243,259],{"class":209},[203,41245,32688],{"class":213},[203,41247,41248],{"class":205,"line":16905},[203,41249,2489],{"emptyLinePlaceholder":131},[203,41251,41252],{"class":205,"line":16910},[203,41253,34640],{"class":272},[203,41255,41256],{"class":205,"line":16916},[203,41257,32933],{"class":213},[203,41259,41260],{"class":205,"line":16921},[203,41261,34649],{"class":272},[203,41263,41264,41266,41268],{"class":205,"line":16935},[203,41265,32718],{"class":213},[203,41267,259],{"class":209},[203,41269,32723],{"class":213},[203,41271,41272],{"class":205,"line":16940},[203,41273,34662],{"class":272},[203,41275,41276,41278,41280,41282,41284,41286,41288],{"class":205,"line":16945},[203,41277,32735],{"class":213},[203,41279,259],{"class":209},[203,41281,32740],{"class":213},[203,41283,32743],{"class":5306},[203,41285,259],{"class":209},[203,41287,431],{"class":262},[203,41289,220],{"class":213},[203,41291,41292],{"class":205,"line":16959},[203,41293,34683],{"class":272},[203,41295,41296,41298,41300],{"class":205,"line":16971},[203,41297,34688],{"class":213},[203,41299,259],{"class":209},[203,41301,34693],{"class":213},[203,41303,41304,41306,41308],{"class":205,"line":16976},[203,41305,34698],{"class":213},[203,41307,259],{"class":209},[203,41309,34703],{"class":213},[203,41311,41312,41314,41316,41318,41320,41322,41324,41326],{"class":205,"line":16989},[203,41313,34708],{"class":262},[203,41315,214],{"class":213},[203,41317,34713],{"class":318},[203,41319,34716],{"class":213},[203,41321,34719],{"class":318},[203,41323,592],{"class":213},[203,41325,34724],{"class":318},[203,41327,34727],{"class":213},[174,41329,41331],{"id":41330},"_23googlenet","2.3.GoogLeNet",[22088,41333,41335],{"id":41334},"_231原理","2.3.1.原理",[157,41337,41338],{},[160,41339,41340],{},"网络结构",[19,41342,41343],{},[25,41344],{"alt":27,"src":41345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[19,41347,41348],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41350,41351],{},[25,41352],{"alt":27,"src":41353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[19,41355,41356],{},[25,41357],{"alt":27,"src":41358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[19,41360,41361],{},[25,41362],{"alt":27,"src":41363},"\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",[157,41365,41366],{"start":124},[160,41367,41368],{},"1x1卷积的优点",[19,41370,41371],{},[25,41372],{"alt":27,"src":41373},"\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",[157,41375,41376],{"start":1269},[160,41377,41378],{},"全局平均池化层优点",[19,41380,41381],{},[25,41382],{"alt":27,"src":41383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[19,41385,41386],{},[25,41387],{"alt":27,"src":41388},"\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",[157,41390,41391],{"start":1284},[160,41392,41393],{},"参数详细描述",[19,41395,41396],{},[25,41397],{"alt":27,"src":41398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[19,41400,41401],{},[25,41402],{"alt":27,"src":41403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[19,41405,41406],{},[25,41407],{"alt":27,"src":41408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[19,41410,41411],{},[25,41412],{"alt":27,"src":41413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[19,41415,41416],{},[25,41417],{"alt":27,"src":41418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[19,41420,41421],{},[25,41422],{"alt":27,"src":41423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[19,41425,41426],{},[25,41427],{"alt":27,"src":41428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[19,41430,41431],{},[25,41432],{"alt":27,"src":41433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[19,41435,41436],{},[25,41437],{"alt":27,"src":41438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[19,41440,41441],{},[25,41442],{"alt":27,"src":41443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[19,41445,41446],{},[25,41447],{"alt":27,"src":41448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[19,41450,41451],{},[25,41452],{"alt":27,"src":41453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[19,41455,41456],{},[25,41457],{"alt":27,"src":41458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[19,41460,41461],{},[25,41462],{"alt":27,"src":41463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[19,41465,41466],{},[25,41467],{"alt":27,"src":41468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[19,41470,41471],{},[25,41472],{"alt":27,"src":41473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[19,41475,41476],{},[25,41477],{"alt":27,"src":41478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[19,41480,41481],{},[25,41482],{"alt":27,"src":41483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[19,41485,41486],{},[25,41487],{"alt":27,"src":41488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[19,41490,41491],{},[25,41492],{"alt":27,"src":41493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[19,41495,41496],{},[25,41497],{"alt":27,"src":41498},"\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",[22088,41500,41502],{"id":41501},"_232代码实现","2.3.2.代码实现",[157,41504,41505],{},[160,41506,30769],{},[19,41508,41509],{},"根据原理一步一步搭建即可",[194,41511,41513],{"className":30436,"code":41512,"language":30438,"meta":27,"style":27},"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",[200,41514,41515,41521,41531,41541,41545,41562,41571,41586,41596,41601,41634,41639,41676,41723,41728,41764,41811,41816,41821,41856,41888,41892,41900,41916,41940,41965,41986,41991,42006,42010,42014,42019,42036,42041,42050,42065,42076,42120,42124,42152,42156,42167,42195,42199,42236,42240,42268,42272,42283,42319,42351,42379,42383,42394,42428,42460,42492,42525,42559,42587,42591,42602,42635,42667,42681,42685,42698,42702,42707,42719,42727,42749,42754,42759,42764,42769,42774,42779,42793,42801,42810,42823,42838,42847,42851,42859,42870,42881,42892,42903,42914,42920,42924,42929,42941,42961,42970],{"__ignoreMap":27},[203,41516,41517,41519],{"class":205,"line":206},[203,41518,30450],{"class":209},[203,41520,30453],{"class":213},[203,41522,41523,41525,41527,41529],{"class":205,"line":124},[203,41524,30795],{"class":209},[203,41526,30798],{"class":213},[203,41528,30450],{"class":209},[203,41530,30803],{"class":213},[203,41532,41533,41535,41537,41539],{"class":205,"line":1269},[203,41534,30795],{"class":209},[203,41536,30815],{"class":213},[203,41538,30450],{"class":209},[203,41540,30820],{"class":213},[203,41542,41543],{"class":205,"line":1284},[203,41544,2489],{"emptyLinePlaceholder":131},[203,41546,41547,41549,41552,41554,41556,41558,41560],{"class":205,"line":1290},[203,41548,14784],{"class":209},[203,41550,41551],{"class":2052}," Inception",[203,41553,214],{"class":213},[203,41555,30836],{"class":2052},[203,41557,772],{"class":213},[203,41559,30841],{"class":2052},[203,41561,30844],{"class":213},[203,41563,41564,41566,41568],{"class":205,"line":1304},[203,41565,30859],{"class":209},[203,41567,30862],{"class":262},[203,41569,41570],{"class":213},"(self,in_channels,c1,c2,c3,c4):\n",[203,41572,41573,41575,41578,41580,41582,41584],{"class":205,"line":1310},[203,41574,30875],{"class":262},[203,41576,41577],{"class":213},"(Inception,",[203,41579,30881],{"class":262},[203,41581,30884],{"class":213},[203,41583,30887],{"class":262},[203,41585,2065],{"class":213},[203,41587,41588,41590,41592,41594],{"class":205,"line":1401},[203,41589,30903],{"class":262},[203,41591,34829],{"class":213},[203,41593,259],{"class":209},[203,41595,34834],{"class":213},[203,41597,41598],{"class":205,"line":1407},[203,41599,41600],{"class":272},"        # 路线1：定义1*1卷积\n",[203,41602,41603,41605,41608,41610,41612,41614,41616,41619,41621,41623,41626,41628,41630,41632],{"class":205,"line":1419},[203,41604,30903],{"class":262},[203,41606,41607],{"class":213},".p1_1",[203,41609,259],{"class":209},[203,41611,30911],{"class":213},[203,41613,30914],{"class":5306},[203,41615,259],{"class":209},[203,41617,41618],{"class":213},"in_channels,",[203,41620,30923],{"class":5306},[203,41622,259],{"class":209},[203,41624,41625],{"class":213},"c1,",[203,41627,30932],{"class":5306},[203,41629,259],{"class":209},[203,41631,431],{"class":262},[203,41633,220],{"class":213},[203,41635,41636],{"class":205,"line":1701},[203,41637,41638],{"class":272},"        # 路线2：定义1*1卷积和3*3\n",[203,41640,41641,41643,41646,41648,41650,41652,41654,41656,41658,41660,41663,41665,41668,41670,41672,41674],{"class":205,"line":1706},[203,41642,30903],{"class":262},[203,41644,41645],{"class":213},".p2_1",[203,41647,259],{"class":209},[203,41649,30911],{"class":213},[203,41651,30914],{"class":5306},[203,41653,259],{"class":209},[203,41655,41618],{"class":213},[203,41657,30923],{"class":5306},[203,41659,259],{"class":209},[203,41661,41662],{"class":213},"c2[",[203,41664,405],{"class":262},[203,41666,41667],{"class":213},"],",[203,41669,30932],{"class":5306},[203,41671,259],{"class":209},[203,41673,431],{"class":262},[203,41675,220],{"class":213},[203,41677,41678,41680,41683,41685,41687,41689,41691,41693,41695,41697,41699,41701,41703,41705,41707,41709,41711,41713,41715,41717,41719,41721],{"class":205,"line":1712},[203,41679,30903],{"class":262},[203,41681,41682],{"class":213},".p2_2",[203,41684,259],{"class":209},[203,41686,30911],{"class":213},[203,41688,30914],{"class":5306},[203,41690,259],{"class":209},[203,41692,41662],{"class":213},[203,41694,405],{"class":262},[203,41696,41667],{"class":213},[203,41698,30923],{"class":5306},[203,41700,259],{"class":209},[203,41702,41662],{"class":213},[203,41704,431],{"class":262},[203,41706,41667],{"class":213},[203,41708,30932],{"class":5306},[203,41710,259],{"class":209},[203,41712,285],{"class":262},[203,41714,592],{"class":213},[203,41716,30941],{"class":5306},[203,41718,259],{"class":209},[203,41720,431],{"class":262},[203,41722,220],{"class":213},[203,41724,41725],{"class":205,"line":1717},[203,41726,41727],{"class":272},"        # 路线3：定义1*1卷积和5*5\n",[203,41729,41730,41732,41735,41737,41739,41741,41743,41745,41747,41749,41752,41754,41756,41758,41760,41762],{"class":205,"line":1731},[203,41731,30903],{"class":262},[203,41733,41734],{"class":213},".p3_1",[203,41736,259],{"class":209},[203,41738,30911],{"class":213},[203,41740,30914],{"class":5306},[203,41742,259],{"class":209},[203,41744,41618],{"class":213},[203,41746,30923],{"class":5306},[203,41748,259],{"class":209},[203,41750,41751],{"class":213},"c3[",[203,41753,405],{"class":262},[203,41755,41667],{"class":213},[203,41757,30932],{"class":5306},[203,41759,259],{"class":209},[203,41761,431],{"class":262},[203,41763,220],{"class":213},[203,41765,41766,41768,41771,41773,41775,41777,41779,41781,41783,41785,41787,41789,41791,41793,41795,41797,41799,41801,41803,41805,41807,41809],{"class":205,"line":1736},[203,41767,30903],{"class":262},[203,41769,41770],{"class":213},".p3_2",[203,41772,259],{"class":209},[203,41774,30911],{"class":213},[203,41776,30914],{"class":5306},[203,41778,259],{"class":209},[203,41780,41751],{"class":213},[203,41782,405],{"class":262},[203,41784,41667],{"class":213},[203,41786,30923],{"class":5306},[203,41788,259],{"class":209},[203,41790,41751],{"class":213},[203,41792,431],{"class":262},[203,41794,41667],{"class":213},[203,41796,30932],{"class":5306},[203,41798,259],{"class":209},[203,41800,533],{"class":262},[203,41802,592],{"class":213},[203,41804,30941],{"class":5306},[203,41806,259],{"class":209},[203,41808,291],{"class":262},[203,41810,220],{"class":213},[203,41812,41813],{"class":205,"line":1742},[203,41814,41815],{"class":272},"        # 路线4：定义3*3最大池化和1*1卷积\n",[203,41817,41818],{"class":205,"line":1763},[203,41819,41820],{"class":272},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[203,41822,41823,41825,41828,41830,41832,41834,41836,41838,41840,41842,41844,41846,41848,41850,41852,41854],{"class":205,"line":1768},[203,41824,30903],{"class":262},[203,41826,41827],{"class":213},".p4_1",[203,41829,259],{"class":209},[203,41831,34887],{"class":213},[203,41833,30932],{"class":5306},[203,41835,259],{"class":209},[203,41837,285],{"class":262},[203,41839,592],{"class":213},[203,41841,30987],{"class":5306},[203,41843,259],{"class":209},[203,41845,431],{"class":262},[203,41847,592],{"class":213},[203,41849,30941],{"class":5306},[203,41851,259],{"class":209},[203,41853,431],{"class":262},[203,41855,220],{"class":213},[203,41857,41858,41860,41863,41865,41867,41869,41871,41873,41875,41877,41880,41882,41884,41886],{"class":205,"line":1782},[203,41859,30903],{"class":262},[203,41861,41862],{"class":213},".p4_2",[203,41864,259],{"class":209},[203,41866,30911],{"class":213},[203,41868,30914],{"class":5306},[203,41870,259],{"class":209},[203,41872,41618],{"class":213},[203,41874,30923],{"class":5306},[203,41876,259],{"class":209},[203,41878,41879],{"class":213},"c4,",[203,41881,30932],{"class":5306},[203,41883,259],{"class":209},[203,41885,431],{"class":262},[203,41887,220],{"class":213},[203,41889,41890],{"class":205,"line":1787},[203,41891,2489],{"emptyLinePlaceholder":131},[203,41893,41894,41896,41898],{"class":205,"line":1816},[203,41895,30859],{"class":209},[203,41897,31151],{"class":2052},[203,41899,31154],{"class":213},[203,41901,41902,41905,41907,41909,41911,41913],{"class":205,"line":1821},[203,41903,41904],{"class":213},"        p1",[203,41906,259],{"class":209},[203,41908,30881],{"class":262},[203,41910,35242],{"class":213},[203,41912,30881],{"class":262},[203,41914,41915],{"class":213},".p1_1(x))\n",[203,41917,41918,41920,41922,41924,41926,41928,41931,41933,41935,41937],{"class":205,"line":1838},[203,41919,7175],{"class":213},[203,41921,259],{"class":209},[203,41923,30881],{"class":262},[203,41925,35242],{"class":213},[203,41927,30881],{"class":262},[203,41929,41930],{"class":213},".p2_2(",[203,41932,30881],{"class":262},[203,41934,35242],{"class":213},[203,41936,30881],{"class":262},[203,41938,41939],{"class":213},".p2_1(x))))\n",[203,41941,41942,41945,41947,41949,41951,41953,41956,41958,41960,41962],{"class":205,"line":1843},[203,41943,41944],{"class":213},"        p3",[203,41946,259],{"class":209},[203,41948,30881],{"class":262},[203,41950,35242],{"class":213},[203,41952,30881],{"class":262},[203,41954,41955],{"class":213},".p3_2(",[203,41957,30881],{"class":262},[203,41959,35242],{"class":213},[203,41961,30881],{"class":262},[203,41963,41964],{"class":213},".p3_1(x))))\n",[203,41966,41967,41970,41972,41974,41976,41978,41981,41983],{"class":205,"line":1848},[203,41968,41969],{"class":213},"        p4",[203,41971,259],{"class":209},[203,41973,30881],{"class":262},[203,41975,35242],{"class":213},[203,41977,30881],{"class":262},[203,41979,41980],{"class":213},".p4_2(",[203,41982,30881],{"class":262},[203,41984,41985],{"class":213},".p4_1(x)))\n",[203,41987,41988],{"class":205,"line":1853},[203,41989,41990],{"class":272},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[203,41992,41993,41995,41998,42000,42002,42004],{"class":205,"line":1867},[203,41994,14842],{"class":209},[203,41996,41997],{"class":213}," torch.cat((p1,p2,p3,p4),",[203,41999,32743],{"class":5306},[203,42001,259],{"class":209},[203,42003,431],{"class":262},[203,42005,220],{"class":213},[203,42007,42008],{"class":205,"line":1872},[203,42009,2489],{"emptyLinePlaceholder":131},[203,42011,42012],{"class":205,"line":2666},[203,42013,2489],{"emptyLinePlaceholder":131},[203,42015,42016],{"class":205,"line":2680},[203,42017,42018],{"class":272},"# 搭建GoogLeNet网络\n",[203,42020,42021,42023,42026,42028,42030,42032,42034],{"class":205,"line":2688},[203,42022,14784],{"class":209},[203,42024,42025],{"class":2052}," GoogLeNet",[203,42027,214],{"class":213},[203,42029,30836],{"class":2052},[203,42031,772],{"class":213},[203,42033,30841],{"class":2052},[203,42035,30844],{"class":213},[203,42037,42038],{"class":205,"line":2693},[203,42039,42040],{"class":272},"    # 必须把Inception导入到里边\n",[203,42042,42043,42045,42047],{"class":205,"line":2699},[203,42044,30859],{"class":209},[203,42046,30862],{"class":262},[203,42048,42049],{"class":213},"(self,Inception):\n",[203,42051,42052,42054,42057,42059,42061,42063],{"class":205,"line":2705},[203,42053,30875],{"class":262},[203,42055,42056],{"class":213},"(GoogLeNet,",[203,42058,30881],{"class":262},[203,42060,30884],{"class":213},[203,42062,30887],{"class":262},[203,42064,2065],{"class":213},[203,42066,42067,42069,42072,42074],{"class":205,"line":2710},[203,42068,30903],{"class":262},[203,42070,42071],{"class":213},".b1",[203,42073,259],{"class":209},[203,42075,38067],{"class":213},[203,42077,42078,42080,42082,42084,42086,42088,42090,42092,42094,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114,42116,42118],{"class":205,"line":8038},[203,42079,38072],{"class":213},[203,42081,30914],{"class":5306},[203,42083,259],{"class":209},[203,42085,431],{"class":262},[203,42087,592],{"class":213},[203,42089,30923],{"class":5306},[203,42091,259],{"class":209},[203,42093,417],{"class":262},[203,42095,592],{"class":213},[203,42097,30932],{"class":5306},[203,42099,259],{"class":209},[203,42101,583],{"class":262},[203,42103,592],{"class":213},[203,42105,30987],{"class":5306},[203,42107,259],{"class":209},[203,42109,291],{"class":262},[203,42111,592],{"class":213},[203,42113,30941],{"class":5306},[203,42115,259],{"class":209},[203,42117,285],{"class":262},[203,42119,38105],{"class":213},[203,42121,42122],{"class":205,"line":8062},[203,42123,38110],{"class":213},[203,42125,42126,42128,42130,42132,42134,42136,42138,42140,42142,42144,42146,42148,42150],{"class":205,"line":8067},[203,42127,38155],{"class":213},[203,42129,30932],{"class":5306},[203,42131,259],{"class":209},[203,42133,285],{"class":262},[203,42135,592],{"class":213},[203,42137,30987],{"class":5306},[203,42139,259],{"class":209},[203,42141,291],{"class":262},[203,42143,592],{"class":213},[203,42145,30941],{"class":5306},[203,42147,259],{"class":209},[203,42149,431],{"class":262},[203,42151,220],{"class":213},[203,42153,42154],{"class":205,"line":8073},[203,42155,38184],{"class":213},[203,42157,42158,42160,42163,42165],{"class":205,"line":8100},[203,42159,30903],{"class":262},[203,42161,42162],{"class":213},".b2",[203,42164,259],{"class":209},[203,42166,38067],{"class":213},[203,42168,42169,42171,42173,42175,42177,42179,42181,42183,42185,42187,42189,42191,42193],{"class":205,"line":8105},[203,42170,38072],{"class":213},[203,42172,30914],{"class":5306},[203,42174,259],{"class":209},[203,42176,417],{"class":262},[203,42178,592],{"class":213},[203,42180,30923],{"class":5306},[203,42182,259],{"class":209},[203,42184,417],{"class":262},[203,42186,592],{"class":213},[203,42188,30932],{"class":5306},[203,42190,259],{"class":209},[203,42192,431],{"class":262},[203,42194,38105],{"class":213},[203,42196,42197],{"class":205,"line":8111},[203,42198,38110],{"class":213},[203,42200,42201,42203,42205,42207,42209,42211,42213,42215,42218,42220,42222,42224,42226,42228,42230,42232,42234],{"class":205,"line":8123},[203,42202,38072],{"class":213},[203,42204,30914],{"class":5306},[203,42206,259],{"class":209},[203,42208,417],{"class":262},[203,42210,592],{"class":213},[203,42212,30923],{"class":5306},[203,42214,259],{"class":209},[203,42216,42217],{"class":262},"192",[203,42219,592],{"class":213},[203,42221,30932],{"class":5306},[203,42223,259],{"class":209},[203,42225,285],{"class":262},[203,42227,592],{"class":213},[203,42229,30941],{"class":5306},[203,42231,259],{"class":209},[203,42233,431],{"class":262},[203,42235,38105],{"class":213},[203,42237,42238],{"class":205,"line":8135},[203,42239,38110],{"class":213},[203,42241,42242,42244,42246,42248,42250,42252,42254,42256,42258,42260,42262,42264,42266],{"class":205,"line":8147},[203,42243,38155],{"class":213},[203,42245,30932],{"class":5306},[203,42247,259],{"class":209},[203,42249,285],{"class":262},[203,42251,592],{"class":213},[203,42253,30987],{"class":5306},[203,42255,259],{"class":209},[203,42257,291],{"class":262},[203,42259,592],{"class":213},[203,42261,30941],{"class":5306},[203,42263,259],{"class":209},[203,42265,431],{"class":262},[203,42267,220],{"class":213},[203,42269,42270],{"class":205,"line":9806},[203,42271,38184],{"class":213},[203,42273,42274,42276,42279,42281],{"class":205,"line":9831},[203,42275,30903],{"class":262},[203,42277,42278],{"class":213},".b3",[203,42280,259],{"class":209},[203,42282,38067],{"class":213},[203,42284,42285,42288,42290,42292,42294,42297,42299,42301,42303,42306,42308,42310,42312,42315,42317],{"class":205,"line":9854},[203,42286,42287],{"class":213},"            Inception(",[203,42289,42217],{"class":262},[203,42291,592],{"class":213},[203,42293,417],{"class":262},[203,42295,42296],{"class":213},",(",[203,42298,423],{"class":262},[203,42300,592],{"class":213},[203,42302,32128],{"class":262},[203,42304,42305],{"class":213},"),(",[203,42307,815],{"class":262},[203,42309,592],{"class":213},[203,42311,411],{"class":262},[203,42313,42314],{"class":213},"),",[203,42316,411],{"class":262},[203,42318,38105],{"class":213},[203,42320,42321,42323,42325,42327,42329,42331,42333,42335,42337,42339,42341,42343,42345,42347,42349],{"class":205,"line":9878},[203,42322,42287],{"class":213},[203,42324,34928],{"class":262},[203,42326,592],{"class":213},[203,42328,32128],{"class":262},[203,42330,42296],{"class":213},[203,42332,32128],{"class":262},[203,42334,592],{"class":213},[203,42336,42217],{"class":262},[203,42338,42305],{"class":213},[203,42340,411],{"class":262},[203,42342,592],{"class":213},[203,42344,423],{"class":262},[203,42346,42314],{"class":213},[203,42348,417],{"class":262},[203,42350,38105],{"class":213},[203,42352,42353,42355,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377],{"class":205,"line":9883},[203,42354,38155],{"class":213},[203,42356,30932],{"class":5306},[203,42358,259],{"class":209},[203,42360,285],{"class":262},[203,42362,592],{"class":213},[203,42364,30987],{"class":5306},[203,42366,259],{"class":209},[203,42368,291],{"class":262},[203,42370,592],{"class":213},[203,42372,30941],{"class":5306},[203,42374,259],{"class":209},[203,42376,431],{"class":262},[203,42378,220],{"class":213},[203,42380,42381],{"class":205,"line":9888},[203,42382,38184],{"class":213},[203,42384,42385,42387,42390,42392],{"class":205,"line":9893},[203,42386,30903],{"class":262},[203,42388,42389],{"class":213},".b4",[203,42391,259],{"class":209},[203,42393,38067],{"class":213},[203,42395,42396,42398,42401,42403,42405,42407,42409,42411,42414,42416,42418,42420,42422,42424,42426],{"class":205,"line":9902},[203,42397,42287],{"class":213},[203,42399,42400],{"class":262},"480",[203,42402,592],{"class":213},[203,42404,42217],{"class":262},[203,42406,42296],{"class":213},[203,42408,423],{"class":262},[203,42410,592],{"class":213},[203,42412,42413],{"class":262},"208",[203,42415,42305],{"class":213},[203,42417,815],{"class":262},[203,42419,592],{"class":213},[203,42421,821],{"class":262},[203,42423,42314],{"class":213},[203,42425,417],{"class":262},[203,42427,38105],{"class":213},[203,42429,42430,42432,42434,42436,42438,42440,42442,42444,42446,42448,42450,42452,42454,42456,42458],{"class":205,"line":9907},[203,42431,42287],{"class":213},[203,42433,38515],{"class":262},[203,42435,592],{"class":213},[203,42437,21138],{"class":262},[203,42439,42296],{"class":213},[203,42441,832],{"class":262},[203,42443,592],{"class":213},[203,42445,31559],{"class":262},[203,42447,42305],{"class":213},[203,42449,1014],{"class":262},[203,42451,592],{"class":213},[203,42453,417],{"class":262},[203,42455,42314],{"class":213},[203,42457,417],{"class":262},[203,42459,38105],{"class":213},[203,42461,42462,42464,42466,42468,42470,42472,42474,42476,42478,42480,42482,42484,42486,42488,42490],{"class":205,"line":9913},[203,42463,42287],{"class":213},[203,42465,38515],{"class":262},[203,42467,592],{"class":213},[203,42469,32128],{"class":262},[203,42471,42296],{"class":213},[203,42473,32128],{"class":262},[203,42475,592],{"class":213},[203,42477,34928],{"class":262},[203,42479,42305],{"class":213},[203,42481,1014],{"class":262},[203,42483,592],{"class":213},[203,42485,417],{"class":262},[203,42487,42314],{"class":213},[203,42489,417],{"class":262},[203,42491,38105],{"class":213},[203,42493,42494,42496,42498,42500,42502,42504,42506,42508,42511,42513,42515,42517,42519,42521,42523],{"class":205,"line":9934},[203,42495,42287],{"class":213},[203,42497,38515],{"class":262},[203,42499,592],{"class":213},[203,42501,832],{"class":262},[203,42503,42296],{"class":213},[203,42505,32128],{"class":262},[203,42507,592],{"class":213},[203,42509,42510],{"class":262},"288",[203,42512,42305],{"class":213},[203,42514,411],{"class":262},[203,42516,592],{"class":213},[203,42518,417],{"class":262},[203,42520,42314],{"class":213},[203,42522,417],{"class":262},[203,42524,38105],{"class":213},[203,42526,42527,42529,42532,42534,42536,42538,42540,42542,42545,42547,42549,42551,42553,42555,42557],{"class":205,"line":9940},[203,42528,42287],{"class":213},[203,42530,42531],{"class":262},"528",[203,42533,592],{"class":213},[203,42535,34928],{"class":262},[203,42537,42296],{"class":213},[203,42539,21138],{"class":262},[203,42541,592],{"class":213},[203,42543,42544],{"class":262},"320",[203,42546,42305],{"class":213},[203,42548,411],{"class":262},[203,42550,592],{"class":213},[203,42552,32128],{"class":262},[203,42554,42314],{"class":213},[203,42556,32128],{"class":262},[203,42558,38105],{"class":213},[203,42560,42561,42563,42565,42567,42569,42571,42573,42575,42577,42579,42581,42583,42585],{"class":205,"line":9954},[203,42562,38155],{"class":213},[203,42564,30932],{"class":5306},[203,42566,259],{"class":209},[203,42568,285],{"class":262},[203,42570,592],{"class":213},[203,42572,30987],{"class":5306},[203,42574,259],{"class":209},[203,42576,291],{"class":262},[203,42578,592],{"class":213},[203,42580,30941],{"class":5306},[203,42582,259],{"class":209},[203,42584,431],{"class":262},[203,42586,220],{"class":213},[203,42588,42589],{"class":205,"line":9960},[203,42590,38184],{"class":213},[203,42592,42593,42595,42598,42600],{"class":205,"line":9987},[203,42594,30903],{"class":262},[203,42596,42597],{"class":213},".b5",[203,42599,259],{"class":209},[203,42601,38067],{"class":213},[203,42603,42604,42606,42609,42611,42613,42615,42617,42619,42621,42623,42625,42627,42629,42631,42633],{"class":205,"line":9996},[203,42605,42287],{"class":213},[203,42607,42608],{"class":262},"832",[203,42610,592],{"class":213},[203,42612,34928],{"class":262},[203,42614,42296],{"class":213},[203,42616,21138],{"class":262},[203,42618,592],{"class":213},[203,42620,42544],{"class":262},[203,42622,42305],{"class":213},[203,42624,411],{"class":262},[203,42626,592],{"class":213},[203,42628,32128],{"class":262},[203,42630,42314],{"class":213},[203,42632,32128],{"class":262},[203,42634,38105],{"class":213},[203,42636,42637,42639,42641,42643,42645,42647,42649,42651,42653,42655,42657,42659,42661,42663,42665],{"class":205,"line":10002},[203,42638,42287],{"class":213},[203,42640,42608],{"class":262},[203,42642,592],{"class":213},[203,42644,34998],{"class":262},[203,42646,42296],{"class":213},[203,42648,42217],{"class":262},[203,42650,592],{"class":213},[203,42652,34998],{"class":262},[203,42654,42305],{"class":213},[203,42656,821],{"class":262},[203,42658,592],{"class":213},[203,42660,32128],{"class":262},[203,42662,42314],{"class":213},[203,42664,32128],{"class":262},[203,42666,38105],{"class":213},[203,42668,42669,42672,42674,42676,42678],{"class":205,"line":10010},[203,42670,42671],{"class":213},"            nn.AdaptiveAvgPool2d((",[203,42673,431],{"class":262},[203,42675,592],{"class":213},[203,42677,431],{"class":262},[203,42679,42680],{"class":213},")),\n",[203,42682,42683],{"class":205,"line":10015},[203,42684,38848],{"class":213},[203,42686,42687,42689,42692,42694,42696],{"class":205,"line":16694},[203,42688,38853],{"class":213},[203,42690,42691],{"class":262},"1024",[203,42693,592],{"class":213},[203,42695,660],{"class":262},[203,42697,220],{"class":213},[203,42699,42700],{"class":205,"line":16700},[203,42701,38184],{"class":213},[203,42703,42704],{"class":205,"line":16723},[203,42705,42706],{"class":272},"        # 对模型参数初始化\n",[203,42708,42709,42711,42713,42715,42717],{"class":205,"line":16729},[203,42710,3492],{"class":209},[203,42712,38926],{"class":213},[203,42714,26101],{"class":209},[203,42716,38931],{"class":262},[203,42718,38934],{"class":213},[203,42720,42721,42723,42725],{"class":205,"line":16752},[203,42722,4731],{"class":209},[203,42724,38946],{"class":262},[203,42726,38949],{"class":213},[203,42728,42729,42731,42734,42736,42739,42741,42743,42745,42747],{"class":205,"line":16766},[203,42730,38959],{"class":213},[203,42732,42733],{"class":5306},"mode",[203,42735,259],{"class":209},[203,42737,42738],{"class":318},"'fan_out'",[203,42740,592],{"class":213},[203,42742,38962],{"class":5306},[203,42744,259],{"class":209},[203,42746,38967],{"class":318},[203,42748,220],{"class":213},[203,42750,42751],{"class":205,"line":16786},[203,42752,42753],{"class":272},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[203,42755,42756],{"class":205,"line":16792},[203,42757,42758],{"class":272},"                # ② mode = 'fan_out'决定使用的fan值：\n",[203,42760,42761],{"class":205,"line":16803},[203,42762,42763],{"class":272},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[203,42765,42766],{"class":205,"line":16826},[203,42767,42768],{"class":272},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[203,42770,42771],{"class":205,"line":16848},[203,42772,42773],{"class":272},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[203,42775,42776],{"class":205,"line":16853},[203,42777,42778],{"class":272},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[203,42780,42781,42783,42785,42787,42789,42791],{"class":205,"line":16859},[203,42782,38979],{"class":209},[203,42784,38982],{"class":213},[203,42786,38985],{"class":209},[203,42788,38988],{"class":209},[203,42790,38991],{"class":262},[203,42792,3828],{"class":213},[203,42794,42795,42797,42799],{"class":205,"line":16873},[203,42796,39003],{"class":213},[203,42798,405],{"class":262},[203,42800,220],{"class":213},[203,42802,42803,42806,42808],{"class":205,"line":16886},[203,42804,42805],{"class":209},"                elif",[203,42807,38946],{"class":262},[203,42809,39022],{"class":213},[203,42811,42812,42815,42817,42819,42821],{"class":205,"line":16891},[203,42813,42814],{"class":213},"                    nn.init.normal_(m.weight,",[203,42816,405],{"class":262},[203,42818,592],{"class":213},[203,42820,39044],{"class":262},[203,42822,220],{"class":213},[203,42824,42825,42828,42830,42832,42834,42836],{"class":205,"line":16905},[203,42826,42827],{"class":209},"                    if",[203,42829,38982],{"class":213},[203,42831,38985],{"class":209},[203,42833,38988],{"class":209},[203,42835,38991],{"class":262},[203,42837,3828],{"class":213},[203,42839,42840,42843,42845],{"class":205,"line":16910},[203,42841,42842],{"class":213},"                        nn.init.constant_(m.bias,",[203,42844,405],{"class":262},[203,42846,220],{"class":213},[203,42848,42849],{"class":205,"line":16916},[203,42850,35223],{"class":272},[203,42852,42853,42855,42857],{"class":205,"line":16921},[203,42854,30859],{"class":209},[203,42856,31151],{"class":2052},[203,42858,31154],{"class":213},[203,42860,42861,42863,42865,42867],{"class":205,"line":16935},[203,42862,31159],{"class":213},[203,42864,259],{"class":209},[203,42866,30881],{"class":262},[203,42868,42869],{"class":213},".b1(x)\n",[203,42871,42872,42874,42876,42878],{"class":205,"line":16940},[203,42873,31159],{"class":213},[203,42875,259],{"class":209},[203,42877,30881],{"class":262},[203,42879,42880],{"class":213},".b2(x)\n",[203,42882,42883,42885,42887,42889],{"class":205,"line":16945},[203,42884,31159],{"class":213},[203,42886,259],{"class":209},[203,42888,30881],{"class":262},[203,42890,42891],{"class":213},".b3(x)\n",[203,42893,42894,42896,42898,42900],{"class":205,"line":16959},[203,42895,31159],{"class":213},[203,42897,259],{"class":209},[203,42899,30881],{"class":262},[203,42901,42902],{"class":213},".b4(x)\n",[203,42904,42905,42907,42909,42911],{"class":205,"line":16971},[203,42906,31159],{"class":213},[203,42908,259],{"class":209},[203,42910,30881],{"class":262},[203,42912,42913],{"class":213},".b5(x)\n",[203,42915,42916,42918],{"class":205,"line":16976},[203,42917,14842],{"class":209},[203,42919,31267],{"class":213},[203,42921,42922],{"class":205,"line":16989},[203,42923,2489],{"emptyLinePlaceholder":131},[203,42925,42926],{"class":205,"line":16994},[203,42927,42928],{"class":272},"# 模型展示\n",[203,42930,42931,42933,42935,42937,42939],{"class":205,"line":16999},[203,42932,1620],{"class":209},[203,42934,31278],{"class":262},[203,42936,3038],{"class":209},[203,42938,31283],{"class":318},[203,42940,3828],{"class":213},[203,42942,42943,42945,42947,42949,42951,42953,42955,42957,42959],{"class":205,"line":17004},[203,42944,31295],{"class":213},[203,42946,259],{"class":209},[203,42948,30509],{"class":213},[203,42950,31302],{"class":318},[203,42952,1793],{"class":209},[203,42954,31307],{"class":213},[203,42956,1790],{"class":209},[203,42958,30534],{"class":318},[203,42960,220],{"class":213},[203,42962,42963,42965,42967],{"class":205,"line":17017},[203,42964,31347],{"class":213},[203,42966,259],{"class":209},[203,42968,42969],{"class":213},"GoogLeNet(Inception).to(device)\n",[203,42971,42972,42974,42976,42978,42980,42982,42984,42986],{"class":205,"line":17022},[203,42973,31357],{"class":262},[203,42975,31360],{"class":213},[203,42977,431],{"class":262},[203,42979,592],{"class":213},[203,42981,31559],{"class":262},[203,42983,592],{"class":213},[203,42985,31559],{"class":262},[203,42987,31373],{"class":213},[157,42989,42990],{"start":124},[160,42991,39241],{},[194,42993,42995],{"className":30436,"code":42994,"language":30438,"meta":27,"style":27},"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",[200,42996,42997,43003,43009,43019,43025,43035,43045,43055,43065,43075,43079,43090,43100,43104,43108,43112,43120,43132,43142,43158,43168,43200,43214,43224,43234,43238,43248,43262,43272,43282,43292,43298,43302,43306,43310,43314,43318,43326,43346,43350,43354,43358,43362,43366,43382,43386,43390,43398,43402,43406,43414,43418,43422,43426,43434,43438,43442,43446,43450,43458,43462,43470,43474,43482,43486,43494,43498,43506,43510,43514,43522,43526,43530,43534,43546,43570,43584,43588,43592,43596,43604,43608,43616,43620,43628,43632,43640,43644,43652,43656,43664,43668,43680,43684,43692,43696,43704,43708,43712,43716,43720,43728,43732,43748,43752,43760,43764,43768,43772,43776,43780,43784,43788,43804,43808,43820,43824,43836,43840,43852,43856,43864,43868,43876,43880,43884,43888,43894,43898,43906,43910,43926,43930,43938,43942,43958,43970,43974,43986,43990,43994,44002,44006,44010,44018,44022,44030,44034,44042,44046,44050,44092,44134,44138,44142,44158,44162,44178,44182,44186,44194,44198,44202,44214,44252,44256,44260,44268,44272,44286,44296,44302,44308,44314,44320,44324,44328,44334,44338,44342,44350,44354,44372,44376,44380,44384,44400,44404,44408,44412,44416,44420,44440,44460,44464,44468,44472,44480,44488,44492,44508,44528,44548,44552,44556,44564,44572,44576,44580,44584,44596,44600,44610,44618,44635],{"__ignoreMap":27},[203,42998,42999,43001],{"class":205,"line":206},[203,43000,30450],{"class":209},[203,43002,31880],{"class":213},[203,43004,43005,43007],{"class":205,"line":124},[203,43006,30450],{"class":209},[203,43008,31887],{"class":213},[203,43010,43011,43013,43015,43017],{"class":205,"line":1269},[203,43012,30450],{"class":209},[203,43014,31898],{"class":213},[203,43016,31441],{"class":209},[203,43018,31903],{"class":213},[203,43020,43021,43023],{"class":205,"line":1284},[203,43022,30450],{"class":209},[203,43024,30453],{"class":213},[203,43026,43027,43029,43031,43033],{"class":205,"line":1290},[203,43028,30795],{"class":209},[203,43030,31473],{"class":213},[203,43032,30450],{"class":209},[203,43034,31920],{"class":213},[203,43036,43037,43039,43041,43043],{"class":205,"line":1304},[203,43038,30795],{"class":209},[203,43040,31426],{"class":213},[203,43042,30450],{"class":209},[203,43044,31431],{"class":213},[203,43046,43047,43049,43051,43053],{"class":205,"line":1310},[203,43048,30795],{"class":209},[203,43050,31456],{"class":213},[203,43052,30450],{"class":209},[203,43054,31461],{"class":213},[203,43056,43057,43059,43061,43063],{"class":205,"line":1401},[203,43058,30450],{"class":209},[203,43060,31473],{"class":213},[203,43062,31441],{"class":209},[203,43064,31478],{"class":213},[203,43066,43067,43069,43071,43073],{"class":205,"line":1407},[203,43068,30450],{"class":209},[203,43070,31490],{"class":213},[203,43072,31441],{"class":209},[203,43074,31495],{"class":213},[203,43076,43077],{"class":205,"line":1419},[203,43078,31965],{"class":272},[203,43080,43081,43083,43085,43087],{"class":205,"line":1701},[203,43082,30795],{"class":209},[203,43084,31972],{"class":213},[203,43086,30450],{"class":209},[203,43088,43089],{"class":213}," GoogLeNet, Inception\n",[203,43091,43092,43094,43096,43098],{"class":205,"line":1706},[203,43093,30795],{"class":209},[203,43095,30798],{"class":213},[203,43097,30450],{"class":209},[203,43099,30803],{"class":213},[203,43101,43102],{"class":205,"line":1712},[203,43103,2489],{"emptyLinePlaceholder":131},[203,43105,43106],{"class":205,"line":1717},[203,43107,2489],{"emptyLinePlaceholder":131},[203,43109,43110],{"class":205,"line":1731},[203,43111,32000],{"class":272},[203,43113,43114,43116,43118],{"class":205,"line":1736},[203,43115,32005],{"class":209},[203,43117,32008],{"class":2052},[203,43119,32011],{"class":213},[203,43121,43122,43124,43126,43128,43130],{"class":205,"line":1742},[203,43123,32016],{"class":213},[203,43125,259],{"class":209},[203,43127,31513],{"class":213},[203,43129,31521],{"class":318},[203,43131,31524],{"class":213},[203,43133,43134,43136,43138,43140],{"class":205,"line":1763},[203,43135,32029],{"class":5306},[203,43137,259],{"class":209},[203,43139,31534],{"class":262},[203,43141,31524],{"class":213},[203,43143,43144,43146,43148,43150,43152,43154,43156],{"class":205,"line":1768},[203,43145,32040],{"class":5306},[203,43147,259],{"class":209},[203,43149,31551],{"class":213},[203,43151,31554],{"class":5306},[203,43153,259],{"class":209},[203,43155,35507],{"class":262},[203,43157,31562],{"class":213},[203,43159,43160,43162,43164,43166],{"class":205,"line":1782},[203,43161,32057],{"class":5306},[203,43163,259],{"class":209},[203,43165,31534],{"class":262},[203,43167,220],{"class":213},[203,43169,43170,43172,43174,43176,43178,43180,43182,43184,43186,43188,43190,43192,43194,43196,43198],{"class":205,"line":1787},[203,43171,32068],{"class":213},[203,43173,259],{"class":209},[203,43175,32073],{"class":213},[203,43177,32076],{"class":262},[203,43179,214],{"class":213},[203,43181,32081],{"class":262},[203,43183,669],{"class":209},[203,43185,7448],{"class":262},[203,43187,32088],{"class":213},[203,43189,32076],{"class":262},[203,43191,214],{"class":213},[203,43193,32095],{"class":262},[203,43195,669],{"class":209},[203,43197,7448],{"class":262},[203,43199,32102],{"class":213},[203,43201,43202,43204,43206,43208,43210,43212],{"class":205,"line":1816},[203,43203,32107],{"class":213},[203,43205,259],{"class":209},[203,43207,32112],{"class":213},[203,43209,31595],{"class":5306},[203,43211,259],{"class":209},[203,43213,31600],{"class":213},[203,43215,43216,43218,43220,43222],{"class":205,"line":1821},[203,43217,32123],{"class":5306},[203,43219,259],{"class":209},[203,43221,411],{"class":262},[203,43223,31524],{"class":213},[203,43225,43226,43228,43230,43232],{"class":205,"line":1838},[203,43227,32135],{"class":5306},[203,43229,259],{"class":209},[203,43231,31534],{"class":262},[203,43233,31524],{"class":213},[203,43235,43236],{"class":205,"line":1843},[203,43237,32146],{"class":272},[203,43239,43240,43242,43244,43246],{"class":205,"line":1848},[203,43241,32151],{"class":5306},[203,43243,259],{"class":209},[203,43245,609],{"class":262},[203,43247,220],{"class":213},[203,43249,43250,43252,43254,43256,43258,43260],{"class":205,"line":1853},[203,43251,32162],{"class":213},[203,43253,259],{"class":209},[203,43255,31592],{"class":213},[203,43257,31595],{"class":5306},[203,43259,259],{"class":209},[203,43261,32173],{"class":213},[203,43263,43264,43266,43268,43270],{"class":205,"line":1867},[203,43265,32178],{"class":5306},[203,43267,259],{"class":209},[203,43269,411],{"class":262},[203,43271,31524],{"class":213},[203,43273,43274,43276,43278,43280],{"class":205,"line":1872},[203,43275,32189],{"class":5306},[203,43277,259],{"class":209},[203,43279,31534],{"class":262},[203,43281,31524],{"class":213},[203,43283,43284,43286,43288,43290],{"class":205,"line":2666},[203,43285,32200],{"class":5306},[203,43287,259],{"class":209},[203,43289,609],{"class":262},[203,43291,220],{"class":213},[203,43293,43294,43296],{"class":205,"line":2680},[203,43295,4179],{"class":209},[203,43297,32213],{"class":213},[203,43299,43300],{"class":205,"line":2688},[203,43301,2489],{"emptyLinePlaceholder":131},[203,43303,43304],{"class":205,"line":2693},[203,43305,32222],{"class":272},[203,43307,43308],{"class":205,"line":2699},[203,43309,32227],{"class":272},[203,43311,43312],{"class":205,"line":2705},[203,43313,2489],{"emptyLinePlaceholder":131},[203,43315,43316],{"class":205,"line":2710},[203,43317,32236],{"class":272},[203,43319,43320,43322,43324],{"class":205,"line":8038},[203,43321,32005],{"class":209},[203,43323,32243],{"class":2052},[203,43325,32246],{"class":213},[203,43327,43328,43330,43332,43334,43336,43338,43340,43342,43344],{"class":205,"line":8062},[203,43329,31295],{"class":213},[203,43331,259],{"class":209},[203,43333,30509],{"class":213},[203,43335,31302],{"class":318},[203,43337,1793],{"class":209},[203,43339,31307],{"class":213},[203,43341,1790],{"class":209},[203,43343,32265],{"class":318},[203,43345,220],{"class":213},[203,43347,43348],{"class":205,"line":8067},[203,43349,2489],{"emptyLinePlaceholder":131},[203,43351,43352],{"class":205,"line":8073},[203,43353,2489],{"emptyLinePlaceholder":131},[203,43355,43356],{"class":205,"line":8100},[203,43357,32280],{"class":272},[203,43359,43360],{"class":205,"line":8105},[203,43361,32285],{"class":272},[203,43363,43364],{"class":205,"line":8111},[203,43365,32290],{"class":272},[203,43367,43368,43370,43372,43374,43376,43378,43380],{"class":205,"line":8123},[203,43369,32295],{"class":213},[203,43371,259],{"class":209},[203,43373,32300],{"class":213},[203,43375,32303],{"class":5306},[203,43377,259],{"class":209},[203,43379,32308],{"class":262},[203,43381,220],{"class":213},[203,43383,43384],{"class":205,"line":8135},[203,43385,2489],{"emptyLinePlaceholder":131},[203,43387,43388],{"class":205,"line":8147},[203,43389,32319],{"class":272},[203,43391,43392,43394,43396],{"class":205,"line":9806},[203,43393,32324],{"class":213},[203,43395,259],{"class":209},[203,43397,32329],{"class":213},[203,43399,43400],{"class":205,"line":9831},[203,43401,2489],{"emptyLinePlaceholder":131},[203,43403,43404],{"class":205,"line":9854},[203,43405,32338],{"class":272},[203,43407,43408,43410,43412],{"class":205,"line":9878},[203,43409,31347],{"class":213},[203,43411,259],{"class":209},[203,43413,32347],{"class":213},[203,43415,43416],{"class":205,"line":9883},[203,43417,32352],{"class":272},[203,43419,43420],{"class":205,"line":9888},[203,43421,32357],{"class":272},[203,43423,43424],{"class":205,"line":9893},[203,43425,32362],{"class":272},[203,43427,43428,43430,43432],{"class":205,"line":9902},[203,43429,32367],{"class":213},[203,43431,259],{"class":209},[203,43433,32372],{"class":213},[203,43435,43436],{"class":205,"line":9907},[203,43437,2489],{"emptyLinePlaceholder":131},[203,43439,43440],{"class":205,"line":9913},[203,43441,2489],{"emptyLinePlaceholder":131},[203,43443,43444],{"class":205,"line":9934},[203,43445,32385],{"class":272},[203,43447,43448],{"class":205,"line":9940},[203,43449,32390],{"class":272},[203,43451,43452,43454,43456],{"class":205,"line":9954},[203,43453,32395],{"class":213},[203,43455,259],{"class":209},[203,43457,32400],{"class":262},[203,43459,43460],{"class":205,"line":9960},[203,43461,32405],{"class":272},[203,43463,43464,43466,43468],{"class":205,"line":9987},[203,43465,32410],{"class":213},[203,43467,259],{"class":209},[203,43469,32415],{"class":213},[203,43471,43472],{"class":205,"line":9996},[203,43473,32420],{"class":272},[203,43475,43476,43478,43480],{"class":205,"line":10002},[203,43477,32425],{"class":213},[203,43479,259],{"class":209},[203,43481,32415],{"class":213},[203,43483,43484],{"class":205,"line":10010},[203,43485,32434],{"class":272},[203,43487,43488,43490,43492],{"class":205,"line":10015},[203,43489,32439],{"class":213},[203,43491,259],{"class":209},[203,43493,32415],{"class":213},[203,43495,43496],{"class":205,"line":16694},[203,43497,32448],{"class":272},[203,43499,43500,43502,43504],{"class":205,"line":16700},[203,43501,32453],{"class":213},[203,43503,259],{"class":209},[203,43505,32415],{"class":213},[203,43507,43508],{"class":205,"line":16723},[203,43509,2489],{"emptyLinePlaceholder":131},[203,43511,43512],{"class":205,"line":16729},[203,43513,32466],{"class":272},[203,43515,43516,43518,43520],{"class":205,"line":16752},[203,43517,32471],{"class":213},[203,43519,259],{"class":209},[203,43521,32476],{"class":213},[203,43523,43524],{"class":205,"line":16766},[203,43525,2489],{"emptyLinePlaceholder":131},[203,43527,43528],{"class":205,"line":16786},[203,43529,2489],{"emptyLinePlaceholder":131},[203,43531,43532],{"class":205,"line":16792},[203,43533,32489],{"class":272},[203,43535,43536,43538,43540,43542,43544],{"class":205,"line":16803},[203,43537,3290],{"class":209},[203,43539,32496],{"class":213},[203,43541,26101],{"class":209},[203,43543,32501],{"class":262},[203,43545,32504],{"class":213},[203,43547,43548,43550,43552,43554,43556,43558,43560,43562,43564,43566,43568],{"class":205,"line":16826},[203,43549,32509],{"class":262},[203,43551,214],{"class":213},[203,43553,32514],{"class":318},[203,43555,32517],{"class":262},[203,43557,798],{"class":318},[203,43559,32517],{"class":262},[203,43561,465],{"class":318},[203,43563,32526],{"class":213},[203,43565,746],{"class":209},[203,43567,431],{"class":262},[203,43569,30555],{"class":213},[203,43571,43572,43574,43576,43578,43580,43582],{"class":205,"line":16848},[203,43573,32509],{"class":262},[203,43575,214],{"class":213},[203,43577,32541],{"class":318},[203,43579,669],{"class":209},[203,43581,660],{"class":262},[203,43583,220],{"class":213},[203,43585,43586],{"class":205,"line":16853},[203,43587,2489],{"emptyLinePlaceholder":131},[203,43589,43590],{"class":205,"line":16859},[203,43591,32556],{"class":272},[203,43593,43594],{"class":205,"line":16873},[203,43595,32561],{"class":272},[203,43597,43598,43600,43602],{"class":205,"line":16886},[203,43599,32566],{"class":213},[203,43601,259],{"class":209},[203,43603,32400],{"class":262},[203,43605,43606],{"class":205,"line":16891},[203,43607,32575],{"class":272},[203,43609,43610,43612,43614],{"class":205,"line":16905},[203,43611,32580],{"class":213},[203,43613,259],{"class":209},[203,43615,3174],{"class":262},[203,43617,43618],{"class":205,"line":16910},[203,43619,32589],{"class":272},[203,43621,43622,43624,43626],{"class":205,"line":16916},[203,43623,32594],{"class":213},[203,43625,259],{"class":209},[203,43627,32400],{"class":262},[203,43629,43630],{"class":205,"line":16921},[203,43631,32603],{"class":272},[203,43633,43634,43636,43638],{"class":205,"line":16935},[203,43635,32608],{"class":213},[203,43637,259],{"class":209},[203,43639,3174],{"class":262},[203,43641,43642],{"class":205,"line":16940},[203,43643,32617],{"class":272},[203,43645,43646,43648,43650],{"class":205,"line":16945},[203,43647,32622],{"class":213},[203,43649,259],{"class":209},[203,43651,3174],{"class":262},[203,43653,43654],{"class":205,"line":16959},[203,43655,32631],{"class":272},[203,43657,43658,43660,43662],{"class":205,"line":16971},[203,43659,32636],{"class":213},[203,43661,259],{"class":209},[203,43663,3174],{"class":262},[203,43665,43666],{"class":205,"line":16976},[203,43667,32645],{"class":272},[203,43669,43670,43672,43674,43676,43678],{"class":205,"line":16989},[203,43671,3492],{"class":209},[203,43673,31659],{"class":213},[203,43675,26101],{"class":209},[203,43677,31664],{"class":262},[203,43679,32658],{"class":213},[203,43681,43682],{"class":205,"line":16994},[203,43683,32663],{"class":272},[203,43685,43686,43688,43690],{"class":205,"line":16999},[203,43687,32668],{"class":213},[203,43689,259],{"class":209},[203,43691,32673],{"class":213},[203,43693,43694],{"class":205,"line":17004},[203,43695,32678],{"class":272},[203,43697,43698,43700,43702],{"class":205,"line":17017},[203,43699,32683],{"class":213},[203,43701,259],{"class":209},[203,43703,32688],{"class":213},[203,43705,43706],{"class":205,"line":17022},[203,43707,32694],{"class":272},[203,43709,43710],{"class":205,"line":32691},[203,43711,32700],{"class":213},[203,43713,43714],{"class":205,"line":32697},[203,43715,32706],{"class":272},[203,43717,43718],{"class":205,"line":32703},[203,43719,32712],{"class":272},[203,43721,43722,43724,43726],{"class":205,"line":32709},[203,43723,32718],{"class":213},[203,43725,259],{"class":209},[203,43727,32723],{"class":213},[203,43729,43730],{"class":205,"line":32715},[203,43731,32729],{"class":272},[203,43733,43734,43736,43738,43740,43742,43744,43746],{"class":205,"line":32726},[203,43735,32735],{"class":213},[203,43737,259],{"class":209},[203,43739,32740],{"class":213},[203,43741,32743],{"class":5306},[203,43743,259],{"class":209},[203,43745,431],{"class":262},[203,43747,220],{"class":213},[203,43749,43750],{"class":205,"line":32732},[203,43751,32755],{"class":272},[203,43753,43754,43756,43758],{"class":205,"line":32752},[203,43755,32761],{"class":213},[203,43757,259],{"class":209},[203,43759,32766],{"class":213},[203,43761,43762],{"class":205,"line":32758},[203,43763,32772],{"class":272},[203,43765,43766],{"class":205,"line":32769},[203,43767,32778],{"class":213},[203,43769,43770],{"class":205,"line":32775},[203,43771,32784],{"class":272},[203,43773,43774],{"class":205,"line":32781},[203,43775,32790],{"class":213},[203,43777,43778],{"class":205,"line":32787},[203,43779,32796],{"class":272},[203,43781,43782],{"class":205,"line":32793},[203,43783,32802],{"class":213},[203,43785,43786],{"class":205,"line":32799},[203,43787,32808],{"class":272},[203,43789,43790,43792,43794,43796,43798,43800,43802],{"class":205,"line":32805},[203,43791,32814],{"class":213},[203,43793,9567],{"class":209},[203,43795,32819],{"class":213},[203,43797,669],{"class":209},[203,43799,32824],{"class":213},[203,43801,405],{"class":262},[203,43803,220],{"class":213},[203,43805,43806],{"class":205,"line":32811},[203,43807,32834],{"class":272},[203,43809,43810,43812,43814,43816,43818],{"class":205,"line":32831},[203,43811,32840],{"class":213},[203,43813,9567],{"class":209},[203,43815,32845],{"class":213},[203,43817,3038],{"class":209},[203,43819,32850],{"class":213},[203,43821,43822],{"class":205,"line":32837},[203,43823,32856],{"class":272},[203,43825,43826,43828,43830,43832,43834],{"class":205,"line":32853},[203,43827,32862],{"class":213},[203,43829,9567],{"class":209},[203,43831,32824],{"class":213},[203,43833,405],{"class":262},[203,43835,220],{"class":213},[203,43837,43838],{"class":205,"line":32859},[203,43839,32876],{"class":272},[203,43841,43842,43844,43846,43848,43850],{"class":205,"line":32873},[203,43843,3492],{"class":209},[203,43845,32884],{"class":213},[203,43847,26101],{"class":209},[203,43849,31664],{"class":262},[203,43851,32891],{"class":213},[203,43853,43854],{"class":205,"line":32879},[203,43855,32897],{"class":272},[203,43857,43858,43860,43862],{"class":205,"line":32894},[203,43859,32668],{"class":213},[203,43861,259],{"class":209},[203,43863,32673],{"class":213},[203,43865,43866],{"class":205,"line":32900},[203,43867,32912],{"class":272},[203,43869,43870,43872,43874],{"class":205,"line":32909},[203,43871,32683],{"class":213},[203,43873,259],{"class":209},[203,43875,32688],{"class":213},[203,43877,43878],{"class":205,"line":32915},[203,43879,32927],{"class":272},[203,43881,43882],{"class":205,"line":32924},[203,43883,32933],{"class":213},[203,43885,43886],{"class":205,"line":32930},[203,43887,36414],{"class":272},[203,43889,43890,43892],{"class":205,"line":32936},[203,43891,32939],{"class":209},[203,43893,32942],{"class":213},[203,43895,43896],{"class":205,"line":32945},[203,43897,32948],{"class":272},[203,43899,43900,43902,43904],{"class":205,"line":32951},[203,43901,36429],{"class":213},[203,43903,259],{"class":209},[203,43905,32723],{"class":213},[203,43907,43908],{"class":205,"line":32962},[203,43909,32965],{"class":272},[203,43911,43912,43914,43916,43918,43920,43922,43924],{"class":205,"line":32968},[203,43913,36442],{"class":213},[203,43915,259],{"class":209},[203,43917,32740],{"class":213},[203,43919,32743],{"class":5306},[203,43921,259],{"class":209},[203,43923,431],{"class":262},[203,43925,220],{"class":213},[203,43927,43928],{"class":205,"line":32987},[203,43929,32990],{"class":272},[203,43931,43932,43934,43936],{"class":205,"line":32993},[203,43933,36463],{"class":213},[203,43935,259],{"class":209},[203,43937,32766],{"class":213},[203,43939,43940],{"class":205,"line":33004},[203,43941,33007],{"class":272},[203,43943,43944,43946,43948,43950,43952,43954,43956],{"class":205,"line":33010},[203,43945,36476],{"class":213},[203,43947,9567],{"class":209},[203,43949,36481],{"class":213},[203,43951,669],{"class":209},[203,43953,32824],{"class":213},[203,43955,405],{"class":262},[203,43957,220],{"class":213},[203,43959,43960,43962,43964,43966,43968],{"class":205,"line":33030},[203,43961,36494],{"class":213},[203,43963,9567],{"class":209},[203,43965,32845],{"class":213},[203,43967,3038],{"class":209},[203,43969,32850],{"class":213},[203,43971,43972],{"class":205,"line":33046},[203,43973,36507],{"class":272},[203,43975,43976,43978,43980,43982,43984],{"class":205,"line":33052},[203,43977,36512],{"class":213},[203,43979,9567],{"class":209},[203,43981,32824],{"class":213},[203,43983,405],{"class":262},[203,43985,220],{"class":213},[203,43987,43988],{"class":205,"line":33066},[203,43989,33069],{"class":272},[203,43991,43992],{"class":205,"line":33072},[203,43993,33075],{"class":272},[203,43995,43996,43998,44000],{"class":205,"line":33078},[203,43997,33081],{"class":213},[203,43999,798],{"class":209},[203,44001,33086],{"class":213},[203,44003,44004],{"class":205,"line":33089},[203,44005,33092],{"class":272},[203,44007,44008],{"class":205,"line":33095},[203,44009,33098],{"class":272},[203,44011,44012,44014,44016],{"class":205,"line":33101},[203,44013,33104],{"class":213},[203,44015,798],{"class":209},[203,44017,33086],{"class":213},[203,44019,44020],{"class":205,"line":33111},[203,44021,33114],{"class":272},[203,44023,44024,44026,44028],{"class":205,"line":33117},[203,44025,33120],{"class":213},[203,44027,798],{"class":209},[203,44029,33125],{"class":213},[203,44031,44032],{"class":205,"line":33128},[203,44033,33131],{"class":272},[203,44035,44036,44038,44040],{"class":205,"line":33134},[203,44037,33137],{"class":213},[203,44039,798],{"class":209},[203,44041,33125],{"class":213},[203,44043,44044],{"class":205,"line":33144},[203,44045,2489],{"emptyLinePlaceholder":131},[203,44047,44048],{"class":205,"line":33149},[203,44049,33152],{"class":272},[203,44051,44052,44054,44056,44058,44060,44062,44064,44066,44068,44070,44072,44074,44076,44078,44080,44082,44084,44086,44088,44090],{"class":205,"line":33155},[203,44053,32509],{"class":262},[203,44055,214],{"class":213},[203,44057,3681],{"class":318},[203,44059,32517],{"class":262},[203,44061,33166],{"class":318},[203,44063,1110],{"class":262},[203,44065,33171],{"class":209},[203,44067,1160],{"class":262},[203,44069,33176],{"class":318},[203,44071,1110],{"class":262},[203,44073,33171],{"class":209},[203,44075,1160],{"class":262},[203,44077,3681],{"class":318},[203,44079,33187],{"class":213},[203,44081,746],{"class":209},[203,44083,431],{"class":262},[203,44085,33194],{"class":213},[203,44087,746],{"class":209},[203,44089,431],{"class":262},[203,44091,33201],{"class":213},[203,44093,44094,44096,44098,44100,44102,44104,44106,44108,44110,44112,44114,44116,44118,44120,44122,44124,44126,44128,44130,44132],{"class":205,"line":33204},[203,44095,32509],{"class":262},[203,44097,214],{"class":213},[203,44099,3681],{"class":318},[203,44101,32517],{"class":262},[203,44103,33215],{"class":318},[203,44105,1110],{"class":262},[203,44107,33171],{"class":209},[203,44109,1160],{"class":262},[203,44111,33224],{"class":318},[203,44113,1110],{"class":262},[203,44115,33171],{"class":209},[203,44117,1160],{"class":262},[203,44119,3681],{"class":318},[203,44121,33235],{"class":213},[203,44123,746],{"class":209},[203,44125,431],{"class":262},[203,44127,33242],{"class":213},[203,44129,746],{"class":209},[203,44131,431],{"class":262},[203,44133,33201],{"class":213},[203,44135,44136],{"class":205,"line":33251},[203,44137,2489],{"emptyLinePlaceholder":131},[203,44139,44140],{"class":205,"line":33256},[203,44141,33259],{"class":272},[203,44143,44144,44146,44148,44150,44152,44154,44156],{"class":205,"line":33262},[203,44145,2586],{"class":209},[203,44147,33267],{"class":213},[203,44149,746],{"class":209},[203,44151,431],{"class":262},[203,44153,1154],{"class":213},[203,44155,1174],{"class":209},[203,44157,33278],{"class":213},[203,44159,44160],{"class":205,"line":33281},[203,44161,33284],{"class":272},[203,44163,44164,44166,44168,44170,44172,44174,44176],{"class":205,"line":33287},[203,44165,33290],{"class":213},[203,44167,253],{"class":262},[203,44169,259],{"class":209},[203,44171,33297],{"class":213},[203,44173,746],{"class":209},[203,44175,431],{"class":262},[203,44177,33304],{"class":213},[203,44179,44180],{"class":205,"line":33307},[203,44181,33310],{"class":272},[203,44183,44184],{"class":205,"line":33313},[203,44185,33316],{"class":272},[203,44187,44188,44190,44192],{"class":205,"line":33319},[203,44189,33322],{"class":213},[203,44191,259],{"class":209},[203,44193,32372],{"class":213},[203,44195,44196],{"class":205,"line":33329},[203,44197,2489],{"emptyLinePlaceholder":131},[203,44199,44200],{"class":205,"line":33334},[203,44201,33337],{"class":272},[203,44203,44204,44206,44208,44210,44212],{"class":205,"line":33340},[203,44205,33343],{"class":213},[203,44207,259],{"class":209},[203,44209,33348],{"class":213},[203,44211,746],{"class":209},[203,44213,33353],{"class":213},[203,44215,44216,44218,44220,44222,44224,44226,44228,44230,44232,44234,44236,44238,44240,44242,44244,44246,44248,44250],{"class":205,"line":33356},[203,44217,32509],{"class":262},[203,44219,214],{"class":213},[203,44221,33363],{"class":318},[203,44223,1110],{"class":262},[203,44225,33368],{"class":209},[203,44227,1160],{"class":262},[203,44229,758],{"class":318},[203,44231,1110],{"class":262},[203,44233,33368],{"class":209},[203,44235,1160],{"class":262},[203,44237,33381],{"class":318},[203,44239,33384],{"class":213},[203,44241,33387],{"class":209},[203,44243,1121],{"class":262},[203,44245,33392],{"class":213},[203,44247,542],{"class":209},[203,44249,1121],{"class":262},[203,44251,30555],{"class":213},[203,44253,44254],{"class":205,"line":33401},[203,44255,36791],{"class":272},[203,44257,44258],{"class":205,"line":33407},[203,44259,36796],{"class":272},[203,44261,44262,44264,44266],{"class":205,"line":33413},[203,44263,36801],{"class":213},[203,44265,33425],{"class":318},[203,44267,220],{"class":213},[203,44269,44270],{"class":205,"line":33419},[203,44271,33445],{"class":272},[203,44273,44274,44276,44278,44280,44282,44284],{"class":205,"line":33430},[203,44275,33451],{"class":213},[203,44277,259],{"class":209},[203,44279,33456],{"class":213},[203,44281,33459],{"class":5306},[203,44283,259],{"class":209},[203,44285,1635],{"class":213},[203,44287,44288,44290,44292,44294],{"class":205,"line":33436},[203,44289,33469],{"class":318},[203,44291,1073],{"class":213},[203,44293,33474],{"class":262},[203,44295,33477],{"class":213},[203,44297,44298,44300],{"class":205,"line":33442},[203,44299,33483],{"class":318},[203,44301,33486],{"class":213},[203,44303,44304,44306],{"class":205,"line":33448},[203,44305,33492],{"class":318},[203,44307,33495],{"class":213},[203,44309,44310,44312],{"class":205,"line":33466},[203,44311,33501],{"class":318},[203,44313,33504],{"class":213},[203,44315,44316,44318],{"class":205,"line":33480},[203,44317,33510],{"class":318},[203,44319,33513],{"class":213},[203,44321,44322],{"class":205,"line":33489},[203,44323,33519],{"class":213},[203,44325,44326],{"class":205,"line":33498},[203,44327,33525],{"class":272},[203,44329,44330,44332],{"class":205,"line":33507},[203,44331,4179],{"class":209},[203,44333,33533],{"class":213},[203,44335,44336],{"class":205,"line":33516},[203,44337,2489],{"emptyLinePlaceholder":131},[203,44339,44340],{"class":205,"line":33522},[203,44341,33544],{"class":272},[203,44343,44344,44346,44348],{"class":205,"line":33528},[203,44345,32005],{"class":209},[203,44347,33552],{"class":2052},[203,44349,33555],{"class":213},[203,44351,44352],{"class":205,"line":33536},[203,44353,33561],{"class":272},[203,44355,44356,44358,44360,44362,44364,44366,44368,44370],{"class":205,"line":33541},[203,44357,33567],{"class":213},[203,44359,31751],{"class":5306},[203,44361,259],{"class":209},[203,44363,214],{"class":213},[203,44365,712],{"class":262},[203,44367,592],{"class":213},[203,44369,507],{"class":262},[203,44371,30555],{"class":213},[203,44373,44374],{"class":205,"line":33547},[203,44375,33587],{"class":272},[203,44377,44378],{"class":205,"line":33558},[203,44379,33593],{"class":272},[203,44381,44382],{"class":205,"line":33564},[203,44383,33599],{"class":272},[203,44385,44386,44388,44390,44392,44394,44396,44398],{"class":205,"line":33584},[203,44387,31785],{"class":213},[203,44389,431],{"class":262},[203,44391,592],{"class":213},[203,44393,291],{"class":262},[203,44395,592],{"class":213},[203,44397,431],{"class":262},[203,44399,220],{"class":213},[203,44401,44402],{"class":205,"line":33590},[203,44403,33622],{"class":272},[203,44405,44406],{"class":205,"line":33596},[203,44407,33628],{"class":272},[203,44409,44410],{"class":205,"line":33602},[203,44411,33634],{"class":272},[203,44413,44414],{"class":205,"line":33619},[203,44415,33640],{"class":272},[203,44417,44418],{"class":205,"line":33625},[203,44419,33646],{"class":272},[203,44421,44422,44424,44426,44428,44430,44432,44434,44436,44438],{"class":205,"line":33631},[203,44423,33652],{"class":213},[203,44425,33655],{"class":318},[203,44427,33658],{"class":213},[203,44429,33661],{"class":318},[203,44431,592],{"class":213},[203,44433,33666],{"class":5306},[203,44435,259],{"class":209},[203,44437,33671],{"class":318},[203,44439,220],{"class":213},[203,44441,44442,44444,44446,44448,44450,44452,44454,44456,44458],{"class":205,"line":33637},[203,44443,33652],{"class":213},[203,44445,33655],{"class":318},[203,44447,33683],{"class":213},[203,44449,33686],{"class":318},[203,44451,592],{"class":213},[203,44453,33666],{"class":5306},[203,44455,259],{"class":209},[203,44457,33695],{"class":318},[203,44459,220],{"class":213},[203,44461,44462],{"class":205,"line":33643},[203,44463,33703],{"class":272},[203,44465,44466],{"class":205,"line":33649},[203,44467,33709],{"class":213},[203,44469,44470],{"class":205,"line":33676},[203,44471,33715],{"class":272},[203,44473,44474,44476,44478],{"class":205,"line":33700},[203,44475,33721],{"class":213},[203,44477,33724],{"class":318},[203,44479,220],{"class":213},[203,44481,44482,44484,44486],{"class":205,"line":33706},[203,44483,33732],{"class":213},[203,44485,33735],{"class":318},[203,44487,220],{"class":213},[203,44489,44490],{"class":205,"line":33712},[203,44491,33743],{"class":272},[203,44493,44494,44496,44498,44500,44502,44504,44506],{"class":205,"line":33718},[203,44495,31785],{"class":213},[203,44497,431],{"class":262},[203,44499,592],{"class":213},[203,44501,291],{"class":262},[203,44503,592],{"class":213},[203,44505,291],{"class":262},[203,44507,220],{"class":213},[203,44509,44510,44512,44514,44516,44518,44520,44522,44524,44526],{"class":205,"line":33729},[203,44511,33652],{"class":213},[203,44513,33655],{"class":318},[203,44515,33770],{"class":213},[203,44517,33661],{"class":318},[203,44519,592],{"class":213},[203,44521,33666],{"class":5306},[203,44523,259],{"class":209},[203,44525,33781],{"class":318},[203,44527,220],{"class":213},[203,44529,44530,44532,44534,44536,44538,44540,44542,44544,44546],{"class":205,"line":33740},[203,44531,33652],{"class":213},[203,44533,33655],{"class":318},[203,44535,33793],{"class":213},[203,44537,33686],{"class":318},[203,44539,592],{"class":213},[203,44541,33666],{"class":5306},[203,44543,259],{"class":209},[203,44545,33804],{"class":318},[203,44547,220],{"class":213},[203,44549,44550],{"class":205,"line":33746},[203,44551,33812],{"class":272},[203,44553,44554],{"class":205,"line":33763},[203,44555,33709],{"class":213},[203,44557,44558,44560,44562],{"class":205,"line":33786},[203,44559,33721],{"class":213},[203,44561,33655],{"class":318},[203,44563,220],{"class":213},[203,44565,44566,44568,44570],{"class":205,"line":33809},[203,44567,33732],{"class":213},[203,44569,33834],{"class":318},[203,44571,220],{"class":213},[203,44573,44574],{"class":205,"line":33815},[203,44575,33842],{"class":213},[203,44577,44578],{"class":205,"line":33820},[203,44579,2489],{"emptyLinePlaceholder":131},[203,44581,44582],{"class":205,"line":33829},[203,44583,33853],{"class":272},[203,44585,44586,44588,44590,44592,44594],{"class":205,"line":33839},[203,44587,1620],{"class":209},[203,44589,31278],{"class":262},[203,44591,3038],{"class":209},[203,44593,31283],{"class":318},[203,44595,3828],{"class":213},[203,44597,44598],{"class":205,"line":33845},[203,44599,33872],{"class":272},[203,44601,44602,44605,44607],{"class":205,"line":33850},[203,44603,44604],{"class":213},"    GoogLeNet",[203,44606,259],{"class":209},[203,44608,44609],{"class":213},"GoogLeNet(Inception)\n",[203,44611,44612,44614,44616],{"class":205,"line":33856},[203,44613,33889],{"class":213},[203,44615,259],{"class":209},[203,44617,33894],{"class":213},[203,44619,44620,44622,44624,44627,44629,44631,44633],{"class":205,"line":33869},[203,44621,33451],{"class":213},[203,44623,259],{"class":209},[203,44625,44626],{"class":213},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[203,44628,33907],{"class":5306},[203,44630,259],{"class":209},[203,44632,1165],{"class":262},[203,44634,220],{"class":213},[203,44636,44637],{"class":205,"line":33875},[203,44638,33919],{"class":213},[157,44640,44641],{"start":1269},[160,44642,40632],{},[194,44644,44646],{"className":30436,"code":44645,"language":30438,"meta":27,"style":27},"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",[200,44647,44648,44654,44664,44674,44678,44688,44699,44703,44707,44711,44719,44735,44745,44761,44771,44785,44789,44799,44809,44819,44825,44829,44833,44841,44845,44861,44869,44873,44877,44885,44893,44897,44901,44905,44909,44915,44919,44929,44937,44945,44949,44953,44957,44965,44969,44985,44989,44993,44997,45009,45013,45025,45029,45033,45045,45049,45059,45063,45067,45079,45083,45091,45095,45099,45107,45111,45119,45123,45127,45131,45135,45139,45155,45163,45167,45171,45219,45225,45229,45239,45247,45255,45259,45263,45267,45271,45279,45283,45299,45303,45311,45319],{"__ignoreMap":27},[203,44649,44650,44652],{"class":205,"line":206},[203,44651,30450],{"class":209},[203,44653,30453],{"class":213},[203,44655,44656,44658,44660,44662],{"class":205,"line":124},[203,44657,30450],{"class":209},[203,44659,31473],{"class":213},[203,44661,31441],{"class":209},[203,44663,31478],{"class":213},[203,44665,44666,44668,44670,44672],{"class":205,"line":1269},[203,44667,30795],{"class":209},[203,44669,31456],{"class":213},[203,44671,30450],{"class":209},[203,44673,31461],{"class":213},[203,44675,44676],{"class":205,"line":1284},[203,44677,33980],{"class":272},[203,44679,44680,44682,44684,44686],{"class":205,"line":1290},[203,44681,30795],{"class":209},[203,44683,31426],{"class":213},[203,44685,30450],{"class":209},[203,44687,31431],{"class":213},[203,44689,44690,44692,44694,44696],{"class":205,"line":1304},[203,44691,30795],{"class":209},[203,44693,31972],{"class":213},[203,44695,30450],{"class":209},[203,44697,44698],{"class":213}," GoogLeNet,Inception\n",[203,44700,44701],{"class":205,"line":1310},[203,44702,2489],{"emptyLinePlaceholder":131},[203,44704,44705],{"class":205,"line":1401},[203,44706,2489],{"emptyLinePlaceholder":131},[203,44708,44709],{"class":205,"line":1407},[203,44710,34009],{"class":272},[203,44712,44713,44715,44717],{"class":205,"line":1419},[203,44714,32005],{"class":209},[203,44716,34016],{"class":2052},[203,44718,32011],{"class":213},[203,44720,44721,44723,44725,44727,44729,44731,44733],{"class":205,"line":1701},[203,44722,34023],{"class":213},[203,44724,259],{"class":209},[203,44726,31513],{"class":213},[203,44728,31516],{"class":5306},[203,44730,259],{"class":209},[203,44732,31521],{"class":318},[203,44734,31524],{"class":213},[203,44736,44737,44739,44741,44743],{"class":205,"line":1706},[203,44738,34040],{"class":5306},[203,44740,259],{"class":209},[203,44742,34045],{"class":262},[203,44744,31524],{"class":213},[203,44746,44747,44749,44751,44753,44755,44757,44759],{"class":205,"line":1712},[203,44748,34052],{"class":5306},[203,44750,259],{"class":209},[203,44752,31551],{"class":213},[203,44754,31554],{"class":5306},[203,44756,259],{"class":209},[203,44758,35507],{"class":262},[203,44760,31562],{"class":213},[203,44762,44763,44765,44767,44769],{"class":205,"line":1717},[203,44764,34069],{"class":5306},[203,44766,259],{"class":209},[203,44768,31534],{"class":262},[203,44770,220],{"class":213},[203,44772,44773,44775,44777,44779,44781,44783],{"class":205,"line":1731},[203,44774,34080],{"class":213},[203,44776,259],{"class":209},[203,44778,31592],{"class":213},[203,44780,31595],{"class":5306},[203,44782,259],{"class":209},[203,44784,34091],{"class":213},[203,44786,44787],{"class":205,"line":1736},[203,44788,34096],{"class":272},[203,44790,44791,44793,44795,44797],{"class":205,"line":1742},[203,44792,34101],{"class":5306},[203,44794,259],{"class":209},[203,44796,431],{"class":262},[203,44798,31524],{"class":213},[203,44800,44801,44803,44805,44807],{"class":205,"line":1763},[203,44802,34112],{"class":5306},[203,44804,259],{"class":209},[203,44806,31534],{"class":262},[203,44808,31524],{"class":213},[203,44810,44811,44813,44815,44817],{"class":205,"line":1768},[203,44812,34123],{"class":5306},[203,44814,259],{"class":209},[203,44816,405],{"class":262},[203,44818,220],{"class":213},[203,44820,44821,44823],{"class":205,"line":1782},[203,44822,4179],{"class":209},[203,44824,34136],{"class":213},[203,44826,44827],{"class":205,"line":1787},[203,44828,2489],{"emptyLinePlaceholder":131},[203,44830,44831],{"class":205,"line":1816},[203,44832,34145],{"class":272},[203,44834,44835,44837,44839],{"class":205,"line":1821},[203,44836,32005],{"class":209},[203,44838,34152],{"class":2052},[203,44840,34155],{"class":213},[203,44842,44843],{"class":205,"line":1838},[203,44844,34160],{"class":272},[203,44846,44847,44849,44851,44853,44855,44857,44859],{"class":205,"line":1843},[203,44848,31295],{"class":213},[203,44850,259],{"class":209},[203,44852,31302],{"class":318},[203,44854,1793],{"class":209},[203,44856,31307],{"class":213},[203,44858,1790],{"class":209},[203,44860,34177],{"class":318},[203,44862,44863,44865,44867],{"class":205,"line":1848},[203,44864,31347],{"class":213},[203,44866,259],{"class":209},[203,44868,32347],{"class":213},[203,44870,44871],{"class":205,"line":1853},[203,44872,2489],{"emptyLinePlaceholder":131},[203,44874,44875],{"class":205,"line":1867},[203,44876,34194],{"class":272},[203,44878,44879,44881,44883],{"class":205,"line":1872},[203,44880,34199],{"class":213},[203,44882,259],{"class":209},[203,44884,32400],{"class":262},[203,44886,44887,44889,44891],{"class":205,"line":2666},[203,44888,34208],{"class":213},[203,44890,259],{"class":209},[203,44892,3174],{"class":262},[203,44894,44895],{"class":205,"line":2680},[203,44896,2489],{"emptyLinePlaceholder":131},[203,44898,44899],{"class":205,"line":2688},[203,44900,34221],{"class":272},[203,44902,44903],{"class":205,"line":2693},[203,44904,34226],{"class":272},[203,44906,44907],{"class":205,"line":2699},[203,44908,34231],{"class":272},[203,44910,44911,44913],{"class":205,"line":2705},[203,44912,34236],{"class":209},[203,44914,32942],{"class":213},[203,44916,44917],{"class":205,"line":2710},[203,44918,34243],{"class":272},[203,44920,44921,44923,44925,44927],{"class":205,"line":8038},[203,44922,3492],{"class":209},[203,44924,34250],{"class":213},[203,44926,26101],{"class":209},[203,44928,34255],{"class":213},[203,44930,44931,44933,44935],{"class":205,"line":8062},[203,44932,34260],{"class":213},[203,44934,259],{"class":209},[203,44936,34265],{"class":213},[203,44938,44939,44941,44943],{"class":205,"line":8067},[203,44940,34270],{"class":213},[203,44942,259],{"class":209},[203,44944,34275],{"class":213},[203,44946,44947],{"class":205,"line":8073},[203,44948,34280],{"class":272},[203,44950,44951],{"class":205,"line":8100},[203,44952,32933],{"class":213},[203,44954,44955],{"class":205,"line":8105},[203,44956,34289],{"class":272},[203,44958,44959,44961,44963],{"class":205,"line":8111},[203,44960,32718],{"class":213},[203,44962,259],{"class":209},[203,44964,34298],{"class":213},[203,44966,44967],{"class":205,"line":8123},[203,44968,34303],{"class":272},[203,44970,44971,44973,44975,44977,44979,44981,44983],{"class":205,"line":8135},[203,44972,32735],{"class":213},[203,44974,259],{"class":209},[203,44976,32740],{"class":213},[203,44978,32743],{"class":5306},[203,44980,259],{"class":209},[203,44982,431],{"class":262},[203,44984,220],{"class":213},[203,44986,44987],{"class":205,"line":8147},[203,44988,34324],{"class":272},[203,44990,44991],{"class":205,"line":9806},[203,44992,34329],{"class":272},[203,44994,44995],{"class":205,"line":9831},[203,44996,34334],{"class":272},[203,44998,44999,45001,45003,45005,45007],{"class":205,"line":9854},[203,45000,34339],{"class":213},[203,45002,9567],{"class":209},[203,45004,32845],{"class":213},[203,45006,3038],{"class":209},[203,45008,34348],{"class":213},[203,45010,45011],{"class":205,"line":9878},[203,45012,34353],{"class":272},[203,45014,45015,45017,45019,45021,45023],{"class":205,"line":9883},[203,45016,34358],{"class":213},[203,45018,9567],{"class":209},[203,45020,34363],{"class":213},[203,45022,405],{"class":262},[203,45024,220],{"class":213},[203,45026,45027],{"class":205,"line":9888},[203,45028,2489],{"emptyLinePlaceholder":131},[203,45030,45031],{"class":205,"line":9893},[203,45032,34376],{"class":272},[203,45034,45035,45037,45039,45041,45043],{"class":205,"line":9902},[203,45036,34381],{"class":213},[203,45038,259],{"class":209},[203,45040,34386],{"class":213},[203,45042,798],{"class":209},[203,45044,34391],{"class":213},[203,45046,45047],{"class":205,"line":9907},[203,45048,34396],{"class":272},[203,45050,45051,45053,45055,45057],{"class":205,"line":9913},[203,45052,32509],{"class":262},[203,45054,214],{"class":213},[203,45056,34405],{"class":318},[203,45058,34408],{"class":213},[203,45060,45061],{"class":205,"line":9934},[203,45062,2489],{"emptyLinePlaceholder":131},[203,45064,45065],{"class":205,"line":9940},[203,45066,34417],{"class":272},[203,45068,45069,45071,45073,45075,45077],{"class":205,"line":9954},[203,45070,1620],{"class":209},[203,45072,31278],{"class":262},[203,45074,3038],{"class":209},[203,45076,31283],{"class":318},[203,45078,3828],{"class":213},[203,45080,45081],{"class":205,"line":9960},[203,45082,34434],{"class":272},[203,45084,45085,45087,45089],{"class":205,"line":9987},[203,45086,31347],{"class":213},[203,45088,259],{"class":209},[203,45090,44609],{"class":213},[203,45092,45093],{"class":205,"line":9996},[203,45094,34447],{"class":272},[203,45096,45097],{"class":205,"line":10002},[203,45098,34452],{"class":272},[203,45100,45101,45103,45105],{"class":205,"line":10010},[203,45102,34457],{"class":213},[203,45104,34460],{"class":318},[203,45106,30555],{"class":213},[203,45108,45109],{"class":205,"line":10015},[203,45110,34467],{"class":272},[203,45112,45113,45115,45117],{"class":205,"line":16694},[203,45114,34080],{"class":213},[203,45116,259],{"class":209},[203,45118,34476],{"class":213},[203,45120,45121],{"class":205,"line":16700},[203,45122,34481],{"class":272},[203,45124,45125],{"class":205,"line":16723},[203,45126,34486],{"class":213},[203,45128,45129],{"class":205,"line":16729},[203,45130,2489],{"emptyLinePlaceholder":131},[203,45132,45133],{"class":205,"line":16752},[203,45134,34495],{"class":272},[203,45136,45137],{"class":205,"line":16766},[203,45138,34500],{"class":272},[203,45140,45141,45143,45145,45147,45149,45151,45153],{"class":205,"line":16786},[203,45142,31295],{"class":213},[203,45144,259],{"class":209},[203,45146,31302],{"class":318},[203,45148,1793],{"class":209},[203,45150,31307],{"class":213},[203,45152,1790],{"class":209},[203,45154,34177],{"class":318},[203,45156,45157,45159,45161],{"class":205,"line":16792},[203,45158,31347],{"class":213},[203,45160,259],{"class":209},[203,45162,32347],{"class":213},[203,45164,45165],{"class":205,"line":16803},[203,45166,34529],{"class":272},[203,45168,45169],{"class":205,"line":16826},[203,45170,34534],{"class":272},[203,45172,45173,45175,45177,45179,45181,45183,45185,45187,45189,45191,45193,45195,45197,45199,45201,45203,45205,45207,45209,45211,45213,45215,45217],{"class":205,"line":16848},[203,45174,34539],{"class":213},[203,45176,259],{"class":209},[203,45178,1104],{"class":213},[203,45180,34546],{"class":318},[203,45182,592],{"class":213},[203,45184,34551],{"class":318},[203,45186,592],{"class":213},[203,45188,34556],{"class":318},[203,45190,592],{"class":213},[203,45192,34561],{"class":318},[203,45194,592],{"class":213},[203,45196,34566],{"class":318},[203,45198,592],{"class":213},[203,45200,34571],{"class":318},[203,45202,592],{"class":213},[203,45204,34576],{"class":318},[203,45206,592],{"class":213},[203,45208,34581],{"class":318},[203,45210,592],{"class":213},[203,45212,34586],{"class":318},[203,45214,592],{"class":213},[203,45216,34591],{"class":318},[203,45218,33304],{"class":213},[203,45220,45221,45223],{"class":205,"line":16853},[203,45222,34236],{"class":209},[203,45224,32942],{"class":213},[203,45226,45227],{"class":205,"line":16859},[203,45228,34604],{"class":272},[203,45230,45231,45233,45235,45237],{"class":205,"line":16873},[203,45232,3492],{"class":209},[203,45234,34611],{"class":213},[203,45236,26101],{"class":209},[203,45238,34255],{"class":213},[203,45240,45241,45243,45245],{"class":205,"line":16886},[203,45242,32668],{"class":213},[203,45244,259],{"class":209},[203,45246,32673],{"class":213},[203,45248,45249,45251,45253],{"class":205,"line":16891},[203,45250,32683],{"class":213},[203,45252,259],{"class":209},[203,45254,32688],{"class":213},[203,45256,45257],{"class":205,"line":16905},[203,45258,2489],{"emptyLinePlaceholder":131},[203,45260,45261],{"class":205,"line":16910},[203,45262,34640],{"class":272},[203,45264,45265],{"class":205,"line":16916},[203,45266,32933],{"class":213},[203,45268,45269],{"class":205,"line":16921},[203,45270,34649],{"class":272},[203,45272,45273,45275,45277],{"class":205,"line":16935},[203,45274,32718],{"class":213},[203,45276,259],{"class":209},[203,45278,32723],{"class":213},[203,45280,45281],{"class":205,"line":16940},[203,45282,34662],{"class":272},[203,45284,45285,45287,45289,45291,45293,45295,45297],{"class":205,"line":16945},[203,45286,32735],{"class":213},[203,45288,259],{"class":209},[203,45290,32740],{"class":213},[203,45292,32743],{"class":5306},[203,45294,259],{"class":209},[203,45296,431],{"class":262},[203,45298,220],{"class":213},[203,45300,45301],{"class":205,"line":16959},[203,45302,34683],{"class":272},[203,45304,45305,45307,45309],{"class":205,"line":16971},[203,45306,34688],{"class":213},[203,45308,259],{"class":209},[203,45310,34693],{"class":213},[203,45312,45313,45315,45317],{"class":205,"line":16976},[203,45314,34698],{"class":213},[203,45316,259],{"class":209},[203,45318,34703],{"class":213},[203,45320,45321,45323,45325,45327,45329,45331,45333,45335],{"class":205,"line":16989},[203,45322,34708],{"class":262},[203,45324,214],{"class":213},[203,45326,34713],{"class":318},[203,45328,34716],{"class":213},[203,45330,34719],{"class":318},[203,45332,592],{"class":213},[203,45334,34724],{"class":318},[203,45336,34727],{"class":213},[174,45338,45340],{"id":45339},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45342,45343],{},"猫狗分类任务",[19,45345,45346],{},"划分数据集和验证集",[194,45348,45350],{"className":30436,"code":45349,"language":30438,"meta":27,"style":27},"# 创建脚本，用于划分数据集和验证集\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",[200,45351,45352,45357,45364,45369,45380,45387,45391,45401,45415,45424,45428,45433,45443,45463,45467,45472,45482,45493,45506,45510,45515,45524,45534,45545,45549,45554,45564,45568,45573,45578,45583,45588,45593,45597,45607,45634,45647,45659,45686,45691,45696,45710,45715,45727,45742,45757,45765,45769,45774,45780,45792,45805,45810,45815,45820,45870,45876,45880],{"__ignoreMap":27},[203,45353,45354],{"class":205,"line":206},[203,45355,45356],{"class":272},"# 创建脚本，用于划分数据集和验证集\n",[203,45358,45359,45361],{"class":205,"line":124},[203,45360,30450],{"class":209},[203,45362,45363],{"class":213}," os\n",[203,45365,45366],{"class":205,"line":1269},[203,45367,45368],{"class":272},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[203,45370,45371,45373,45376,45378],{"class":205,"line":1284},[203,45372,30795],{"class":209},[203,45374,45375],{"class":213}," shutil ",[203,45377,30450],{"class":209},[203,45379,31880],{"class":213},[203,45381,45382,45384],{"class":205,"line":1290},[203,45383,30450],{"class":209},[203,45385,45386],{"class":213}," random\n",[203,45388,45389],{"class":205,"line":1304},[203,45390,2489],{"emptyLinePlaceholder":131},[203,45392,45393,45395,45398],{"class":205,"line":1310},[203,45394,32005],{"class":209},[203,45396,45397],{"class":2052}," mkfile",[203,45399,45400],{"class":213},"(file):\n",[203,45402,45403,45405,45407,45410,45413],{"class":205,"line":1401},[203,45404,3190],{"class":209},[203,45406,38988],{"class":209},[203,45408,45409],{"class":213}," os.path.exists(",[203,45411,45412],{"class":5306},"file",[203,45414,30844],{"class":213},[203,45416,45417,45420,45422],{"class":205,"line":1407},[203,45418,45419],{"class":213},"        os.makedirs(",[203,45421,45412],{"class":5306},[203,45423,220],{"class":213},[203,45425,45426],{"class":205,"line":1419},[203,45427,2489],{"emptyLinePlaceholder":131},[203,45429,45430],{"class":205,"line":1701},[203,45431,45432],{"class":272},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[203,45434,45435,45438,45440],{"class":205,"line":1706},[203,45436,45437],{"class":213},"file_path",[203,45439,259],{"class":209},[203,45441,45442],{"class":318},"'data_cat_dog'\n",[203,45444,45445,45448,45450,45453,45455,45458,45460],{"class":205,"line":1712},[203,45446,45447],{"class":213},"flower_class",[203,45449,259],{"class":209},[203,45451,45452],{"class":213},"[cla ",[203,45454,3114],{"class":209},[203,45456,45457],{"class":213}," cla ",[203,45459,26101],{"class":209},[203,45461,45462],{"class":213}," os.listdir(file_path)]\n",[203,45464,45465],{"class":205,"line":1717},[203,45466,2489],{"emptyLinePlaceholder":131},[203,45468,45469],{"class":205,"line":1731},[203,45470,45471],{"class":272},"# 创建训练集train文件夹\n",[203,45473,45474,45477,45480],{"class":205,"line":1736},[203,45475,45476],{"class":213},"mkfile(",[203,45478,45479],{"class":318},"'data\u002Ftrain'",[203,45481,220],{"class":213},[203,45483,45484,45486,45488,45490],{"class":205,"line":1742},[203,45485,3114],{"class":209},[203,45487,45457],{"class":213},[203,45489,26101],{"class":209},[203,45491,45492],{"class":213}," flower_class:\n",[203,45494,45495,45498,45501,45503],{"class":205,"line":1763},[203,45496,45497],{"class":213},"    mkfile(",[203,45499,45500],{"class":318},"'data\u002Ftrain\u002F'",[203,45502,695],{"class":209},[203,45504,45505],{"class":213},"cla)\n",[203,45507,45508],{"class":205,"line":1768},[203,45509,2489],{"emptyLinePlaceholder":131},[203,45511,45512],{"class":205,"line":1782},[203,45513,45514],{"class":272},"# 创建验证集val文件夹\n",[203,45516,45517,45519,45522],{"class":205,"line":1787},[203,45518,45476],{"class":213},[203,45520,45521],{"class":318},"'data\u002Ftest'",[203,45523,220],{"class":213},[203,45525,45526,45528,45530,45532],{"class":205,"line":1816},[203,45527,3114],{"class":209},[203,45529,45457],{"class":213},[203,45531,26101],{"class":209},[203,45533,45492],{"class":213},[203,45535,45536,45538,45541,45543],{"class":205,"line":1821},[203,45537,45497],{"class":213},[203,45539,45540],{"class":318},"'data\u002Ftest\u002F'",[203,45542,695],{"class":209},[203,45544,45505],{"class":213},[203,45546,45547],{"class":205,"line":1838},[203,45548,2489],{"emptyLinePlaceholder":131},[203,45550,45551],{"class":205,"line":1843},[203,45552,45553],{"class":272},"# 划分比例，训练集：测试集=9：1\n",[203,45555,45556,45559,45561],{"class":205,"line":1848},[203,45557,45558],{"class":213},"split_rate",[203,45560,259],{"class":209},[203,45562,45563],{"class":262},"0.1\n",[203,45565,45566],{"class":205,"line":1853},[203,45567,2489],{"emptyLinePlaceholder":131},[203,45569,45570],{"class":205,"line":1867},[203,45571,45572],{"class":272},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[203,45574,45575],{"class":205,"line":1872},[203,45576,45577],{"class":272},"# cla_path：当前类别的原始图片路径\n",[203,45579,45580],{"class":205,"line":2666},[203,45581,45582],{"class":272},"# images：当前类别下所有图片的文件名列表\n",[203,45584,45585],{"class":205,"line":2680},[203,45586,45587],{"class":272},"# num：该类别图片总数\n",[203,45589,45590],{"class":205,"line":2688},[203,45591,45592],{"class":272},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[203,45594,45595],{"class":205,"line":2693},[203,45596,2489],{"emptyLinePlaceholder":131},[203,45598,45599,45601,45603,45605],{"class":205,"line":2699},[203,45600,3114],{"class":209},[203,45602,45457],{"class":213},[203,45604,26101],{"class":209},[203,45606,45492],{"class":213},[203,45608,45609,45612,45614,45617,45619,45622,45625,45627,45629,45631],{"class":205,"line":2705},[203,45610,45611],{"class":213},"    cla_path ",[203,45613,259],{"class":209},[203,45615,45616],{"class":213}," file_path ",[203,45618,695],{"class":209},[203,45620,45621],{"class":318}," '\u002F'",[203,45623,45624],{"class":209}," +",[203,45626,45457],{"class":213},[203,45628,695],{"class":209},[203,45630,45621],{"class":318},[203,45632,45633],{"class":272},"  # 某一类别的子目录\n",[203,45635,45636,45639,45641,45644],{"class":205,"line":2710},[203,45637,45638],{"class":213},"    images ",[203,45640,259],{"class":209},[203,45642,45643],{"class":213}," os.listdir(cla_path)  ",[203,45645,45646],{"class":272},"# iamges 列表存储了该目录下所有图像的名称\n",[203,45648,45649,45652,45654,45656],{"class":205,"line":8038},[203,45650,45651],{"class":213},"    num ",[203,45653,259],{"class":209},[203,45655,7421],{"class":262},[203,45657,45658],{"class":213},"(images)\n",[203,45660,45661,45664,45666,45669,45671,45673,45675,45678,45680,45683],{"class":205,"line":8062},[203,45662,45663],{"class":213},"    eval_index ",[203,45665,259],{"class":209},[203,45667,45668],{"class":213}," random.sample(images, ",[203,45670,707],{"class":5306},[203,45672,259],{"class":209},[203,45674,217],{"class":262},[203,45676,45677],{"class":213},"(num ",[203,45679,669],{"class":209},[203,45681,45682],{"class":213}," split_rate))  ",[203,45684,45685],{"class":272},"# 从images列表中随机抽取 k 个图像名称\n",[203,45687,45688],{"class":205,"line":8067},[203,45689,45690],{"class":272},"    # 遍历该类别下的所有图片\n",[203,45692,45693],{"class":205,"line":8073},[203,45694,45695],{"class":272},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[203,45697,45698,45700,45703,45705,45707],{"class":205,"line":8100},[203,45699,3290],{"class":209},[203,45701,45702],{"class":213}," index, image ",[203,45704,26101],{"class":209},[203,45706,31664],{"class":262},[203,45708,45709],{"class":213},"(images):\n",[203,45711,45712],{"class":205,"line":8105},[203,45713,45714],{"class":272},"        # eval_index 中保存验证集val的图像名称\n",[203,45716,45717,45719,45722,45724],{"class":205,"line":8111},[203,45718,2586],{"class":209},[203,45720,45721],{"class":213}," image ",[203,45723,26101],{"class":209},[203,45725,45726],{"class":213}," eval_index:\n",[203,45728,45729,45732,45734,45737,45739],{"class":205,"line":8123},[203,45730,45731],{"class":213},"            image_path ",[203,45733,259],{"class":209},[203,45735,45736],{"class":213}," cla_path ",[203,45738,695],{"class":209},[203,45740,45741],{"class":213}," image\n",[203,45743,45744,45747,45749,45752,45754],{"class":205,"line":8135},[203,45745,45746],{"class":213},"            new_path ",[203,45748,259],{"class":209},[203,45750,45751],{"class":318}," 'data\u002Ftest\u002F'",[203,45753,45624],{"class":209},[203,45755,45756],{"class":213}," cla\n",[203,45758,45759,45762],{"class":205,"line":8147},[203,45760,45761],{"class":213},"            copy(image_path, new_path)  ",[203,45763,45764],{"class":272},"# 将选中的图像复制到新路径\n",[203,45766,45767],{"class":205,"line":9806},[203,45768,2489],{"emptyLinePlaceholder":131},[203,45770,45771],{"class":205,"line":9831},[203,45772,45773],{"class":272},"        # 其余的图像保存在训练集train中\n",[203,45775,45776,45778],{"class":205,"line":9854},[203,45777,2623],{"class":209},[203,45779,3828],{"class":213},[203,45781,45782,45784,45786,45788,45790],{"class":205,"line":9878},[203,45783,45731],{"class":213},[203,45785,259],{"class":209},[203,45787,45736],{"class":213},[203,45789,695],{"class":209},[203,45791,45741],{"class":213},[203,45793,45794,45796,45798,45801,45803],{"class":205,"line":9883},[203,45795,45746],{"class":213},[203,45797,259],{"class":209},[203,45799,45800],{"class":318}," 'data\u002Ftrain\u002F'",[203,45802,45624],{"class":209},[203,45804,45756],{"class":213},[203,45806,45807],{"class":205,"line":9888},[203,45808,45809],{"class":213},"            copy(image_path, new_path)\n",[203,45811,45812],{"class":205,"line":9893},[203,45813,45814],{"class":272},"            # 打印进度条信息\n",[203,45816,45817],{"class":205,"line":9902},[203,45818,45819],{"class":272},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[203,45821,45822,45824,45826,45828,45831,45833,45835,45838,45840,45842,45844,45847,45850,45852,45854,45857,45860,45862,45864,45867],{"class":205,"line":9907},[203,45823,32509],{"class":262},[203,45825,214],{"class":213},[203,45827,465],{"class":318},[203,45829,45830],{"class":262},"\\r",[203,45832,1104],{"class":318},[203,45834,32517],{"class":262},[203,45836,45837],{"class":318},"] processing [",[203,45839,32517],{"class":262},[203,45841,798],{"class":318},[203,45843,32517],{"class":262},[203,45845,45846],{"class":318},"]\"",[203,45848,45849],{"class":213},".format(cla, index ",[203,45851,695],{"class":209},[203,45853,25176],{"class":262},[203,45855,45856],{"class":213},", num), ",[203,45858,45859],{"class":5306},"end",[203,45861,259],{"class":209},[203,45863,7742],{"class":318},[203,45865,45866],{"class":213},")  ",[203,45868,45869],{"class":272},"# processing bar\n",[203,45871,45872,45874],{"class":205,"line":9913},[203,45873,31357],{"class":262},[203,45875,2065],{"class":213},[203,45877,45878],{"class":205,"line":9934},[203,45879,2489],{"emptyLinePlaceholder":131},[203,45881,45882,45884,45886,45889],{"class":205,"line":9940},[203,45883,30473],{"class":262},[203,45885,214],{"class":213},[203,45887,45888],{"class":318},"\"processing done!\"",[203,45890,220],{"class":213},[19,45892,45893],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22088,45895,45897],{"id":45896},"_242模型代码","2.4.2.模型代码",[19,45899,45900],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[194,45902,45904],{"className":30436,"code":45903,"language":30438,"meta":27,"style":27},"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",[200,45905,45906,45912,45922,45932,45936,45952,45960,45974,45984,45988,46018,46022,46056,46102,46106,46140,46186,46190,46194,46228,46258,46262,46270,46284,46306,46328,46346,46350,46364,46368,46372,46388,46392,46400,46414,46424,46468,46472,46500,46504,46514,46542,46546,46582,46586,46614,46618,46628,46660,46692,46720,46724,46734,46766,46798,46830,46862,46894,46922,46926,46936,46968,47000,47012,47016,47028,47032,47036,47048,47056,47076,47080,47084,47088,47092,47096,47100,47114,47122,47130,47142,47156,47164,47168,47176,47186,47196,47206,47216,47226,47232,47236,47240,47252,47272,47280],{"__ignoreMap":27},[203,45907,45908,45910],{"class":205,"line":206},[203,45909,30450],{"class":209},[203,45911,30453],{"class":213},[203,45913,45914,45916,45918,45920],{"class":205,"line":124},[203,45915,30795],{"class":209},[203,45917,30798],{"class":213},[203,45919,30450],{"class":209},[203,45921,30803],{"class":213},[203,45923,45924,45926,45928,45930],{"class":205,"line":1269},[203,45925,30795],{"class":209},[203,45927,30815],{"class":213},[203,45929,30450],{"class":209},[203,45931,30820],{"class":213},[203,45933,45934],{"class":205,"line":1284},[203,45935,2489],{"emptyLinePlaceholder":131},[203,45937,45938,45940,45942,45944,45946,45948,45950],{"class":205,"line":1290},[203,45939,14784],{"class":209},[203,45941,41551],{"class":2052},[203,45943,214],{"class":213},[203,45945,30836],{"class":2052},[203,45947,772],{"class":213},[203,45949,30841],{"class":2052},[203,45951,30844],{"class":213},[203,45953,45954,45956,45958],{"class":205,"line":1304},[203,45955,30859],{"class":209},[203,45957,30862],{"class":262},[203,45959,41570],{"class":213},[203,45961,45962,45964,45966,45968,45970,45972],{"class":205,"line":1310},[203,45963,30875],{"class":262},[203,45965,41577],{"class":213},[203,45967,30881],{"class":262},[203,45969,30884],{"class":213},[203,45971,30887],{"class":262},[203,45973,2065],{"class":213},[203,45975,45976,45978,45980,45982],{"class":205,"line":1401},[203,45977,30903],{"class":262},[203,45979,34829],{"class":213},[203,45981,259],{"class":209},[203,45983,34834],{"class":213},[203,45985,45986],{"class":205,"line":1407},[203,45987,41600],{"class":272},[203,45989,45990,45992,45994,45996,45998,46000,46002,46004,46006,46008,46010,46012,46014,46016],{"class":205,"line":1419},[203,45991,30903],{"class":262},[203,45993,41607],{"class":213},[203,45995,259],{"class":209},[203,45997,30911],{"class":213},[203,45999,30914],{"class":5306},[203,46001,259],{"class":209},[203,46003,41618],{"class":213},[203,46005,30923],{"class":5306},[203,46007,259],{"class":209},[203,46009,41625],{"class":213},[203,46011,30932],{"class":5306},[203,46013,259],{"class":209},[203,46015,431],{"class":262},[203,46017,220],{"class":213},[203,46019,46020],{"class":205,"line":1701},[203,46021,41638],{"class":272},[203,46023,46024,46026,46028,46030,46032,46034,46036,46038,46040,46042,46044,46046,46048,46050,46052,46054],{"class":205,"line":1706},[203,46025,30903],{"class":262},[203,46027,41645],{"class":213},[203,46029,259],{"class":209},[203,46031,30911],{"class":213},[203,46033,30914],{"class":5306},[203,46035,259],{"class":209},[203,46037,41618],{"class":213},[203,46039,30923],{"class":5306},[203,46041,259],{"class":209},[203,46043,41662],{"class":213},[203,46045,405],{"class":262},[203,46047,41667],{"class":213},[203,46049,30932],{"class":5306},[203,46051,259],{"class":209},[203,46053,431],{"class":262},[203,46055,220],{"class":213},[203,46057,46058,46060,46062,46064,46066,46068,46070,46072,46074,46076,46078,46080,46082,46084,46086,46088,46090,46092,46094,46096,46098,46100],{"class":205,"line":1712},[203,46059,30903],{"class":262},[203,46061,41682],{"class":213},[203,46063,259],{"class":209},[203,46065,30911],{"class":213},[203,46067,30914],{"class":5306},[203,46069,259],{"class":209},[203,46071,41662],{"class":213},[203,46073,405],{"class":262},[203,46075,41667],{"class":213},[203,46077,30923],{"class":5306},[203,46079,259],{"class":209},[203,46081,41662],{"class":213},[203,46083,431],{"class":262},[203,46085,41667],{"class":213},[203,46087,30932],{"class":5306},[203,46089,259],{"class":209},[203,46091,285],{"class":262},[203,46093,592],{"class":213},[203,46095,30941],{"class":5306},[203,46097,259],{"class":209},[203,46099,431],{"class":262},[203,46101,220],{"class":213},[203,46103,46104],{"class":205,"line":1717},[203,46105,41727],{"class":272},[203,46107,46108,46110,46112,46114,46116,46118,46120,46122,46124,46126,46128,46130,46132,46134,46136,46138],{"class":205,"line":1731},[203,46109,30903],{"class":262},[203,46111,41734],{"class":213},[203,46113,259],{"class":209},[203,46115,30911],{"class":213},[203,46117,30914],{"class":5306},[203,46119,259],{"class":209},[203,46121,41618],{"class":213},[203,46123,30923],{"class":5306},[203,46125,259],{"class":209},[203,46127,41751],{"class":213},[203,46129,405],{"class":262},[203,46131,41667],{"class":213},[203,46133,30932],{"class":5306},[203,46135,259],{"class":209},[203,46137,431],{"class":262},[203,46139,220],{"class":213},[203,46141,46142,46144,46146,46148,46150,46152,46154,46156,46158,46160,46162,46164,46166,46168,46170,46172,46174,46176,46178,46180,46182,46184],{"class":205,"line":1736},[203,46143,30903],{"class":262},[203,46145,41770],{"class":213},[203,46147,259],{"class":209},[203,46149,30911],{"class":213},[203,46151,30914],{"class":5306},[203,46153,259],{"class":209},[203,46155,41751],{"class":213},[203,46157,405],{"class":262},[203,46159,41667],{"class":213},[203,46161,30923],{"class":5306},[203,46163,259],{"class":209},[203,46165,41751],{"class":213},[203,46167,431],{"class":262},[203,46169,41667],{"class":213},[203,46171,30932],{"class":5306},[203,46173,259],{"class":209},[203,46175,533],{"class":262},[203,46177,592],{"class":213},[203,46179,30941],{"class":5306},[203,46181,259],{"class":209},[203,46183,291],{"class":262},[203,46185,220],{"class":213},[203,46187,46188],{"class":205,"line":1742},[203,46189,41815],{"class":272},[203,46191,46192],{"class":205,"line":1763},[203,46193,41820],{"class":272},[203,46195,46196,46198,46200,46202,46204,46206,46208,46210,46212,46214,46216,46218,46220,46222,46224,46226],{"class":205,"line":1768},[203,46197,30903],{"class":262},[203,46199,41827],{"class":213},[203,46201,259],{"class":209},[203,46203,34887],{"class":213},[203,46205,30932],{"class":5306},[203,46207,259],{"class":209},[203,46209,285],{"class":262},[203,46211,592],{"class":213},[203,46213,30987],{"class":5306},[203,46215,259],{"class":209},[203,46217,431],{"class":262},[203,46219,592],{"class":213},[203,46221,30941],{"class":5306},[203,46223,259],{"class":209},[203,46225,431],{"class":262},[203,46227,220],{"class":213},[203,46229,46230,46232,46234,46236,46238,46240,46242,46244,46246,46248,46250,46252,46254,46256],{"class":205,"line":1782},[203,46231,30903],{"class":262},[203,46233,41862],{"class":213},[203,46235,259],{"class":209},[203,46237,30911],{"class":213},[203,46239,30914],{"class":5306},[203,46241,259],{"class":209},[203,46243,41618],{"class":213},[203,46245,30923],{"class":5306},[203,46247,259],{"class":209},[203,46249,41879],{"class":213},[203,46251,30932],{"class":5306},[203,46253,259],{"class":209},[203,46255,431],{"class":262},[203,46257,220],{"class":213},[203,46259,46260],{"class":205,"line":1787},[203,46261,2489],{"emptyLinePlaceholder":131},[203,46263,46264,46266,46268],{"class":205,"line":1816},[203,46265,30859],{"class":209},[203,46267,31151],{"class":2052},[203,46269,31154],{"class":213},[203,46271,46272,46274,46276,46278,46280,46282],{"class":205,"line":1821},[203,46273,41904],{"class":213},[203,46275,259],{"class":209},[203,46277,30881],{"class":262},[203,46279,35242],{"class":213},[203,46281,30881],{"class":262},[203,46283,41915],{"class":213},[203,46285,46286,46288,46290,46292,46294,46296,46298,46300,46302,46304],{"class":205,"line":1838},[203,46287,7175],{"class":213},[203,46289,259],{"class":209},[203,46291,30881],{"class":262},[203,46293,35242],{"class":213},[203,46295,30881],{"class":262},[203,46297,41930],{"class":213},[203,46299,30881],{"class":262},[203,46301,35242],{"class":213},[203,46303,30881],{"class":262},[203,46305,41939],{"class":213},[203,46307,46308,46310,46312,46314,46316,46318,46320,46322,46324,46326],{"class":205,"line":1843},[203,46309,41944],{"class":213},[203,46311,259],{"class":209},[203,46313,30881],{"class":262},[203,46315,35242],{"class":213},[203,46317,30881],{"class":262},[203,46319,41955],{"class":213},[203,46321,30881],{"class":262},[203,46323,35242],{"class":213},[203,46325,30881],{"class":262},[203,46327,41964],{"class":213},[203,46329,46330,46332,46334,46336,46338,46340,46342,46344],{"class":205,"line":1848},[203,46331,41969],{"class":213},[203,46333,259],{"class":209},[203,46335,30881],{"class":262},[203,46337,35242],{"class":213},[203,46339,30881],{"class":262},[203,46341,41980],{"class":213},[203,46343,30881],{"class":262},[203,46345,41985],{"class":213},[203,46347,46348],{"class":205,"line":1853},[203,46349,41990],{"class":272},[203,46351,46352,46354,46356,46358,46360,46362],{"class":205,"line":1867},[203,46353,14842],{"class":209},[203,46355,41997],{"class":213},[203,46357,32743],{"class":5306},[203,46359,259],{"class":209},[203,46361,431],{"class":262},[203,46363,220],{"class":213},[203,46365,46366],{"class":205,"line":1872},[203,46367,2489],{"emptyLinePlaceholder":131},[203,46369,46370],{"class":205,"line":2666},[203,46371,42018],{"class":272},[203,46373,46374,46376,46378,46380,46382,46384,46386],{"class":205,"line":2680},[203,46375,14784],{"class":209},[203,46377,42025],{"class":2052},[203,46379,214],{"class":213},[203,46381,30836],{"class":2052},[203,46383,772],{"class":213},[203,46385,30841],{"class":2052},[203,46387,30844],{"class":213},[203,46389,46390],{"class":205,"line":2688},[203,46391,42040],{"class":272},[203,46393,46394,46396,46398],{"class":205,"line":2693},[203,46395,30859],{"class":209},[203,46397,30862],{"class":262},[203,46399,42049],{"class":213},[203,46401,46402,46404,46406,46408,46410,46412],{"class":205,"line":2699},[203,46403,30875],{"class":262},[203,46405,42056],{"class":213},[203,46407,30881],{"class":262},[203,46409,30884],{"class":213},[203,46411,30887],{"class":262},[203,46413,2065],{"class":213},[203,46415,46416,46418,46420,46422],{"class":205,"line":2705},[203,46417,30903],{"class":262},[203,46419,42071],{"class":213},[203,46421,259],{"class":209},[203,46423,38067],{"class":213},[203,46425,46426,46428,46430,46432,46434,46436,46438,46440,46442,46444,46446,46448,46450,46452,46454,46456,46458,46460,46462,46464,46466],{"class":205,"line":2710},[203,46427,38072],{"class":213},[203,46429,30914],{"class":5306},[203,46431,259],{"class":209},[203,46433,285],{"class":262},[203,46435,592],{"class":213},[203,46437,30923],{"class":5306},[203,46439,259],{"class":209},[203,46441,417],{"class":262},[203,46443,592],{"class":213},[203,46445,30932],{"class":5306},[203,46447,259],{"class":209},[203,46449,583],{"class":262},[203,46451,592],{"class":213},[203,46453,30987],{"class":5306},[203,46455,259],{"class":209},[203,46457,291],{"class":262},[203,46459,592],{"class":213},[203,46461,30941],{"class":5306},[203,46463,259],{"class":209},[203,46465,285],{"class":262},[203,46467,38105],{"class":213},[203,46469,46470],{"class":205,"line":8038},[203,46471,38110],{"class":213},[203,46473,46474,46476,46478,46480,46482,46484,46486,46488,46490,46492,46494,46496,46498],{"class":205,"line":8062},[203,46475,38155],{"class":213},[203,46477,30932],{"class":5306},[203,46479,259],{"class":209},[203,46481,285],{"class":262},[203,46483,592],{"class":213},[203,46485,30987],{"class":5306},[203,46487,259],{"class":209},[203,46489,291],{"class":262},[203,46491,592],{"class":213},[203,46493,30941],{"class":5306},[203,46495,259],{"class":209},[203,46497,431],{"class":262},[203,46499,220],{"class":213},[203,46501,46502],{"class":205,"line":8067},[203,46503,38184],{"class":213},[203,46505,46506,46508,46510,46512],{"class":205,"line":8073},[203,46507,30903],{"class":262},[203,46509,42162],{"class":213},[203,46511,259],{"class":209},[203,46513,38067],{"class":213},[203,46515,46516,46518,46520,46522,46524,46526,46528,46530,46532,46534,46536,46538,46540],{"class":205,"line":8100},[203,46517,38072],{"class":213},[203,46519,30914],{"class":5306},[203,46521,259],{"class":209},[203,46523,417],{"class":262},[203,46525,592],{"class":213},[203,46527,30923],{"class":5306},[203,46529,259],{"class":209},[203,46531,417],{"class":262},[203,46533,592],{"class":213},[203,46535,30932],{"class":5306},[203,46537,259],{"class":209},[203,46539,431],{"class":262},[203,46541,38105],{"class":213},[203,46543,46544],{"class":205,"line":8105},[203,46545,38110],{"class":213},[203,46547,46548,46550,46552,46554,46556,46558,46560,46562,46564,46566,46568,46570,46572,46574,46576,46578,46580],{"class":205,"line":8111},[203,46549,38072],{"class":213},[203,46551,30914],{"class":5306},[203,46553,259],{"class":209},[203,46555,417],{"class":262},[203,46557,592],{"class":213},[203,46559,30923],{"class":5306},[203,46561,259],{"class":209},[203,46563,42217],{"class":262},[203,46565,592],{"class":213},[203,46567,30932],{"class":5306},[203,46569,259],{"class":209},[203,46571,285],{"class":262},[203,46573,592],{"class":213},[203,46575,30941],{"class":5306},[203,46577,259],{"class":209},[203,46579,431],{"class":262},[203,46581,38105],{"class":213},[203,46583,46584],{"class":205,"line":8123},[203,46585,38110],{"class":213},[203,46587,46588,46590,46592,46594,46596,46598,46600,46602,46604,46606,46608,46610,46612],{"class":205,"line":8135},[203,46589,38155],{"class":213},[203,46591,30932],{"class":5306},[203,46593,259],{"class":209},[203,46595,285],{"class":262},[203,46597,592],{"class":213},[203,46599,30987],{"class":5306},[203,46601,259],{"class":209},[203,46603,291],{"class":262},[203,46605,592],{"class":213},[203,46607,30941],{"class":5306},[203,46609,259],{"class":209},[203,46611,431],{"class":262},[203,46613,220],{"class":213},[203,46615,46616],{"class":205,"line":8147},[203,46617,38184],{"class":213},[203,46619,46620,46622,46624,46626],{"class":205,"line":9806},[203,46621,30903],{"class":262},[203,46623,42278],{"class":213},[203,46625,259],{"class":209},[203,46627,38067],{"class":213},[203,46629,46630,46632,46634,46636,46638,46640,46642,46644,46646,46648,46650,46652,46654,46656,46658],{"class":205,"line":9831},[203,46631,42287],{"class":213},[203,46633,42217],{"class":262},[203,46635,592],{"class":213},[203,46637,417],{"class":262},[203,46639,42296],{"class":213},[203,46641,423],{"class":262},[203,46643,592],{"class":213},[203,46645,32128],{"class":262},[203,46647,42305],{"class":213},[203,46649,815],{"class":262},[203,46651,592],{"class":213},[203,46653,411],{"class":262},[203,46655,42314],{"class":213},[203,46657,411],{"class":262},[203,46659,38105],{"class":213},[203,46661,46662,46664,46666,46668,46670,46672,46674,46676,46678,46680,46682,46684,46686,46688,46690],{"class":205,"line":9854},[203,46663,42287],{"class":213},[203,46665,34928],{"class":262},[203,46667,592],{"class":213},[203,46669,32128],{"class":262},[203,46671,42296],{"class":213},[203,46673,32128],{"class":262},[203,46675,592],{"class":213},[203,46677,42217],{"class":262},[203,46679,42305],{"class":213},[203,46681,411],{"class":262},[203,46683,592],{"class":213},[203,46685,423],{"class":262},[203,46687,42314],{"class":213},[203,46689,417],{"class":262},[203,46691,38105],{"class":213},[203,46693,46694,46696,46698,46700,46702,46704,46706,46708,46710,46712,46714,46716,46718],{"class":205,"line":9878},[203,46695,38155],{"class":213},[203,46697,30932],{"class":5306},[203,46699,259],{"class":209},[203,46701,285],{"class":262},[203,46703,592],{"class":213},[203,46705,30987],{"class":5306},[203,46707,259],{"class":209},[203,46709,291],{"class":262},[203,46711,592],{"class":213},[203,46713,30941],{"class":5306},[203,46715,259],{"class":209},[203,46717,431],{"class":262},[203,46719,220],{"class":213},[203,46721,46722],{"class":205,"line":9883},[203,46723,38184],{"class":213},[203,46725,46726,46728,46730,46732],{"class":205,"line":9888},[203,46727,30903],{"class":262},[203,46729,42389],{"class":213},[203,46731,259],{"class":209},[203,46733,38067],{"class":213},[203,46735,46736,46738,46740,46742,46744,46746,46748,46750,46752,46754,46756,46758,46760,46762,46764],{"class":205,"line":9893},[203,46737,42287],{"class":213},[203,46739,42400],{"class":262},[203,46741,592],{"class":213},[203,46743,42217],{"class":262},[203,46745,42296],{"class":213},[203,46747,423],{"class":262},[203,46749,592],{"class":213},[203,46751,42413],{"class":262},[203,46753,42305],{"class":213},[203,46755,815],{"class":262},[203,46757,592],{"class":213},[203,46759,821],{"class":262},[203,46761,42314],{"class":213},[203,46763,417],{"class":262},[203,46765,38105],{"class":213},[203,46767,46768,46770,46772,46774,46776,46778,46780,46782,46784,46786,46788,46790,46792,46794,46796],{"class":205,"line":9902},[203,46769,42287],{"class":213},[203,46771,38515],{"class":262},[203,46773,592],{"class":213},[203,46775,21138],{"class":262},[203,46777,42296],{"class":213},[203,46779,832],{"class":262},[203,46781,592],{"class":213},[203,46783,31559],{"class":262},[203,46785,42305],{"class":213},[203,46787,1014],{"class":262},[203,46789,592],{"class":213},[203,46791,417],{"class":262},[203,46793,42314],{"class":213},[203,46795,417],{"class":262},[203,46797,38105],{"class":213},[203,46799,46800,46802,46804,46806,46808,46810,46812,46814,46816,46818,46820,46822,46824,46826,46828],{"class":205,"line":9907},[203,46801,42287],{"class":213},[203,46803,38515],{"class":262},[203,46805,592],{"class":213},[203,46807,32128],{"class":262},[203,46809,42296],{"class":213},[203,46811,32128],{"class":262},[203,46813,592],{"class":213},[203,46815,34928],{"class":262},[203,46817,42305],{"class":213},[203,46819,1014],{"class":262},[203,46821,592],{"class":213},[203,46823,417],{"class":262},[203,46825,42314],{"class":213},[203,46827,417],{"class":262},[203,46829,38105],{"class":213},[203,46831,46832,46834,46836,46838,46840,46842,46844,46846,46848,46850,46852,46854,46856,46858,46860],{"class":205,"line":9913},[203,46833,42287],{"class":213},[203,46835,38515],{"class":262},[203,46837,592],{"class":213},[203,46839,832],{"class":262},[203,46841,42296],{"class":213},[203,46843,32128],{"class":262},[203,46845,592],{"class":213},[203,46847,42510],{"class":262},[203,46849,42305],{"class":213},[203,46851,411],{"class":262},[203,46853,592],{"class":213},[203,46855,417],{"class":262},[203,46857,42314],{"class":213},[203,46859,417],{"class":262},[203,46861,38105],{"class":213},[203,46863,46864,46866,46868,46870,46872,46874,46876,46878,46880,46882,46884,46886,46888,46890,46892],{"class":205,"line":9934},[203,46865,42287],{"class":213},[203,46867,42531],{"class":262},[203,46869,592],{"class":213},[203,46871,34928],{"class":262},[203,46873,42296],{"class":213},[203,46875,21138],{"class":262},[203,46877,592],{"class":213},[203,46879,42544],{"class":262},[203,46881,42305],{"class":213},[203,46883,411],{"class":262},[203,46885,592],{"class":213},[203,46887,32128],{"class":262},[203,46889,42314],{"class":213},[203,46891,32128],{"class":262},[203,46893,38105],{"class":213},[203,46895,46896,46898,46900,46902,46904,46906,46908,46910,46912,46914,46916,46918,46920],{"class":205,"line":9940},[203,46897,38155],{"class":213},[203,46899,30932],{"class":5306},[203,46901,259],{"class":209},[203,46903,285],{"class":262},[203,46905,592],{"class":213},[203,46907,30987],{"class":5306},[203,46909,259],{"class":209},[203,46911,291],{"class":262},[203,46913,592],{"class":213},[203,46915,30941],{"class":5306},[203,46917,259],{"class":209},[203,46919,431],{"class":262},[203,46921,220],{"class":213},[203,46923,46924],{"class":205,"line":9954},[203,46925,38184],{"class":213},[203,46927,46928,46930,46932,46934],{"class":205,"line":9960},[203,46929,30903],{"class":262},[203,46931,42597],{"class":213},[203,46933,259],{"class":209},[203,46935,38067],{"class":213},[203,46937,46938,46940,46942,46944,46946,46948,46950,46952,46954,46956,46958,46960,46962,46964,46966],{"class":205,"line":9987},[203,46939,42287],{"class":213},[203,46941,42608],{"class":262},[203,46943,592],{"class":213},[203,46945,34928],{"class":262},[203,46947,42296],{"class":213},[203,46949,21138],{"class":262},[203,46951,592],{"class":213},[203,46953,42544],{"class":262},[203,46955,42305],{"class":213},[203,46957,411],{"class":262},[203,46959,592],{"class":213},[203,46961,32128],{"class":262},[203,46963,42314],{"class":213},[203,46965,32128],{"class":262},[203,46967,38105],{"class":213},[203,46969,46970,46972,46974,46976,46978,46980,46982,46984,46986,46988,46990,46992,46994,46996,46998],{"class":205,"line":9996},[203,46971,42287],{"class":213},[203,46973,42608],{"class":262},[203,46975,592],{"class":213},[203,46977,34998],{"class":262},[203,46979,42296],{"class":213},[203,46981,42217],{"class":262},[203,46983,592],{"class":213},[203,46985,34998],{"class":262},[203,46987,42305],{"class":213},[203,46989,821],{"class":262},[203,46991,592],{"class":213},[203,46993,32128],{"class":262},[203,46995,42314],{"class":213},[203,46997,32128],{"class":262},[203,46999,38105],{"class":213},[203,47001,47002,47004,47006,47008,47010],{"class":205,"line":10002},[203,47003,42671],{"class":213},[203,47005,431],{"class":262},[203,47007,592],{"class":213},[203,47009,431],{"class":262},[203,47011,42680],{"class":213},[203,47013,47014],{"class":205,"line":10010},[203,47015,38848],{"class":213},[203,47017,47018,47020,47022,47024,47026],{"class":205,"line":10015},[203,47019,38853],{"class":213},[203,47021,42691],{"class":262},[203,47023,592],{"class":213},[203,47025,291],{"class":262},[203,47027,220],{"class":213},[203,47029,47030],{"class":205,"line":16694},[203,47031,38184],{"class":213},[203,47033,47034],{"class":205,"line":16700},[203,47035,42706],{"class":272},[203,47037,47038,47040,47042,47044,47046],{"class":205,"line":16723},[203,47039,3492],{"class":209},[203,47041,38926],{"class":213},[203,47043,26101],{"class":209},[203,47045,38931],{"class":262},[203,47047,38934],{"class":213},[203,47049,47050,47052,47054],{"class":205,"line":16729},[203,47051,4731],{"class":209},[203,47053,38946],{"class":262},[203,47055,38949],{"class":213},[203,47057,47058,47060,47062,47064,47066,47068,47070,47072,47074],{"class":205,"line":16752},[203,47059,38959],{"class":213},[203,47061,42733],{"class":5306},[203,47063,259],{"class":209},[203,47065,42738],{"class":318},[203,47067,592],{"class":213},[203,47069,38962],{"class":5306},[203,47071,259],{"class":209},[203,47073,38967],{"class":318},[203,47075,220],{"class":213},[203,47077,47078],{"class":205,"line":16766},[203,47079,42753],{"class":272},[203,47081,47082],{"class":205,"line":16786},[203,47083,42758],{"class":272},[203,47085,47086],{"class":205,"line":16792},[203,47087,42763],{"class":272},[203,47089,47090],{"class":205,"line":16803},[203,47091,42768],{"class":272},[203,47093,47094],{"class":205,"line":16826},[203,47095,42773],{"class":272},[203,47097,47098],{"class":205,"line":16848},[203,47099,42778],{"class":272},[203,47101,47102,47104,47106,47108,47110,47112],{"class":205,"line":16853},[203,47103,38979],{"class":209},[203,47105,38982],{"class":213},[203,47107,38985],{"class":209},[203,47109,38988],{"class":209},[203,47111,38991],{"class":262},[203,47113,3828],{"class":213},[203,47115,47116,47118,47120],{"class":205,"line":16859},[203,47117,39003],{"class":213},[203,47119,405],{"class":262},[203,47121,220],{"class":213},[203,47123,47124,47126,47128],{"class":205,"line":16873},[203,47125,42805],{"class":209},[203,47127,38946],{"class":262},[203,47129,39022],{"class":213},[203,47131,47132,47134,47136,47138,47140],{"class":205,"line":16886},[203,47133,42814],{"class":213},[203,47135,405],{"class":262},[203,47137,592],{"class":213},[203,47139,39044],{"class":262},[203,47141,220],{"class":213},[203,47143,47144,47146,47148,47150,47152,47154],{"class":205,"line":16891},[203,47145,42827],{"class":209},[203,47147,38982],{"class":213},[203,47149,38985],{"class":209},[203,47151,38988],{"class":209},[203,47153,38991],{"class":262},[203,47155,3828],{"class":213},[203,47157,47158,47160,47162],{"class":205,"line":16905},[203,47159,42842],{"class":213},[203,47161,405],{"class":262},[203,47163,220],{"class":213},[203,47165,47166],{"class":205,"line":16910},[203,47167,35223],{"class":272},[203,47169,47170,47172,47174],{"class":205,"line":16916},[203,47171,30859],{"class":209},[203,47173,31151],{"class":2052},[203,47175,31154],{"class":213},[203,47177,47178,47180,47182,47184],{"class":205,"line":16921},[203,47179,31159],{"class":213},[203,47181,259],{"class":209},[203,47183,30881],{"class":262},[203,47185,42869],{"class":213},[203,47187,47188,47190,47192,47194],{"class":205,"line":16935},[203,47189,31159],{"class":213},[203,47191,259],{"class":209},[203,47193,30881],{"class":262},[203,47195,42880],{"class":213},[203,47197,47198,47200,47202,47204],{"class":205,"line":16940},[203,47199,31159],{"class":213},[203,47201,259],{"class":209},[203,47203,30881],{"class":262},[203,47205,42891],{"class":213},[203,47207,47208,47210,47212,47214],{"class":205,"line":16945},[203,47209,31159],{"class":213},[203,47211,259],{"class":209},[203,47213,30881],{"class":262},[203,47215,42902],{"class":213},[203,47217,47218,47220,47222,47224],{"class":205,"line":16959},[203,47219,31159],{"class":213},[203,47221,259],{"class":209},[203,47223,30881],{"class":262},[203,47225,42913],{"class":213},[203,47227,47228,47230],{"class":205,"line":16971},[203,47229,14842],{"class":209},[203,47231,31267],{"class":213},[203,47233,47234],{"class":205,"line":16976},[203,47235,2489],{"emptyLinePlaceholder":131},[203,47237,47238],{"class":205,"line":16989},[203,47239,42928],{"class":272},[203,47241,47242,47244,47246,47248,47250],{"class":205,"line":16994},[203,47243,1620],{"class":209},[203,47245,31278],{"class":262},[203,47247,3038],{"class":209},[203,47249,31283],{"class":318},[203,47251,3828],{"class":213},[203,47253,47254,47256,47258,47260,47262,47264,47266,47268,47270],{"class":205,"line":16999},[203,47255,31295],{"class":213},[203,47257,259],{"class":209},[203,47259,30509],{"class":213},[203,47261,31302],{"class":318},[203,47263,1793],{"class":209},[203,47265,31307],{"class":213},[203,47267,1790],{"class":209},[203,47269,30534],{"class":318},[203,47271,220],{"class":213},[203,47273,47274,47276,47278],{"class":205,"line":17004},[203,47275,31347],{"class":213},[203,47277,259],{"class":209},[203,47279,42969],{"class":213},[203,47281,47282,47284,47286,47288,47290,47292,47294,47296],{"class":205,"line":17017},[203,47283,31357],{"class":262},[203,47285,31360],{"class":213},[203,47287,431],{"class":262},[203,47289,592],{"class":213},[203,47291,31559],{"class":262},[203,47293,592],{"class":213},[203,47295,31559],{"class":262},[203,47297,31373],{"class":213},[22088,47299,47301],{"id":47300},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47303,47304],{},"计算图片的均值与方差，用于训练中归一化处理操作",[194,47306,47308],{"className":30436,"code":47307,"language":30438,"meta":27,"style":27},"# 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",[200,47309,47310,47315,47328,47333,47339,47344,47354,47358,47363,47373,47377,47382,47392,47409,47413,47418,47430,47442,47473,47482,47492,47502,47506,47511,47526,47530,47535,47540,47545,47555,47560,47585,47589,47594,47609,47613,47626,47630,47635,47640,47645,47650,47655,47665,47675,47698,47706,47714,47722,47726,47738,47742,47747,47751,47755,47762,47782,47806,47813,47827,47832,47837,47841,47855,47859,47871],{"__ignoreMap":27},[203,47311,47312],{"class":205,"line":206},[203,47313,47314],{"class":272},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[203,47316,47317,47319,47322,47325],{"class":205,"line":124},[203,47318,30795],{"class":209},[203,47320,47321],{"class":262}," PIL",[203,47323,47324],{"class":209}," import",[203,47326,47327],{"class":213}," Image\n",[203,47329,47330],{"class":205,"line":1269},[203,47331,47332],{"class":272},"# os 用来处理文件夹和文件路径\n",[203,47334,47335,47337],{"class":205,"line":1284},[203,47336,30450],{"class":209},[203,47338,45363],{"class":213},[203,47340,47341],{"class":205,"line":1290},[203,47342,47343],{"class":272},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[203,47345,47346,47348,47350,47352],{"class":205,"line":1304},[203,47347,30450],{"class":209},[203,47349,31438],{"class":213},[203,47351,31441],{"class":209},[203,47353,31444],{"class":213},[203,47355,47356],{"class":205,"line":1310},[203,47357,2489],{"emptyLinePlaceholder":131},[203,47359,47360],{"class":205,"line":1401},[203,47361,47362],{"class":272},"# 文件夹路径，包含所有图片文件\n",[203,47364,47365,47368,47370],{"class":205,"line":1407},[203,47366,47367],{"class":213},"folder_path ",[203,47369,259],{"class":209},[203,47371,47372],{"class":318}," 'data_cat_dog'\n",[203,47374,47375],{"class":205,"line":1419},[203,47376,2489],{"emptyLinePlaceholder":131},[203,47378,47379],{"class":205,"line":1701},[203,47380,47381],{"class":272},"# 初始化累积变量\n",[203,47383,47384,47387,47389],{"class":205,"line":1706},[203,47385,47386],{"class":213},"total_pixels ",[203,47388,259],{"class":209},[203,47390,47391],{"class":262}," 0\n",[203,47393,47394,47397,47399,47402,47404,47406],{"class":205,"line":1712},[203,47395,47396],{"class":213},"sum_normalized_pixel_values ",[203,47398,259],{"class":209},[203,47400,47401],{"class":213}," np.zeros(",[203,47403,285],{"class":262},[203,47405,45866],{"class":213},[203,47407,47408],{"class":272},"# 如果是RGB图像，需要三个通道的均值和方差\n",[203,47410,47411],{"class":205,"line":1717},[203,47412,2489],{"emptyLinePlaceholder":131},[203,47414,47415],{"class":205,"line":1731},[203,47416,47417],{"class":272},"# 遍历文件夹中的图片文件\n",[203,47419,47420,47422,47425,47427],{"class":205,"line":1736},[203,47421,3114],{"class":209},[203,47423,47424],{"class":213}," root, dirs, files ",[203,47426,26101],{"class":209},[203,47428,47429],{"class":213}," os.walk(folder_path):\n",[203,47431,47432,47434,47437,47439],{"class":205,"line":1742},[203,47433,3290],{"class":209},[203,47435,47436],{"class":213}," filename ",[203,47438,26101],{"class":209},[203,47440,47441],{"class":213}," files:\n",[203,47443,47444,47446,47449,47452,47454,47457,47459,47462,47464,47467,47470],{"class":205,"line":1763},[203,47445,2586],{"class":209},[203,47447,47448],{"class":213}," filename.endswith((",[203,47450,47451],{"class":318},"'.jpg'",[203,47453,12525],{"class":213},[203,47455,47456],{"class":318},"'.jpeg'",[203,47458,12525],{"class":213},[203,47460,47461],{"class":318},"'.png'",[203,47463,12525],{"class":213},[203,47465,47466],{"class":318},"'.bmp'",[203,47468,47469],{"class":213},")):  ",[203,47471,47472],{"class":272},"# 可根据实际情况添加其他格式\n",[203,47474,47475,47477,47479],{"class":205,"line":1768},[203,47476,45731],{"class":213},[203,47478,259],{"class":209},[203,47480,47481],{"class":213}," os.path.join(root, filename)\n",[203,47483,47484,47487,47489],{"class":205,"line":1782},[203,47485,47486],{"class":213},"            image ",[203,47488,259],{"class":209},[203,47490,47491],{"class":213}," Image.open(image_path)\n",[203,47493,47494,47497,47499],{"class":205,"line":1787},[203,47495,47496],{"class":213},"            image_array ",[203,47498,259],{"class":209},[203,47500,47501],{"class":213}," np.array(image)\n",[203,47503,47504],{"class":205,"line":1816},[203,47505,2489],{"emptyLinePlaceholder":131},[203,47507,47508],{"class":205,"line":1821},[203,47509,47510],{"class":272},"            # 归一化像素值到0-1之间\n",[203,47512,47513,47516,47518,47521,47523],{"class":205,"line":1838},[203,47514,47515],{"class":213},"            normalized_image_array ",[203,47517,259],{"class":209},[203,47519,47520],{"class":213}," image_array ",[203,47522,798],{"class":209},[203,47524,47525],{"class":262}," 255.0\n",[203,47527,47528],{"class":205,"line":1843},[203,47529,2489],{"emptyLinePlaceholder":131},[203,47531,47532],{"class":205,"line":1848},[203,47533,47534],{"class":272},"            # print(image_path)\n",[203,47536,47537],{"class":205,"line":1853},[203,47538,47539],{"class":272},"            # print(normalized_image_array.shape)\n",[203,47541,47542],{"class":205,"line":1867},[203,47543,47544],{"class":272},"            # 累积归一化后的像素值和像素数量\n",[203,47546,47547,47550,47552],{"class":205,"line":1872},[203,47548,47549],{"class":213},"            total_pixels ",[203,47551,9567],{"class":209},[203,47553,47554],{"class":213}," normalized_image_array.size\n",[203,47556,47557],{"class":205,"line":2666},[203,47558,47559],{"class":272},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[203,47561,47562,47565,47567,47570,47573,47575,47577,47579,47581,47583],{"class":205,"line":2680},[203,47563,47564],{"class":213},"            sum_normalized_pixel_values ",[203,47566,9567],{"class":209},[203,47568,47569],{"class":213}," np.sum(normalized_image_array, ",[203,47571,47572],{"class":5306},"axis",[203,47574,259],{"class":209},[203,47576,214],{"class":213},[203,47578,405],{"class":262},[203,47580,12525],{"class":213},[203,47582,431],{"class":262},[203,47584,30555],{"class":213},[203,47586,47587],{"class":205,"line":2688},[203,47588,2489],{"emptyLinePlaceholder":131},[203,47590,47591],{"class":205,"line":2693},[203,47592,47593],{"class":272},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[203,47595,47596,47599,47601,47604,47606],{"class":205,"line":2699},[203,47597,47598],{"class":213},"mean ",[203,47600,259],{"class":209},[203,47602,47603],{"class":213}," sum_normalized_pixel_values ",[203,47605,798],{"class":209},[203,47607,47608],{"class":213}," total_pixels\n",[203,47610,47611],{"class":205,"line":2705},[203,47612,2489],{"emptyLinePlaceholder":131},[203,47614,47615,47618,47620,47622,47624],{"class":205,"line":2710},[203,47616,47617],{"class":213},"sum_squared_diff ",[203,47619,259],{"class":209},[203,47621,47401],{"class":213},[203,47623,285],{"class":262},[203,47625,220],{"class":213},[203,47627,47628],{"class":205,"line":8038},[203,47629,2489],{"emptyLinePlaceholder":131},[203,47631,47632],{"class":205,"line":8062},[203,47633,47634],{"class":272},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[203,47636,47637],{"class":205,"line":8067},[203,47638,47639],{"class":272},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[203,47641,47642],{"class":205,"line":8073},[203,47643,47644],{"class":272},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[203,47646,47647],{"class":205,"line":8100},[203,47648,47649],{"class":272},"# Image.open(image_path)：打开图片\n",[203,47651,47652],{"class":205,"line":8105},[203,47653,47654],{"class":272},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[203,47656,47657,47659,47661,47663],{"class":205,"line":8111},[203,47658,3114],{"class":209},[203,47660,47424],{"class":213},[203,47662,26101],{"class":209},[203,47664,47429],{"class":213},[203,47666,47667,47669,47671,47673],{"class":205,"line":8123},[203,47668,3290],{"class":209},[203,47670,47436],{"class":213},[203,47672,26101],{"class":209},[203,47674,47441],{"class":213},[203,47676,47677,47679,47681,47683,47685,47687,47689,47691,47693,47695],{"class":205,"line":8135},[203,47678,2586],{"class":209},[203,47680,47448],{"class":213},[203,47682,47451],{"class":318},[203,47684,12525],{"class":213},[203,47686,47456],{"class":318},[203,47688,12525],{"class":213},[203,47690,47461],{"class":318},[203,47692,12525],{"class":213},[203,47694,47466],{"class":318},[203,47696,47697],{"class":213},")):\n",[203,47699,47700,47702,47704],{"class":205,"line":8147},[203,47701,45731],{"class":213},[203,47703,259],{"class":209},[203,47705,47481],{"class":213},[203,47707,47708,47710,47712],{"class":205,"line":9806},[203,47709,47486],{"class":213},[203,47711,259],{"class":209},[203,47713,47491],{"class":213},[203,47715,47716,47718,47720],{"class":205,"line":9831},[203,47717,47496],{"class":213},[203,47719,259],{"class":209},[203,47721,47501],{"class":213},[203,47723,47724],{"class":205,"line":9854},[203,47725,47510],{"class":272},[203,47727,47728,47730,47732,47734,47736],{"class":205,"line":9878},[203,47729,47515],{"class":213},[203,47731,259],{"class":209},[203,47733,47520],{"class":213},[203,47735,798],{"class":209},[203,47737,47525],{"class":262},[203,47739,47740],{"class":205,"line":9883},[203,47741,47539],{"class":272},[203,47743,47744],{"class":205,"line":9888},[203,47745,47746],{"class":272},"            # print(mean.shape)\n",[203,47748,47749],{"class":205,"line":9893},[203,47750,47534],{"class":272},[203,47752,47753],{"class":205,"line":9902},[203,47754,2489],{"emptyLinePlaceholder":131},[203,47756,47757,47760],{"class":205,"line":9907},[203,47758,47759],{"class":209},"            try",[203,47761,3828],{"class":213},[203,47763,47764,47767,47769,47772,47774,47777,47779],{"class":205,"line":9913},[203,47765,47766],{"class":213},"                diff ",[203,47768,259],{"class":209},[203,47770,47771],{"class":213}," (normalized_image_array ",[203,47773,746],{"class":209},[203,47775,47776],{"class":213}," mean) ",[203,47778,10751],{"class":209},[203,47780,47781],{"class":262}," 2\n",[203,47783,47784,47787,47789,47792,47794,47796,47798,47800,47802,47804],{"class":205,"line":9934},[203,47785,47786],{"class":213},"                sum_squared_diff ",[203,47788,9567],{"class":209},[203,47790,47791],{"class":213}," np.sum(diff, ",[203,47793,47572],{"class":5306},[203,47795,259],{"class":209},[203,47797,214],{"class":213},[203,47799,405],{"class":262},[203,47801,12525],{"class":213},[203,47803,431],{"class":262},[203,47805,30555],{"class":213},[203,47807,47808,47811],{"class":205,"line":9940},[203,47809,47810],{"class":209},"            except",[203,47812,3828],{"class":213},[203,47814,47815,47818,47820,47822,47825],{"class":205,"line":9954},[203,47816,47817],{"class":262},"                print",[203,47819,214],{"class":213},[203,47821,266],{"class":209},[203,47823,47824],{"class":318},"\"捕获到自定义异常\"",[203,47826,220],{"class":213},[203,47828,47829],{"class":205,"line":9960},[203,47830,47831],{"class":272},"            # diff = (normalized_image_array - mean) ** 2\n",[203,47833,47834],{"class":205,"line":9987},[203,47835,47836],{"class":272},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[203,47838,47839],{"class":205,"line":9996},[203,47840,2489],{"emptyLinePlaceholder":131},[203,47842,47843,47846,47848,47851,47853],{"class":205,"line":10002},[203,47844,47845],{"class":213},"variance ",[203,47847,259],{"class":209},[203,47849,47850],{"class":213}," sum_squared_diff ",[203,47852,798],{"class":209},[203,47854,47608],{"class":213},[203,47856,47857],{"class":205,"line":10010},[203,47858,2489],{"emptyLinePlaceholder":131},[203,47860,47861,47863,47865,47868],{"class":205,"line":10015},[203,47862,30473],{"class":262},[203,47864,214],{"class":213},[203,47866,47867],{"class":318},"\"Mean:\"",[203,47869,47870],{"class":213},", mean)\n",[203,47872,47873,47875,47877,47880],{"class":205,"line":16694},[203,47874,30473],{"class":262},[203,47876,214],{"class":213},[203,47878,47879],{"class":318},"\"Variance:\"",[203,47881,47882],{"class":213},", variance)\n",[194,47884,47886],{"className":30436,"code":47885,"language":30438,"meta":27,"style":27},"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",[200,47887,47888,47894,47900,47910,47916,47926,47940,47950,47960,47970,47974,47984,47994,47998,48002,48010,48015,48020,48039,48043,48048,48053,48058,48063,48104,48109,48119,48124,48137,48142,48147,48152,48157,48162,48166,48171,48176,48198,48202,48234,48248,48258,48268,48272,48282,48296,48306,48316,48326,48332,48336,48340,48344,48348,48352,48360,48380,48384,48388,48392,48396,48412,48416,48420,48428,48432,48436,48444,48448,48452,48456,48464,48468,48472,48476,48484,48488,48496,48500,48508,48512,48520,48524,48532,48536,48540,48548,48552,48556,48568,48592,48606,48610,48614,48618,48626,48630,48638,48642,48650,48654,48662,48666,48674,48678,48686,48690,48702,48706,48714,48718,48726,48730,48734,48738,48742,48750,48754,48770,48774,48782,48786,48790,48794,48798,48802,48806,48810,48826,48830,48842,48846,48858,48862,48874,48878,48886,48890,48898,48902,48906,48910,48916,48920,48928,48932,48948,48952,48960,48964,48980,48992,48996,49008,49012,49016,49024,49028,49032,49040,49044,49052,49056,49064,49068,49072,49114,49156,49160,49164,49180,49184,49200,49204,49208,49216,49220,49224,49236,49274,49278,49282,49290,49294,49308,49318,49324,49330,49336,49342,49346,49350,49356,49360,49364,49372,49376,49394,49398,49402,49406,49422,49426,49430,49434,49438,49442,49462,49482,49486,49490,49494,49502,49510,49514,49530,49550,49570,49574,49579,49588,49597,49602,49607,49612,49625,49630,49639,49648,49665],{"__ignoreMap":27},[203,47889,47890,47892],{"class":205,"line":206},[203,47891,30450],{"class":209},[203,47893,31880],{"class":213},[203,47895,47896,47898],{"class":205,"line":124},[203,47897,30450],{"class":209},[203,47899,31887],{"class":213},[203,47901,47902,47904,47906,47908],{"class":205,"line":1269},[203,47903,30450],{"class":209},[203,47905,31898],{"class":213},[203,47907,31441],{"class":209},[203,47909,31903],{"class":213},[203,47911,47912,47914],{"class":205,"line":1284},[203,47913,30450],{"class":209},[203,47915,30453],{"class":213},[203,47917,47918,47920,47922,47924],{"class":205,"line":1290},[203,47919,30795],{"class":209},[203,47921,31473],{"class":213},[203,47923,30450],{"class":209},[203,47925,31920],{"class":213},[203,47927,47928,47930,47932,47934,47937],{"class":205,"line":1304},[203,47929,30795],{"class":209},[203,47931,31426],{"class":213},[203,47933,30450],{"class":209},[203,47935,47936],{"class":213}," ImageFolder ",[203,47938,47939],{"class":272},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[203,47941,47942,47944,47946,47948],{"class":205,"line":1310},[203,47943,30795],{"class":209},[203,47945,31456],{"class":213},[203,47947,30450],{"class":209},[203,47949,31461],{"class":213},[203,47951,47952,47954,47956,47958],{"class":205,"line":1401},[203,47953,30450],{"class":209},[203,47955,31473],{"class":213},[203,47957,31441],{"class":209},[203,47959,31478],{"class":213},[203,47961,47962,47964,47966,47968],{"class":205,"line":1407},[203,47963,30450],{"class":209},[203,47965,31490],{"class":213},[203,47967,31441],{"class":209},[203,47969,31495],{"class":213},[203,47971,47972],{"class":205,"line":1419},[203,47973,31965],{"class":272},[203,47975,47976,47978,47980,47982],{"class":205,"line":1701},[203,47977,30795],{"class":209},[203,47979,31972],{"class":213},[203,47981,30450],{"class":209},[203,47983,43089],{"class":213},[203,47985,47986,47988,47990,47992],{"class":205,"line":1706},[203,47987,30795],{"class":209},[203,47989,30798],{"class":213},[203,47991,30450],{"class":209},[203,47993,30803],{"class":213},[203,47995,47996],{"class":205,"line":1712},[203,47997,2489],{"emptyLinePlaceholder":131},[203,47999,48000],{"class":205,"line":1717},[203,48001,32000],{"class":272},[203,48003,48004,48006,48008],{"class":205,"line":1731},[203,48005,32005],{"class":209},[203,48007,32008],{"class":2052},[203,48009,32011],{"class":213},[203,48011,48012],{"class":205,"line":1736},[203,48013,48014],{"class":272},"    # 导入自己的数据集，并进行数据处理\n",[203,48016,48017],{"class":205,"line":1742},[203,48018,48019],{"class":272},"    # 定义数据集的路径\n",[203,48021,48022,48025,48027,48029,48031,48033,48037],{"class":205,"line":1763},[203,48023,48024],{"class":262},"    ROOT_PATH",[203,48026,259],{"class":209},[203,48028,884],{"class":209},[203,48030,465],{"class":318},[203,48032,772],{"class":262},[203,48034,48036],{"class":48035},"sA_wV","\u002Fdata\u002Ftrain",[203,48038,25191],{"class":318},[203,48040,48041],{"class":205,"line":1768},[203,48042,2489],{"emptyLinePlaceholder":131},[203,48044,48045],{"class":205,"line":1782},[203,48046,48047],{"class":272},"    # 定义归一化方法\n",[203,48049,48050],{"class":205,"line":1787},[203,48051,48052],{"class":272},"    # 这里需要先计算一下数据集的均值和方差\n",[203,48054,48055],{"class":205,"line":1816},[203,48056,48057],{"class":272},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[203,48059,48060],{"class":205,"line":1821},[203,48061,48062],{"class":272},"    # 第一个参数是均值，第二个参数是方差\n",[203,48064,48065,48068,48070,48073,48076,48078,48081,48083,48086,48089,48092,48094,48097,48099,48102],{"class":205,"line":1838},[203,48066,48067],{"class":213},"    normalize",[203,48069,259],{"class":209},[203,48071,48072],{"class":213},"transforms.Normalize([",[203,48074,48075],{"class":262},"0.162",[203,48077,592],{"class":213},[203,48079,48080],{"class":262},"0.151",[203,48082,592],{"class":213},[203,48084,48085],{"class":262},"0.138",[203,48087,48088],{"class":213},"],[",[203,48090,48091],{"class":262},"0.058",[203,48093,592],{"class":213},[203,48095,48096],{"class":262},"0.052",[203,48098,592],{"class":213},[203,48100,48101],{"class":262},"0.048",[203,48103,4746],{"class":213},[203,48105,48106],{"class":205,"line":1843},[203,48107,48108],{"class":272},"    # 定义数据集处理方法变量\n",[203,48110,48111,48114,48116],{"class":205,"line":1848},[203,48112,48113],{"class":213},"    train_transform",[203,48115,259],{"class":209},[203,48117,48118],{"class":213},"transforms.Compose([\n",[203,48120,48121],{"class":205,"line":1853},[203,48122,48123],{"class":272},"        # 调整图像大小为224*224\n",[203,48125,48126,48129,48131,48133,48135],{"class":205,"line":1867},[203,48127,48128],{"class":213},"        transforms.Resize((",[203,48130,31559],{"class":262},[203,48132,592],{"class":213},[203,48134,31559],{"class":262},[203,48136,42680],{"class":213},[203,48138,48139],{"class":205,"line":1872},[203,48140,48141],{"class":272},"        # 将图像转换为张量\n",[203,48143,48144],{"class":205,"line":2666},[203,48145,48146],{"class":213},"        transforms.ToTensor(),\n",[203,48148,48149],{"class":205,"line":2680},[203,48150,48151],{"class":213},"        normalize])\n",[203,48153,48154],{"class":205,"line":2688},[203,48155,48156],{"class":272},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[203,48158,48159],{"class":205,"line":2693},[203,48160,48161],{"class":272},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[203,48163,48164],{"class":205,"line":2699},[203,48165,2489],{"emptyLinePlaceholder":131},[203,48167,48168],{"class":205,"line":2705},[203,48169,48170],{"class":272},"    # 加载数据集\n",[203,48172,48173],{"class":205,"line":2710},[203,48174,48175],{"class":272},"    # 传入数据集路径与处理方法\n",[203,48177,48178,48180,48182,48185,48188,48190,48193,48195],{"class":205,"line":8038},[203,48179,32016],{"class":213},[203,48181,259],{"class":209},[203,48183,48184],{"class":213},"ImageFolder(",[203,48186,48187],{"class":262},"ROOT_PATH",[203,48189,592],{"class":213},[203,48191,48192],{"class":5306},"transform",[203,48194,259],{"class":209},[203,48196,48197],{"class":213},"train_transform)\n",[203,48199,48200],{"class":205,"line":8062},[203,48201,2489],{"emptyLinePlaceholder":131},[203,48203,48204,48206,48208,48210,48212,48214,48216,48218,48220,48222,48224,48226,48228,48230,48232],{"class":205,"line":8067},[203,48205,32068],{"class":213},[203,48207,259],{"class":209},[203,48209,32073],{"class":213},[203,48211,32076],{"class":262},[203,48213,214],{"class":213},[203,48215,32081],{"class":262},[203,48217,669],{"class":209},[203,48219,7448],{"class":262},[203,48221,32088],{"class":213},[203,48223,32076],{"class":262},[203,48225,214],{"class":213},[203,48227,32095],{"class":262},[203,48229,669],{"class":209},[203,48231,7448],{"class":262},[203,48233,32102],{"class":213},[203,48235,48236,48238,48240,48242,48244,48246],{"class":205,"line":8073},[203,48237,32107],{"class":213},[203,48239,259],{"class":209},[203,48241,32112],{"class":213},[203,48243,31595],{"class":5306},[203,48245,259],{"class":209},[203,48247,31600],{"class":213},[203,48249,48250,48252,48254,48256],{"class":205,"line":8100},[203,48251,32123],{"class":5306},[203,48253,259],{"class":209},[203,48255,411],{"class":262},[203,48257,31524],{"class":213},[203,48259,48260,48262,48264,48266],{"class":205,"line":8105},[203,48261,32135],{"class":5306},[203,48263,259],{"class":209},[203,48265,31534],{"class":262},[203,48267,31524],{"class":213},[203,48269,48270],{"class":205,"line":8111},[203,48271,32146],{"class":272},[203,48273,48274,48276,48278,48280],{"class":205,"line":8123},[203,48275,32151],{"class":5306},[203,48277,259],{"class":209},[203,48279,609],{"class":262},[203,48281,220],{"class":213},[203,48283,48284,48286,48288,48290,48292,48294],{"class":205,"line":8135},[203,48285,32162],{"class":213},[203,48287,259],{"class":209},[203,48289,31592],{"class":213},[203,48291,31595],{"class":5306},[203,48293,259],{"class":209},[203,48295,32173],{"class":213},[203,48297,48298,48300,48302,48304],{"class":205,"line":8147},[203,48299,32178],{"class":5306},[203,48301,259],{"class":209},[203,48303,411],{"class":262},[203,48305,31524],{"class":213},[203,48307,48308,48310,48312,48314],{"class":205,"line":9806},[203,48309,32189],{"class":5306},[203,48311,259],{"class":209},[203,48313,31534],{"class":262},[203,48315,31524],{"class":213},[203,48317,48318,48320,48322,48324],{"class":205,"line":9831},[203,48319,32200],{"class":5306},[203,48321,259],{"class":209},[203,48323,609],{"class":262},[203,48325,220],{"class":213},[203,48327,48328,48330],{"class":205,"line":9854},[203,48329,4179],{"class":209},[203,48331,32213],{"class":213},[203,48333,48334],{"class":205,"line":9878},[203,48335,2489],{"emptyLinePlaceholder":131},[203,48337,48338],{"class":205,"line":9883},[203,48339,32222],{"class":272},[203,48341,48342],{"class":205,"line":9888},[203,48343,32227],{"class":272},[203,48345,48346],{"class":205,"line":9893},[203,48347,2489],{"emptyLinePlaceholder":131},[203,48349,48350],{"class":205,"line":9902},[203,48351,32236],{"class":272},[203,48353,48354,48356,48358],{"class":205,"line":9907},[203,48355,32005],{"class":209},[203,48357,32243],{"class":2052},[203,48359,32246],{"class":213},[203,48361,48362,48364,48366,48368,48370,48372,48374,48376,48378],{"class":205,"line":9913},[203,48363,31295],{"class":213},[203,48365,259],{"class":209},[203,48367,30509],{"class":213},[203,48369,31302],{"class":318},[203,48371,1793],{"class":209},[203,48373,31307],{"class":213},[203,48375,1790],{"class":209},[203,48377,32265],{"class":318},[203,48379,220],{"class":213},[203,48381,48382],{"class":205,"line":9934},[203,48383,2489],{"emptyLinePlaceholder":131},[203,48385,48386],{"class":205,"line":9940},[203,48387,32280],{"class":272},[203,48389,48390],{"class":205,"line":9954},[203,48391,32285],{"class":272},[203,48393,48394],{"class":205,"line":9960},[203,48395,32290],{"class":272},[203,48397,48398,48400,48402,48404,48406,48408,48410],{"class":205,"line":9987},[203,48399,32295],{"class":213},[203,48401,259],{"class":209},[203,48403,32300],{"class":213},[203,48405,32303],{"class":5306},[203,48407,259],{"class":209},[203,48409,32308],{"class":262},[203,48411,220],{"class":213},[203,48413,48414],{"class":205,"line":9996},[203,48415,2489],{"emptyLinePlaceholder":131},[203,48417,48418],{"class":205,"line":10002},[203,48419,32319],{"class":272},[203,48421,48422,48424,48426],{"class":205,"line":10010},[203,48423,32324],{"class":213},[203,48425,259],{"class":209},[203,48427,32329],{"class":213},[203,48429,48430],{"class":205,"line":10015},[203,48431,2489],{"emptyLinePlaceholder":131},[203,48433,48434],{"class":205,"line":16694},[203,48435,32338],{"class":272},[203,48437,48438,48440,48442],{"class":205,"line":16700},[203,48439,31347],{"class":213},[203,48441,259],{"class":209},[203,48443,32347],{"class":213},[203,48445,48446],{"class":205,"line":16723},[203,48447,32352],{"class":272},[203,48449,48450],{"class":205,"line":16729},[203,48451,32357],{"class":272},[203,48453,48454],{"class":205,"line":16752},[203,48455,32362],{"class":272},[203,48457,48458,48460,48462],{"class":205,"line":16766},[203,48459,32367],{"class":213},[203,48461,259],{"class":209},[203,48463,32372],{"class":213},[203,48465,48466],{"class":205,"line":16786},[203,48467,2489],{"emptyLinePlaceholder":131},[203,48469,48470],{"class":205,"line":16792},[203,48471,32385],{"class":272},[203,48473,48474],{"class":205,"line":16803},[203,48475,32390],{"class":272},[203,48477,48478,48480,48482],{"class":205,"line":16826},[203,48479,32395],{"class":213},[203,48481,259],{"class":209},[203,48483,32400],{"class":262},[203,48485,48486],{"class":205,"line":16848},[203,48487,32405],{"class":272},[203,48489,48490,48492,48494],{"class":205,"line":16853},[203,48491,32410],{"class":213},[203,48493,259],{"class":209},[203,48495,32415],{"class":213},[203,48497,48498],{"class":205,"line":16859},[203,48499,32420],{"class":272},[203,48501,48502,48504,48506],{"class":205,"line":16873},[203,48503,32425],{"class":213},[203,48505,259],{"class":209},[203,48507,32415],{"class":213},[203,48509,48510],{"class":205,"line":16886},[203,48511,32434],{"class":272},[203,48513,48514,48516,48518],{"class":205,"line":16891},[203,48515,32439],{"class":213},[203,48517,259],{"class":209},[203,48519,32415],{"class":213},[203,48521,48522],{"class":205,"line":16905},[203,48523,32448],{"class":272},[203,48525,48526,48528,48530],{"class":205,"line":16910},[203,48527,32453],{"class":213},[203,48529,259],{"class":209},[203,48531,32415],{"class":213},[203,48533,48534],{"class":205,"line":16916},[203,48535,2489],{"emptyLinePlaceholder":131},[203,48537,48538],{"class":205,"line":16921},[203,48539,32466],{"class":272},[203,48541,48542,48544,48546],{"class":205,"line":16935},[203,48543,32471],{"class":213},[203,48545,259],{"class":209},[203,48547,32476],{"class":213},[203,48549,48550],{"class":205,"line":16940},[203,48551,2489],{"emptyLinePlaceholder":131},[203,48553,48554],{"class":205,"line":16945},[203,48555,32489],{"class":272},[203,48557,48558,48560,48562,48564,48566],{"class":205,"line":16959},[203,48559,3290],{"class":209},[203,48561,32496],{"class":213},[203,48563,26101],{"class":209},[203,48565,32501],{"class":262},[203,48567,32504],{"class":213},[203,48569,48570,48572,48574,48576,48578,48580,48582,48584,48586,48588,48590],{"class":205,"line":16971},[203,48571,32509],{"class":262},[203,48573,214],{"class":213},[203,48575,32514],{"class":318},[203,48577,32517],{"class":262},[203,48579,798],{"class":318},[203,48581,32517],{"class":262},[203,48583,465],{"class":318},[203,48585,32526],{"class":213},[203,48587,746],{"class":209},[203,48589,431],{"class":262},[203,48591,30555],{"class":213},[203,48593,48594,48596,48598,48600,48602,48604],{"class":205,"line":16976},[203,48595,32509],{"class":262},[203,48597,214],{"class":213},[203,48599,32541],{"class":318},[203,48601,669],{"class":209},[203,48603,660],{"class":262},[203,48605,220],{"class":213},[203,48607,48608],{"class":205,"line":16989},[203,48609,2489],{"emptyLinePlaceholder":131},[203,48611,48612],{"class":205,"line":16994},[203,48613,32556],{"class":272},[203,48615,48616],{"class":205,"line":16999},[203,48617,32561],{"class":272},[203,48619,48620,48622,48624],{"class":205,"line":17004},[203,48621,32566],{"class":213},[203,48623,259],{"class":209},[203,48625,32400],{"class":262},[203,48627,48628],{"class":205,"line":17017},[203,48629,32575],{"class":272},[203,48631,48632,48634,48636],{"class":205,"line":17022},[203,48633,32580],{"class":213},[203,48635,259],{"class":209},[203,48637,3174],{"class":262},[203,48639,48640],{"class":205,"line":32691},[203,48641,32589],{"class":272},[203,48643,48644,48646,48648],{"class":205,"line":32697},[203,48645,32594],{"class":213},[203,48647,259],{"class":209},[203,48649,32400],{"class":262},[203,48651,48652],{"class":205,"line":32703},[203,48653,32603],{"class":272},[203,48655,48656,48658,48660],{"class":205,"line":32709},[203,48657,32608],{"class":213},[203,48659,259],{"class":209},[203,48661,3174],{"class":262},[203,48663,48664],{"class":205,"line":32715},[203,48665,32617],{"class":272},[203,48667,48668,48670,48672],{"class":205,"line":32726},[203,48669,32622],{"class":213},[203,48671,259],{"class":209},[203,48673,3174],{"class":262},[203,48675,48676],{"class":205,"line":32732},[203,48677,32631],{"class":272},[203,48679,48680,48682,48684],{"class":205,"line":32752},[203,48681,32636],{"class":213},[203,48683,259],{"class":209},[203,48685,3174],{"class":262},[203,48687,48688],{"class":205,"line":32758},[203,48689,32645],{"class":272},[203,48691,48692,48694,48696,48698,48700],{"class":205,"line":32769},[203,48693,3492],{"class":209},[203,48695,31659],{"class":213},[203,48697,26101],{"class":209},[203,48699,31664],{"class":262},[203,48701,32658],{"class":213},[203,48703,48704],{"class":205,"line":32775},[203,48705,32663],{"class":272},[203,48707,48708,48710,48712],{"class":205,"line":32781},[203,48709,32668],{"class":213},[203,48711,259],{"class":209},[203,48713,32673],{"class":213},[203,48715,48716],{"class":205,"line":32787},[203,48717,32678],{"class":272},[203,48719,48720,48722,48724],{"class":205,"line":32793},[203,48721,32683],{"class":213},[203,48723,259],{"class":209},[203,48725,32688],{"class":213},[203,48727,48728],{"class":205,"line":32799},[203,48729,32694],{"class":272},[203,48731,48732],{"class":205,"line":32805},[203,48733,32700],{"class":213},[203,48735,48736],{"class":205,"line":32811},[203,48737,32706],{"class":272},[203,48739,48740],{"class":205,"line":32831},[203,48741,32712],{"class":272},[203,48743,48744,48746,48748],{"class":205,"line":32837},[203,48745,32718],{"class":213},[203,48747,259],{"class":209},[203,48749,32723],{"class":213},[203,48751,48752],{"class":205,"line":32853},[203,48753,32729],{"class":272},[203,48755,48756,48758,48760,48762,48764,48766,48768],{"class":205,"line":32859},[203,48757,32735],{"class":213},[203,48759,259],{"class":209},[203,48761,32740],{"class":213},[203,48763,32743],{"class":5306},[203,48765,259],{"class":209},[203,48767,431],{"class":262},[203,48769,220],{"class":213},[203,48771,48772],{"class":205,"line":32873},[203,48773,32755],{"class":272},[203,48775,48776,48778,48780],{"class":205,"line":32879},[203,48777,32761],{"class":213},[203,48779,259],{"class":209},[203,48781,32766],{"class":213},[203,48783,48784],{"class":205,"line":32894},[203,48785,32772],{"class":272},[203,48787,48788],{"class":205,"line":32900},[203,48789,32778],{"class":213},[203,48791,48792],{"class":205,"line":32909},[203,48793,32784],{"class":272},[203,48795,48796],{"class":205,"line":32915},[203,48797,32790],{"class":213},[203,48799,48800],{"class":205,"line":32924},[203,48801,32796],{"class":272},[203,48803,48804],{"class":205,"line":32930},[203,48805,32802],{"class":213},[203,48807,48808],{"class":205,"line":32936},[203,48809,32808],{"class":272},[203,48811,48812,48814,48816,48818,48820,48822,48824],{"class":205,"line":32945},[203,48813,32814],{"class":213},[203,48815,9567],{"class":209},[203,48817,32819],{"class":213},[203,48819,669],{"class":209},[203,48821,32824],{"class":213},[203,48823,405],{"class":262},[203,48825,220],{"class":213},[203,48827,48828],{"class":205,"line":32951},[203,48829,32834],{"class":272},[203,48831,48832,48834,48836,48838,48840],{"class":205,"line":32962},[203,48833,32840],{"class":213},[203,48835,9567],{"class":209},[203,48837,32845],{"class":213},[203,48839,3038],{"class":209},[203,48841,32850],{"class":213},[203,48843,48844],{"class":205,"line":32968},[203,48845,32856],{"class":272},[203,48847,48848,48850,48852,48854,48856],{"class":205,"line":32987},[203,48849,32862],{"class":213},[203,48851,9567],{"class":209},[203,48853,32824],{"class":213},[203,48855,405],{"class":262},[203,48857,220],{"class":213},[203,48859,48860],{"class":205,"line":32993},[203,48861,32876],{"class":272},[203,48863,48864,48866,48868,48870,48872],{"class":205,"line":33004},[203,48865,3492],{"class":209},[203,48867,32884],{"class":213},[203,48869,26101],{"class":209},[203,48871,31664],{"class":262},[203,48873,32891],{"class":213},[203,48875,48876],{"class":205,"line":33010},[203,48877,32897],{"class":272},[203,48879,48880,48882,48884],{"class":205,"line":33030},[203,48881,32668],{"class":213},[203,48883,259],{"class":209},[203,48885,32673],{"class":213},[203,48887,48888],{"class":205,"line":33046},[203,48889,32912],{"class":272},[203,48891,48892,48894,48896],{"class":205,"line":33052},[203,48893,32683],{"class":213},[203,48895,259],{"class":209},[203,48897,32688],{"class":213},[203,48899,48900],{"class":205,"line":33066},[203,48901,32927],{"class":272},[203,48903,48904],{"class":205,"line":33072},[203,48905,32933],{"class":213},[203,48907,48908],{"class":205,"line":33078},[203,48909,36414],{"class":272},[203,48911,48912,48914],{"class":205,"line":33089},[203,48913,32939],{"class":209},[203,48915,32942],{"class":213},[203,48917,48918],{"class":205,"line":33095},[203,48919,32948],{"class":272},[203,48921,48922,48924,48926],{"class":205,"line":33101},[203,48923,36429],{"class":213},[203,48925,259],{"class":209},[203,48927,32723],{"class":213},[203,48929,48930],{"class":205,"line":33111},[203,48931,32965],{"class":272},[203,48933,48934,48936,48938,48940,48942,48944,48946],{"class":205,"line":33117},[203,48935,36442],{"class":213},[203,48937,259],{"class":209},[203,48939,32740],{"class":213},[203,48941,32743],{"class":5306},[203,48943,259],{"class":209},[203,48945,431],{"class":262},[203,48947,220],{"class":213},[203,48949,48950],{"class":205,"line":33128},[203,48951,32990],{"class":272},[203,48953,48954,48956,48958],{"class":205,"line":33134},[203,48955,36463],{"class":213},[203,48957,259],{"class":209},[203,48959,32766],{"class":213},[203,48961,48962],{"class":205,"line":33144},[203,48963,33007],{"class":272},[203,48965,48966,48968,48970,48972,48974,48976,48978],{"class":205,"line":33149},[203,48967,36476],{"class":213},[203,48969,9567],{"class":209},[203,48971,36481],{"class":213},[203,48973,669],{"class":209},[203,48975,32824],{"class":213},[203,48977,405],{"class":262},[203,48979,220],{"class":213},[203,48981,48982,48984,48986,48988,48990],{"class":205,"line":33155},[203,48983,36494],{"class":213},[203,48985,9567],{"class":209},[203,48987,32845],{"class":213},[203,48989,3038],{"class":209},[203,48991,32850],{"class":213},[203,48993,48994],{"class":205,"line":33204},[203,48995,36507],{"class":272},[203,48997,48998,49000,49002,49004,49006],{"class":205,"line":33251},[203,48999,36512],{"class":213},[203,49001,9567],{"class":209},[203,49003,32824],{"class":213},[203,49005,405],{"class":262},[203,49007,220],{"class":213},[203,49009,49010],{"class":205,"line":33256},[203,49011,33069],{"class":272},[203,49013,49014],{"class":205,"line":33262},[203,49015,33075],{"class":272},[203,49017,49018,49020,49022],{"class":205,"line":33281},[203,49019,33081],{"class":213},[203,49021,798],{"class":209},[203,49023,33086],{"class":213},[203,49025,49026],{"class":205,"line":33287},[203,49027,33092],{"class":272},[203,49029,49030],{"class":205,"line":33307},[203,49031,33098],{"class":272},[203,49033,49034,49036,49038],{"class":205,"line":33313},[203,49035,33104],{"class":213},[203,49037,798],{"class":209},[203,49039,33086],{"class":213},[203,49041,49042],{"class":205,"line":33319},[203,49043,33114],{"class":272},[203,49045,49046,49048,49050],{"class":205,"line":33329},[203,49047,33120],{"class":213},[203,49049,798],{"class":209},[203,49051,33125],{"class":213},[203,49053,49054],{"class":205,"line":33334},[203,49055,33131],{"class":272},[203,49057,49058,49060,49062],{"class":205,"line":33340},[203,49059,33137],{"class":213},[203,49061,798],{"class":209},[203,49063,33125],{"class":213},[203,49065,49066],{"class":205,"line":33356},[203,49067,2489],{"emptyLinePlaceholder":131},[203,49069,49070],{"class":205,"line":33401},[203,49071,33152],{"class":272},[203,49073,49074,49076,49078,49080,49082,49084,49086,49088,49090,49092,49094,49096,49098,49100,49102,49104,49106,49108,49110,49112],{"class":205,"line":33407},[203,49075,32509],{"class":262},[203,49077,214],{"class":213},[203,49079,3681],{"class":318},[203,49081,32517],{"class":262},[203,49083,33166],{"class":318},[203,49085,1110],{"class":262},[203,49087,33171],{"class":209},[203,49089,1160],{"class":262},[203,49091,33176],{"class":318},[203,49093,1110],{"class":262},[203,49095,33171],{"class":209},[203,49097,1160],{"class":262},[203,49099,3681],{"class":318},[203,49101,33187],{"class":213},[203,49103,746],{"class":209},[203,49105,431],{"class":262},[203,49107,33194],{"class":213},[203,49109,746],{"class":209},[203,49111,431],{"class":262},[203,49113,33201],{"class":213},[203,49115,49116,49118,49120,49122,49124,49126,49128,49130,49132,49134,49136,49138,49140,49142,49144,49146,49148,49150,49152,49154],{"class":205,"line":33413},[203,49117,32509],{"class":262},[203,49119,214],{"class":213},[203,49121,3681],{"class":318},[203,49123,32517],{"class":262},[203,49125,33215],{"class":318},[203,49127,1110],{"class":262},[203,49129,33171],{"class":209},[203,49131,1160],{"class":262},[203,49133,33224],{"class":318},[203,49135,1110],{"class":262},[203,49137,33171],{"class":209},[203,49139,1160],{"class":262},[203,49141,3681],{"class":318},[203,49143,33235],{"class":213},[203,49145,746],{"class":209},[203,49147,431],{"class":262},[203,49149,33242],{"class":213},[203,49151,746],{"class":209},[203,49153,431],{"class":262},[203,49155,33201],{"class":213},[203,49157,49158],{"class":205,"line":33419},[203,49159,2489],{"emptyLinePlaceholder":131},[203,49161,49162],{"class":205,"line":33430},[203,49163,33259],{"class":272},[203,49165,49166,49168,49170,49172,49174,49176,49178],{"class":205,"line":33436},[203,49167,2586],{"class":209},[203,49169,33267],{"class":213},[203,49171,746],{"class":209},[203,49173,431],{"class":262},[203,49175,1154],{"class":213},[203,49177,1174],{"class":209},[203,49179,33278],{"class":213},[203,49181,49182],{"class":205,"line":33442},[203,49183,33284],{"class":272},[203,49185,49186,49188,49190,49192,49194,49196,49198],{"class":205,"line":33448},[203,49187,33290],{"class":213},[203,49189,253],{"class":262},[203,49191,259],{"class":209},[203,49193,33297],{"class":213},[203,49195,746],{"class":209},[203,49197,431],{"class":262},[203,49199,33304],{"class":213},[203,49201,49202],{"class":205,"line":33466},[203,49203,33310],{"class":272},[203,49205,49206],{"class":205,"line":33480},[203,49207,33316],{"class":272},[203,49209,49210,49212,49214],{"class":205,"line":33489},[203,49211,33322],{"class":213},[203,49213,259],{"class":209},[203,49215,32372],{"class":213},[203,49217,49218],{"class":205,"line":33498},[203,49219,2489],{"emptyLinePlaceholder":131},[203,49221,49222],{"class":205,"line":33507},[203,49223,33337],{"class":272},[203,49225,49226,49228,49230,49232,49234],{"class":205,"line":33516},[203,49227,33343],{"class":213},[203,49229,259],{"class":209},[203,49231,33348],{"class":213},[203,49233,746],{"class":209},[203,49235,33353],{"class":213},[203,49237,49238,49240,49242,49244,49246,49248,49250,49252,49254,49256,49258,49260,49262,49264,49266,49268,49270,49272],{"class":205,"line":33522},[203,49239,32509],{"class":262},[203,49241,214],{"class":213},[203,49243,33363],{"class":318},[203,49245,1110],{"class":262},[203,49247,33368],{"class":209},[203,49249,1160],{"class":262},[203,49251,758],{"class":318},[203,49253,1110],{"class":262},[203,49255,33368],{"class":209},[203,49257,1160],{"class":262},[203,49259,33381],{"class":318},[203,49261,33384],{"class":213},[203,49263,33387],{"class":209},[203,49265,1121],{"class":262},[203,49267,33392],{"class":213},[203,49269,542],{"class":209},[203,49271,1121],{"class":262},[203,49273,30555],{"class":213},[203,49275,49276],{"class":205,"line":33528},[203,49277,36791],{"class":272},[203,49279,49280],{"class":205,"line":33536},[203,49281,36796],{"class":272},[203,49283,49284,49286,49288],{"class":205,"line":33541},[203,49285,36801],{"class":213},[203,49287,33425],{"class":318},[203,49289,220],{"class":213},[203,49291,49292],{"class":205,"line":33547},[203,49293,33445],{"class":272},[203,49295,49296,49298,49300,49302,49304,49306],{"class":205,"line":33558},[203,49297,33451],{"class":213},[203,49299,259],{"class":209},[203,49301,33456],{"class":213},[203,49303,33459],{"class":5306},[203,49305,259],{"class":209},[203,49307,1635],{"class":213},[203,49309,49310,49312,49314,49316],{"class":205,"line":33564},[203,49311,33469],{"class":318},[203,49313,1073],{"class":213},[203,49315,33474],{"class":262},[203,49317,33477],{"class":213},[203,49319,49320,49322],{"class":205,"line":33584},[203,49321,33483],{"class":318},[203,49323,33486],{"class":213},[203,49325,49326,49328],{"class":205,"line":33590},[203,49327,33492],{"class":318},[203,49329,33495],{"class":213},[203,49331,49332,49334],{"class":205,"line":33596},[203,49333,33501],{"class":318},[203,49335,33504],{"class":213},[203,49337,49338,49340],{"class":205,"line":33602},[203,49339,33510],{"class":318},[203,49341,33513],{"class":213},[203,49343,49344],{"class":205,"line":33619},[203,49345,33519],{"class":213},[203,49347,49348],{"class":205,"line":33625},[203,49349,33525],{"class":272},[203,49351,49352,49354],{"class":205,"line":33631},[203,49353,4179],{"class":209},[203,49355,33533],{"class":213},[203,49357,49358],{"class":205,"line":33637},[203,49359,2489],{"emptyLinePlaceholder":131},[203,49361,49362],{"class":205,"line":33643},[203,49363,33544],{"class":272},[203,49365,49366,49368,49370],{"class":205,"line":33649},[203,49367,32005],{"class":209},[203,49369,33552],{"class":2052},[203,49371,33555],{"class":213},[203,49373,49374],{"class":205,"line":33676},[203,49375,33561],{"class":272},[203,49377,49378,49380,49382,49384,49386,49388,49390,49392],{"class":205,"line":33700},[203,49379,33567],{"class":213},[203,49381,31751],{"class":5306},[203,49383,259],{"class":209},[203,49385,214],{"class":213},[203,49387,712],{"class":262},[203,49389,592],{"class":213},[203,49391,507],{"class":262},[203,49393,30555],{"class":213},[203,49395,49396],{"class":205,"line":33706},[203,49397,33587],{"class":272},[203,49399,49400],{"class":205,"line":33712},[203,49401,33593],{"class":272},[203,49403,49404],{"class":205,"line":33718},[203,49405,33599],{"class":272},[203,49407,49408,49410,49412,49414,49416,49418,49420],{"class":205,"line":33729},[203,49409,31785],{"class":213},[203,49411,431],{"class":262},[203,49413,592],{"class":213},[203,49415,291],{"class":262},[203,49417,592],{"class":213},[203,49419,431],{"class":262},[203,49421,220],{"class":213},[203,49423,49424],{"class":205,"line":33740},[203,49425,33622],{"class":272},[203,49427,49428],{"class":205,"line":33746},[203,49429,33628],{"class":272},[203,49431,49432],{"class":205,"line":33763},[203,49433,33634],{"class":272},[203,49435,49436],{"class":205,"line":33786},[203,49437,33640],{"class":272},[203,49439,49440],{"class":205,"line":33809},[203,49441,33646],{"class":272},[203,49443,49444,49446,49448,49450,49452,49454,49456,49458,49460],{"class":205,"line":33815},[203,49445,33652],{"class":213},[203,49447,33655],{"class":318},[203,49449,33658],{"class":213},[203,49451,33661],{"class":318},[203,49453,592],{"class":213},[203,49455,33666],{"class":5306},[203,49457,259],{"class":209},[203,49459,33671],{"class":318},[203,49461,220],{"class":213},[203,49463,49464,49466,49468,49470,49472,49474,49476,49478,49480],{"class":205,"line":33820},[203,49465,33652],{"class":213},[203,49467,33655],{"class":318},[203,49469,33683],{"class":213},[203,49471,33686],{"class":318},[203,49473,592],{"class":213},[203,49475,33666],{"class":5306},[203,49477,259],{"class":209},[203,49479,33695],{"class":318},[203,49481,220],{"class":213},[203,49483,49484],{"class":205,"line":33829},[203,49485,33703],{"class":272},[203,49487,49488],{"class":205,"line":33839},[203,49489,33709],{"class":213},[203,49491,49492],{"class":205,"line":33845},[203,49493,33715],{"class":272},[203,49495,49496,49498,49500],{"class":205,"line":33850},[203,49497,33721],{"class":213},[203,49499,33724],{"class":318},[203,49501,220],{"class":213},[203,49503,49504,49506,49508],{"class":205,"line":33856},[203,49505,33732],{"class":213},[203,49507,33735],{"class":318},[203,49509,220],{"class":213},[203,49511,49512],{"class":205,"line":33869},[203,49513,33743],{"class":272},[203,49515,49516,49518,49520,49522,49524,49526,49528],{"class":205,"line":33875},[203,49517,31785],{"class":213},[203,49519,431],{"class":262},[203,49521,592],{"class":213},[203,49523,291],{"class":262},[203,49525,592],{"class":213},[203,49527,291],{"class":262},[203,49529,220],{"class":213},[203,49531,49532,49534,49536,49538,49540,49542,49544,49546,49548],{"class":205,"line":33886},[203,49533,33652],{"class":213},[203,49535,33655],{"class":318},[203,49537,33770],{"class":213},[203,49539,33661],{"class":318},[203,49541,592],{"class":213},[203,49543,33666],{"class":5306},[203,49545,259],{"class":209},[203,49547,33781],{"class":318},[203,49549,220],{"class":213},[203,49551,49552,49554,49556,49558,49560,49562,49564,49566,49568],{"class":205,"line":33897},[203,49553,33652],{"class":213},[203,49555,33655],{"class":318},[203,49557,33793],{"class":213},[203,49559,33686],{"class":318},[203,49561,592],{"class":213},[203,49563,33666],{"class":5306},[203,49565,259],{"class":209},[203,49567,33804],{"class":318},[203,49569,220],{"class":213},[203,49571,49572],{"class":205,"line":33916},[203,49573,33812],{"class":272},[203,49575,49577],{"class":205,"line":49576},219,[203,49578,33709],{"class":213},[203,49580,49582,49584,49586],{"class":205,"line":49581},220,[203,49583,33721],{"class":213},[203,49585,33655],{"class":318},[203,49587,220],{"class":213},[203,49589,49591,49593,49595],{"class":205,"line":49590},221,[203,49592,33732],{"class":213},[203,49594,33834],{"class":318},[203,49596,220],{"class":213},[203,49598,49600],{"class":205,"line":49599},222,[203,49601,33842],{"class":213},[203,49603,49605],{"class":205,"line":49604},223,[203,49606,2489],{"emptyLinePlaceholder":131},[203,49608,49610],{"class":205,"line":49609},224,[203,49611,33853],{"class":272},[203,49613,49615,49617,49619,49621,49623],{"class":205,"line":49614},225,[203,49616,1620],{"class":209},[203,49618,31278],{"class":262},[203,49620,3038],{"class":209},[203,49622,31283],{"class":318},[203,49624,3828],{"class":213},[203,49626,49628],{"class":205,"line":49627},226,[203,49629,33872],{"class":272},[203,49631,49633,49635,49637],{"class":205,"line":49632},227,[203,49634,44604],{"class":213},[203,49636,259],{"class":209},[203,49638,44609],{"class":213},[203,49640,49642,49644,49646],{"class":205,"line":49641},228,[203,49643,33889],{"class":213},[203,49645,259],{"class":209},[203,49647,33894],{"class":213},[203,49649,49651,49653,49655,49657,49659,49661,49663],{"class":205,"line":49650},229,[203,49652,33451],{"class":213},[203,49654,259],{"class":209},[203,49656,44626],{"class":213},[203,49658,33907],{"class":5306},[203,49660,259],{"class":209},[203,49662,1121],{"class":262},[203,49664,220],{"class":213},[203,49666,49668],{"class":205,"line":49667},230,[203,49669,33919],{"class":213},[22088,49671,49673],{"id":49672},"_242测试代码","2.4.2.测试代码",[19,49675,49676],{},"使用测试集进行测试与推理",[194,49678,49680],{"className":30436,"code":49679,"language":30438,"meta":27,"style":27},"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",[200,49681,49682,49688,49698,49708,49719,49729,49733,49737,49745,49750,49754,49771,49775,49779,49783,49787,49791,49823,49827,49835,49839,49851,49855,49859,49863,49867,49871,49875,49879,49883,49901,49915,49919,49929,49939,49949,49955,49959,49963,49971,49975,49991,49999,50003,50007,50015,50023,50027,50031,50035,50039,50045,50049,50059,50067,50075,50079,50083,50087,50095,50099,50115,50119,50123,50127,50139,50143,50155,50159,50163,50175,50179,50189,50193,50197,50209,50213,50221,50225,50229,50237,50241,50249,50253,50257,50261,50265,50269,50285,50293,50297,50301,50319,50325,50329,50339,50347,50355,50359,50363,50367,50371,50379,50383,50399,50403,50411,50419],{"__ignoreMap":27},[203,49683,49684,49686],{"class":205,"line":206},[203,49685,30450],{"class":209},[203,49687,30453],{"class":213},[203,49689,49690,49692,49694,49696],{"class":205,"line":124},[203,49691,30450],{"class":209},[203,49693,31473],{"class":213},[203,49695,31441],{"class":209},[203,49697,31478],{"class":213},[203,49699,49700,49702,49704,49706],{"class":205,"line":1269},[203,49701,30795],{"class":209},[203,49703,31456],{"class":213},[203,49705,30450],{"class":209},[203,49707,31461],{"class":213},[203,49709,49710,49712,49714,49716],{"class":205,"line":1284},[203,49711,30795],{"class":209},[203,49713,31426],{"class":213},[203,49715,30450],{"class":209},[203,49717,49718],{"class":213}," ImageFolder\n",[203,49720,49721,49723,49725,49727],{"class":205,"line":1290},[203,49722,30795],{"class":209},[203,49724,31972],{"class":213},[203,49726,30450],{"class":209},[203,49728,44698],{"class":213},[203,49730,49731],{"class":205,"line":1304},[203,49732,2489],{"emptyLinePlaceholder":131},[203,49734,49735],{"class":205,"line":1310},[203,49736,34009],{"class":272},[203,49738,49739,49741,49743],{"class":205,"line":1401},[203,49740,32005],{"class":209},[203,49742,34016],{"class":2052},[203,49744,32011],{"class":213},[203,49746,49747],{"class":205,"line":1407},[203,49748,49749],{"class":272},"   # 导入自己的数据集，并进行数据处理\n",[203,49751,49752],{"class":205,"line":1419},[203,49753,48019],{"class":272},[203,49755,49756,49758,49760,49762,49764,49766,49769],{"class":205,"line":1701},[203,49757,48024],{"class":262},[203,49759,259],{"class":209},[203,49761,884],{"class":209},[203,49763,465],{"class":318},[203,49765,772],{"class":262},[203,49767,49768],{"class":48035},"\u002Fdata\u002Ftest",[203,49770,25191],{"class":318},[203,49772,49773],{"class":205,"line":1706},[203,49774,2489],{"emptyLinePlaceholder":131},[203,49776,49777],{"class":205,"line":1712},[203,49778,48047],{"class":272},[203,49780,49781],{"class":205,"line":1717},[203,49782,48052],{"class":272},[203,49784,49785],{"class":205,"line":1731},[203,49786,48057],{"class":272},[203,49788,49789],{"class":205,"line":1736},[203,49790,48062],{"class":272},[203,49792,49793,49795,49797,49799,49801,49803,49805,49807,49809,49811,49813,49815,49817,49819,49821],{"class":205,"line":1742},[203,49794,48067],{"class":213},[203,49796,259],{"class":209},[203,49798,48072],{"class":213},[203,49800,48075],{"class":262},[203,49802,592],{"class":213},[203,49804,48080],{"class":262},[203,49806,592],{"class":213},[203,49808,48085],{"class":262},[203,49810,48088],{"class":213},[203,49812,48091],{"class":262},[203,49814,592],{"class":213},[203,49816,48096],{"class":262},[203,49818,592],{"class":213},[203,49820,48101],{"class":262},[203,49822,4746],{"class":213},[203,49824,49825],{"class":205,"line":1763},[203,49826,48108],{"class":272},[203,49828,49829,49831,49833],{"class":205,"line":1768},[203,49830,48113],{"class":213},[203,49832,259],{"class":209},[203,49834,48118],{"class":213},[203,49836,49837],{"class":205,"line":1782},[203,49838,48123],{"class":272},[203,49840,49841,49843,49845,49847,49849],{"class":205,"line":1787},[203,49842,48128],{"class":213},[203,49844,31559],{"class":262},[203,49846,592],{"class":213},[203,49848,31559],{"class":262},[203,49850,42680],{"class":213},[203,49852,49853],{"class":205,"line":1816},[203,49854,48141],{"class":272},[203,49856,49857],{"class":205,"line":1821},[203,49858,48146],{"class":213},[203,49860,49861],{"class":205,"line":1838},[203,49862,48151],{"class":213},[203,49864,49865],{"class":205,"line":1843},[203,49866,48156],{"class":272},[203,49868,49869],{"class":205,"line":1848},[203,49870,48161],{"class":272},[203,49872,49873],{"class":205,"line":1853},[203,49874,2489],{"emptyLinePlaceholder":131},[203,49876,49877],{"class":205,"line":1867},[203,49878,48170],{"class":272},[203,49880,49881],{"class":205,"line":1872},[203,49882,48175],{"class":272},[203,49884,49885,49887,49889,49891,49893,49895,49897,49899],{"class":205,"line":2666},[203,49886,34023],{"class":213},[203,49888,259],{"class":209},[203,49890,48184],{"class":213},[203,49892,48187],{"class":262},[203,49894,592],{"class":213},[203,49896,48192],{"class":5306},[203,49898,259],{"class":209},[203,49900,48197],{"class":213},[203,49902,49903,49905,49907,49909,49911,49913],{"class":205,"line":2680},[203,49904,34080],{"class":213},[203,49906,259],{"class":209},[203,49908,31592],{"class":213},[203,49910,31595],{"class":5306},[203,49912,259],{"class":209},[203,49914,34091],{"class":213},[203,49916,49917],{"class":205,"line":2688},[203,49918,34096],{"class":272},[203,49920,49921,49923,49925,49927],{"class":205,"line":2693},[203,49922,34101],{"class":5306},[203,49924,259],{"class":209},[203,49926,431],{"class":262},[203,49928,31524],{"class":213},[203,49930,49931,49933,49935,49937],{"class":205,"line":2699},[203,49932,34112],{"class":5306},[203,49934,259],{"class":209},[203,49936,31534],{"class":262},[203,49938,31524],{"class":213},[203,49940,49941,49943,49945,49947],{"class":205,"line":2705},[203,49942,34123],{"class":5306},[203,49944,259],{"class":209},[203,49946,405],{"class":262},[203,49948,220],{"class":213},[203,49950,49951,49953],{"class":205,"line":2710},[203,49952,4179],{"class":209},[203,49954,34136],{"class":213},[203,49956,49957],{"class":205,"line":8038},[203,49958,2489],{"emptyLinePlaceholder":131},[203,49960,49961],{"class":205,"line":8062},[203,49962,34145],{"class":272},[203,49964,49965,49967,49969],{"class":205,"line":8067},[203,49966,32005],{"class":209},[203,49968,34152],{"class":2052},[203,49970,34155],{"class":213},[203,49972,49973],{"class":205,"line":8073},[203,49974,34160],{"class":272},[203,49976,49977,49979,49981,49983,49985,49987,49989],{"class":205,"line":8100},[203,49978,31295],{"class":213},[203,49980,259],{"class":209},[203,49982,31302],{"class":318},[203,49984,1793],{"class":209},[203,49986,31307],{"class":213},[203,49988,1790],{"class":209},[203,49990,34177],{"class":318},[203,49992,49993,49995,49997],{"class":205,"line":8105},[203,49994,31347],{"class":213},[203,49996,259],{"class":209},[203,49998,32347],{"class":213},[203,50000,50001],{"class":205,"line":8111},[203,50002,2489],{"emptyLinePlaceholder":131},[203,50004,50005],{"class":205,"line":8123},[203,50006,34194],{"class":272},[203,50008,50009,50011,50013],{"class":205,"line":8135},[203,50010,34199],{"class":213},[203,50012,259],{"class":209},[203,50014,32400],{"class":262},[203,50016,50017,50019,50021],{"class":205,"line":8147},[203,50018,34208],{"class":213},[203,50020,259],{"class":209},[203,50022,3174],{"class":262},[203,50024,50025],{"class":205,"line":9806},[203,50026,2489],{"emptyLinePlaceholder":131},[203,50028,50029],{"class":205,"line":9831},[203,50030,34221],{"class":272},[203,50032,50033],{"class":205,"line":9854},[203,50034,34226],{"class":272},[203,50036,50037],{"class":205,"line":9878},[203,50038,34231],{"class":272},[203,50040,50041,50043],{"class":205,"line":9883},[203,50042,34236],{"class":209},[203,50044,32942],{"class":213},[203,50046,50047],{"class":205,"line":9888},[203,50048,34243],{"class":272},[203,50050,50051,50053,50055,50057],{"class":205,"line":9893},[203,50052,3492],{"class":209},[203,50054,34250],{"class":213},[203,50056,26101],{"class":209},[203,50058,34255],{"class":213},[203,50060,50061,50063,50065],{"class":205,"line":9902},[203,50062,34260],{"class":213},[203,50064,259],{"class":209},[203,50066,34265],{"class":213},[203,50068,50069,50071,50073],{"class":205,"line":9907},[203,50070,34270],{"class":213},[203,50072,259],{"class":209},[203,50074,34275],{"class":213},[203,50076,50077],{"class":205,"line":9913},[203,50078,34280],{"class":272},[203,50080,50081],{"class":205,"line":9934},[203,50082,32933],{"class":213},[203,50084,50085],{"class":205,"line":9940},[203,50086,34289],{"class":272},[203,50088,50089,50091,50093],{"class":205,"line":9954},[203,50090,32718],{"class":213},[203,50092,259],{"class":209},[203,50094,34298],{"class":213},[203,50096,50097],{"class":205,"line":9960},[203,50098,34303],{"class":272},[203,50100,50101,50103,50105,50107,50109,50111,50113],{"class":205,"line":9987},[203,50102,32735],{"class":213},[203,50104,259],{"class":209},[203,50106,32740],{"class":213},[203,50108,32743],{"class":5306},[203,50110,259],{"class":209},[203,50112,431],{"class":262},[203,50114,220],{"class":213},[203,50116,50117],{"class":205,"line":9996},[203,50118,34324],{"class":272},[203,50120,50121],{"class":205,"line":10002},[203,50122,34329],{"class":272},[203,50124,50125],{"class":205,"line":10010},[203,50126,34334],{"class":272},[203,50128,50129,50131,50133,50135,50137],{"class":205,"line":10015},[203,50130,34339],{"class":213},[203,50132,9567],{"class":209},[203,50134,32845],{"class":213},[203,50136,3038],{"class":209},[203,50138,34348],{"class":213},[203,50140,50141],{"class":205,"line":16694},[203,50142,34353],{"class":272},[203,50144,50145,50147,50149,50151,50153],{"class":205,"line":16700},[203,50146,34358],{"class":213},[203,50148,9567],{"class":209},[203,50150,34363],{"class":213},[203,50152,405],{"class":262},[203,50154,220],{"class":213},[203,50156,50157],{"class":205,"line":16723},[203,50158,2489],{"emptyLinePlaceholder":131},[203,50160,50161],{"class":205,"line":16729},[203,50162,34376],{"class":272},[203,50164,50165,50167,50169,50171,50173],{"class":205,"line":16752},[203,50166,34381],{"class":213},[203,50168,259],{"class":209},[203,50170,34386],{"class":213},[203,50172,798],{"class":209},[203,50174,34391],{"class":213},[203,50176,50177],{"class":205,"line":16766},[203,50178,34396],{"class":272},[203,50180,50181,50183,50185,50187],{"class":205,"line":16786},[203,50182,32509],{"class":262},[203,50184,214],{"class":213},[203,50186,34405],{"class":318},[203,50188,34408],{"class":213},[203,50190,50191],{"class":205,"line":16792},[203,50192,2489],{"emptyLinePlaceholder":131},[203,50194,50195],{"class":205,"line":16803},[203,50196,34417],{"class":272},[203,50198,50199,50201,50203,50205,50207],{"class":205,"line":16826},[203,50200,1620],{"class":209},[203,50202,31278],{"class":262},[203,50204,3038],{"class":209},[203,50206,31283],{"class":318},[203,50208,3828],{"class":213},[203,50210,50211],{"class":205,"line":16848},[203,50212,34434],{"class":272},[203,50214,50215,50217,50219],{"class":205,"line":16853},[203,50216,31347],{"class":213},[203,50218,259],{"class":209},[203,50220,44609],{"class":213},[203,50222,50223],{"class":205,"line":16859},[203,50224,34447],{"class":272},[203,50226,50227],{"class":205,"line":16873},[203,50228,34452],{"class":272},[203,50230,50231,50233,50235],{"class":205,"line":16886},[203,50232,34457],{"class":213},[203,50234,34460],{"class":318},[203,50236,30555],{"class":213},[203,50238,50239],{"class":205,"line":16891},[203,50240,34467],{"class":272},[203,50242,50243,50245,50247],{"class":205,"line":16905},[203,50244,34080],{"class":213},[203,50246,259],{"class":209},[203,50248,34476],{"class":213},[203,50250,50251],{"class":205,"line":16910},[203,50252,34481],{"class":272},[203,50254,50255],{"class":205,"line":16916},[203,50256,34486],{"class":213},[203,50258,50259],{"class":205,"line":16921},[203,50260,2489],{"emptyLinePlaceholder":131},[203,50262,50263],{"class":205,"line":16935},[203,50264,34495],{"class":272},[203,50266,50267],{"class":205,"line":16940},[203,50268,34500],{"class":272},[203,50270,50271,50273,50275,50277,50279,50281,50283],{"class":205,"line":16945},[203,50272,31295],{"class":213},[203,50274,259],{"class":209},[203,50276,31302],{"class":318},[203,50278,1793],{"class":209},[203,50280,31307],{"class":213},[203,50282,1790],{"class":209},[203,50284,34177],{"class":318},[203,50286,50287,50289,50291],{"class":205,"line":16959},[203,50288,31347],{"class":213},[203,50290,259],{"class":209},[203,50292,32347],{"class":213},[203,50294,50295],{"class":205,"line":16971},[203,50296,34529],{"class":272},[203,50298,50299],{"class":205,"line":16976},[203,50300,34534],{"class":272},[203,50302,50303,50305,50307,50309,50312,50314,50317],{"class":205,"line":16989},[203,50304,34539],{"class":213},[203,50306,259],{"class":209},[203,50308,1104],{"class":213},[203,50310,50311],{"class":318},"'猫'",[203,50313,592],{"class":213},[203,50315,50316],{"class":318},"'狗'",[203,50318,33304],{"class":213},[203,50320,50321,50323],{"class":205,"line":16994},[203,50322,34236],{"class":209},[203,50324,32942],{"class":213},[203,50326,50327],{"class":205,"line":16999},[203,50328,34604],{"class":272},[203,50330,50331,50333,50335,50337],{"class":205,"line":17004},[203,50332,3492],{"class":209},[203,50334,34611],{"class":213},[203,50336,26101],{"class":209},[203,50338,34255],{"class":213},[203,50340,50341,50343,50345],{"class":205,"line":17017},[203,50342,32668],{"class":213},[203,50344,259],{"class":209},[203,50346,32673],{"class":213},[203,50348,50349,50351,50353],{"class":205,"line":17022},[203,50350,32683],{"class":213},[203,50352,259],{"class":209},[203,50354,32688],{"class":213},[203,50356,50357],{"class":205,"line":32691},[203,50358,2489],{"emptyLinePlaceholder":131},[203,50360,50361],{"class":205,"line":32697},[203,50362,34640],{"class":272},[203,50364,50365],{"class":205,"line":32703},[203,50366,32933],{"class":213},[203,50368,50369],{"class":205,"line":32709},[203,50370,34649],{"class":272},[203,50372,50373,50375,50377],{"class":205,"line":32715},[203,50374,32718],{"class":213},[203,50376,259],{"class":209},[203,50378,32723],{"class":213},[203,50380,50381],{"class":205,"line":32726},[203,50382,34662],{"class":272},[203,50384,50385,50387,50389,50391,50393,50395,50397],{"class":205,"line":32732},[203,50386,32735],{"class":213},[203,50388,259],{"class":209},[203,50390,32740],{"class":213},[203,50392,32743],{"class":5306},[203,50394,259],{"class":209},[203,50396,431],{"class":262},[203,50398,220],{"class":213},[203,50400,50401],{"class":205,"line":32752},[203,50402,34683],{"class":272},[203,50404,50405,50407,50409],{"class":205,"line":32758},[203,50406,34688],{"class":213},[203,50408,259],{"class":209},[203,50410,34693],{"class":213},[203,50412,50413,50415,50417],{"class":205,"line":32769},[203,50414,34698],{"class":213},[203,50416,259],{"class":209},[203,50418,34703],{"class":213},[203,50420,50421,50423,50425,50427,50429,50431,50433,50435],{"class":205,"line":32775},[203,50422,34708],{"class":262},[203,50424,214],{"class":213},[203,50426,34713],{"class":318},[203,50428,34716],{"class":213},[203,50430,34719],{"class":318},[203,50432,592],{"class":213},[203,50434,34724],{"class":318},[203,50436,34727],{"class":213},[5216,50438,50439],{},"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":27,"searchDepth":124,"depth":124,"links":50441},[50442,50443,50444,50445],{"id":30649,"depth":1269,"text":30650},{"id":37897,"depth":1269,"text":37898},{"id":41330,"depth":1269,"text":41331},{"id":45339,"depth":1269,"text":45340},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30641,"description":23467},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50452,"title":50453,"body":50454,"description":23467,"extension":129,"meta":50461,"navigation":131,"path":50462,"seo":50463,"stem":50464,"__hash__":50465},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50455,"toc":50459},[50456],[10,50457,50453],{"id":50458},"_3yolo模型学习",{"title":27,"searchDepth":124,"depth":124,"links":50460},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50453,"description":23467},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50467,"title":50468,"body":50469,"description":50476,"extension":129,"meta":50477,"navigation":131,"path":50479,"seo":50480,"stem":50481,"__hash__":50482},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50470,"toc":50474},[50471],[19,50472,50473],{},"yolo模型还未补充",{"title":27,"searchDepth":124,"depth":124,"links":50475},[],"深度学习学习",{"category":50478},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50468,"description":50476},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50484,"title":50485,"body":50486,"description":23467,"extension":129,"meta":50511,"navigation":131,"path":50512,"seo":50513,"stem":50514,"__hash__":50515},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50487,"toc":50509},[50488,50491,50494,50499,50506],[10,50489,50485],{"id":50490},"_1工具",[19,50492,50493],{},"提示错误插件：有问题会提前报错",[19,50495,50496],{},[25,50497],{"alt":27,"src":50498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,50500,50501],{},[452,50502,50505],{"href":50503,"rel":50504},"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",[23956],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,50507,50508],{},"alt键加上下箭头可以实现语句的移动",{"title":27,"searchDepth":124,"depth":124,"links":50510},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50485,"description":23467},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50517,"title":50518,"body":50519,"description":23467,"extension":129,"meta":53383,"navigation":131,"path":53384,"seo":53385,"stem":53386,"__hash__":53387},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50520,"toc":53334},[50521,50524,50528,50532,50537,50540,50545,50549,50556,50561,50568,50573,50580,50585,50589,50594,50597,50601,50606,50610,50615,50618,50621,50624,50627,50630,50633,50636,50639,50644,50649,50654,50658,50661,50664,50668,50673,50676,50684,50689,50706,50714,50719,50724,50729,50734,50739,50742,50747,50752,50756,50765,50770,50775,50779,50784,50787,50791,50796,50804,50809,50814,50817,50822,50827,50832,50835,50838,50841,50846,50851,50854,50859,50862,50867,50870,50873,50876,50881,50884,50887,50902,50907,50912,50917,50920,50923,50926,50940,50943,50948,50953,50956,50959,50962,50965,50968,50971,50974,50978,50982,50987,50991,50994,50999,51004,51007,51012,51015,51019,51024,51027,51030,51033,51036,51039,51042,51045,51048,51051,51055,51060,51065,51070,51073,51076,51080,51085,51088,51092,51095,51098,51103,51106,51109,51113,51117,51120,51125,51130,51133,51162,51167,51172,51177,51182,51186,51191,51195,51200,51203,51207,51211,51216,51220,51225,51230,51234,51239,51242,51244,51247,51252,51256,51261,51265,51269,51274,51279,51284,51289,51293,51298,51303,51308,51311,51314,51319,51322,51327,51332,51337,51342,51346,52153,52157,52500,52505,52508,52511,52514,52517,52520,52523,52526,52529,52531,52534,52536,52539,52543,52548,52551,52554,52557,52561,52566,52571,52591,52594,52598,52603,52608,52625,52629,52658,52662,52684,52686,52725,52733,52739,52743,52746,52749,52754,52759,52762,52765,52768,52773,52778,52781,52784,52787,52790,52793,52796,52799,52802,52805,52808,52811,52813,52816,52819,52822,52825,52828,52831,52834,52837,52841,52846,52849,52854,52857,52860,52863,52866,52869,52872,52875,52877,52880,52883,52886,52889,52892,52895,52899,52902,52911,52914,52919,52922,52927,52930,52933,52936,52939,52942,52945,52948,52952,52956,52959,52962,52967,52972,52977,52981,52986,52991,52994,52997,53000,53003,53006,53011,53014,53019,53021,53026,53029,53033,53038,53041,53044,53049,53053,53056,53061,53064,53067,53096,53101,53104,53107,53110,53113,53116,53120,53123,53209,53213,53216,53221,53226,53233,53236,53239,53242,53245,53248,53253,53258,53261,53264,53267,53270,53273,53276,53279,53282,53285,53287,53290,53294,53299,53304,53309,53312,53317,53322,53325,53328,53331],[10,50522,50518],{"id":50523},"_2基础语法",[14,50525,50527],{"id":50526},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[174,50529,50531],{"id":50530},"_211-js组成","2.1.1 js组成",[157,50533,50534],{},[160,50535,50536],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,50538,50539],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[157,50541,50542],{"start":124},[160,50543,50544],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[174,50546,50548],{"id":50547},"_212-js书写位置","2.1.2 js书写位置",[157,50550,50551],{},[160,50552,50553],{},[363,50554,50555],{},"内部 JavaScript",[19,50557,50558],{},[25,50559],{"alt":27,"src":50560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[157,50562,50563],{"start":124},[160,50564,50565],{},[363,50566,50567],{},"外部 JavaScript",[19,50569,50570],{},[25,50571],{"alt":27,"src":50572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[157,50574,50575],{"start":1269},[160,50576,50577],{},[363,50578,50579],{},"内联 JavaScript",[19,50581,50582],{},[25,50583],{"alt":27,"src":50584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[174,50586,50588],{"id":50587},"_213-javascript注释","2.1.3 JavaScript注释",[19,50590,50591],{},[25,50592],{"alt":27,"src":50593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,50595,50596],{},"alt+shift+a一定要记住！",[174,50598,50600],{"id":50599},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,50602,50603],{},[25,50604],{"alt":27,"src":50605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[174,50607,50609],{"id":50608},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[157,50611,50612],{},[160,50613,50614],{},"输出语法：",[19,50616,50617],{},"①document.write('要出的内容')",[19,50619,50620],{},"向body内输出内容；",[19,50622,50623],{},"如果输出的内容写的是标签，也会被解析cheng",[19,50625,50626],{},"②alert('要出的内容')",[19,50628,50629],{},"页面弹出警告对话框",[19,50631,50632],{},"③console.log('控制台打印')",[19,50634,50635],{},"控制台输出语法，程序员调试使用",[19,50637,50638],{},"输入log就行，自动生成：",[19,50640,50641],{},[25,50642],{"alt":27,"src":50643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[157,50645,50646],{"start":124},[160,50647,50648],{},"输入语法：",[19,50650,50651],{},[25,50652],{"alt":27,"src":50653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[174,50655,50657],{"id":50656},"_2116-字面量","21.1.6 字面量",[19,50659,50660],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,50662,50663],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,50665,50667],{"id":50666},"_22-变量","2.2 变量",[157,50669,50670],{},[160,50671,50672],{},"变量声明",[19,50674,50675],{},"let 变量名",[1221,50677,50678,50681],{},[160,50679,50680],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[160,50682,50683],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[157,50685,50686],{"start":124},[160,50687,50688],{},"变量赋值",[194,50690,50694],{"className":50691,"code":50692,"language":50693,"meta":27,"style":27},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[200,50695,50696,50701],{"__ignoreMap":27},[203,50697,50698],{"class":205,"line":206},[203,50699,50700],{"class":213},"let age\n",[203,50702,50703],{"class":205,"line":124},[203,50704,50705],{"class":213},"age=18\n",[157,50707,50708,50711],{"start":1269},[160,50709,50710],{},"连这些（变量的初始化）：let age=18",[160,50712,50713],{},"更新变量",[19,50715,50716],{},[25,50717],{"alt":27,"src":50718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[157,50720,50721],{"start":1290},[160,50722,50723],{},"声明多个变量",[19,50725,50726],{},[25,50727],{"alt":27,"src":50728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[157,50730,50731],{"start":1304},[160,50732,50733],{},"变量命名规则与规范",[19,50735,50736],{},[25,50737],{"alt":27,"src":50738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,50740,50741],{},"遵守小驼峰！",[157,50743,50744],{"start":1310},[160,50745,50746],{},"变量拓展-let和var的区别",[19,50748,50749],{},[25,50750],{"alt":27,"src":50751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,50753,50755],{"id":50754},"_23-数组","2.3 数组",[194,50757,50759],{"className":50691,"code":50758,"language":50693,"meta":27,"style":27},"let arr = []\n",[200,50760,50761],{"__ignoreMap":27},[203,50762,50763],{"class":205,"line":206},[203,50764,50758],{"class":213},[19,50766,50767],{},[25,50768],{"alt":27,"src":50769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,50771,50772],{},[25,50773],{"alt":27,"src":50774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,50776,50778],{"id":50777},"_24-常量","2.4 常量",[19,50780,50781],{},[25,50782],{"alt":27,"src":50783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,50785,50786],{},"const — 类似于 let ，但是变量的值无法被修改",[14,50788,50790],{"id":50789},"_25-数据类型","2.5 数据类型",[19,50792,50793],{},[25,50794],{"alt":27,"src":50795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[157,50797,50798,50801],{},[160,50799,50800],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[160,50802,50803],{},"算数运算符：",[19,50805,50806],{},[25,50807],{"alt":27,"src":50808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[157,50810,50811],{"start":1269},[160,50812,50813],{},"数字类型（Number）",[19,50815,50816],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,50818,50819],{},[25,50820],{"alt":27,"src":50821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[157,50823,50824],{"start":1284},[160,50825,50826],{},"字符串类型（string）",[19,50828,50829],{},[25,50830],{"alt":27,"src":50831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,50833,50834],{},"反引号也是可以使用的",[19,50836,50837],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,50839,50840],{},"例如：document.write(\"我今年\"+age+\"岁\")",[157,50842,50843],{"start":1290},[160,50844,50845],{},"模板字符串",[19,50847,50848],{},[25,50849],{"alt":27,"src":50850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,50852,50853],{},"类似于python的字符串格式化",[157,50855,50856],{"start":1304},[160,50857,50858],{},"布尔类型",[19,50860,50861],{},"true 和 false",[157,50863,50864],{"start":1310},[160,50865,50866],{},"未定义类型（underfined）",[19,50868,50869],{},"表示没有赋值",[19,50871,50872],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,50874,50875],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[157,50877,50878],{"start":1401},[160,50879,50880],{},"null（空类型）",[19,50882,50883],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,50885,50886],{},"赋值了，但是内容为空",[194,50888,50890],{"className":50691,"code":50889,"language":50693,"meta":27,"style":27},"typeof null\n输出的是'object'，是一个对象数据类型\n",[200,50891,50892,50897],{"__ignoreMap":27},[203,50893,50894],{"class":205,"line":206},[203,50895,50896],{"class":213},"typeof null\n",[203,50898,50899],{"class":205,"line":124},[203,50900,50901],{"class":213},"输出的是'object'，是一个对象数据类型\n",[157,50903,50904],{"start":1407},[160,50905,50906],{},"控制台检测数据类型",[19,50908,50909],{},[25,50910],{"alt":27,"src":50911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[157,50913,50914],{"start":1419},[160,50915,50916],{},"类型转换",[19,50918,50919],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,50921,50922],{},"转换方式：隐式转换和显示转换",[19,50924,50925],{},"①隐式转换",[1221,50927,50928,50931,50934,50937],{},[160,50929,50930],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[160,50932,50933],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[160,50935,50936],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[160,50938,50939],{},"任何数据和字符串相加结果都是字符串",[19,50941,50942],{},"②显示转换",[19,50944,50945],{},[25,50946],{"alt":27,"src":50947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,50949,50950],{},[25,50951],{"alt":27,"src":50952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,50954,50955],{},"在输入的时候要用好隐式转换，简单写起来",[19,50957,50958],{},"let num = +prompt(’请输入数字：‘)",[19,50960,50961],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,50963,50964],{},"console.log(parseInt('12.333px'))",[19,50966,50967],{},"输出为：12",[19,50969,50970],{},"console.log(parseInt('a'a'a12.333px'))",[19,50972,50973],{},"输出：NaN",[14,50975,50977],{"id":50976},"_26-运算符","2.6 运算符",[174,50979,50981],{"id":50980},"_261-赋值运算符","2.6.1 赋值运算符",[19,50983,50984],{},[25,50985],{"alt":27,"src":50986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[174,50988,50990],{"id":50989},"_262-一元运算符","2.6.2 一元运算符",[19,50992,50993],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,50995,50996],{},[25,50997],{"alt":27,"src":50998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51000,51001],{},[25,51002],{"alt":27,"src":51003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51005,51006],{},"两者的区别：",[19,51008,51009],{},[25,51010],{"alt":27,"src":51011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51013,51014],{},"前置先自加；后置后加，代码执行完之后再加",[174,51016,51018],{"id":51017},"_263-比较运算符","2.6.3 比较运算符",[19,51020,51021],{},[25,51022],{"alt":27,"src":51023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51025,51026],{},"比较运算符也有隐式转换",[19,51028,51029],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51031,51032],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51034,51035],{},"要使用三等，开发的时候",[19,51037,51038],{},"NaN不等于任何人，包括它自己",[19,51040,51041],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51043,51044],{},"7\u002F10=0.7",[19,51046,51047],{},"最后：0.5+0.2=0.7",[19,51049,51050],{},"字符串比较，比较的是字符对应的ASCII码",[174,51052,51054],{"id":51053},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51056,51057],{},[25,51058],{"alt":27,"src":51059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51061,51062],{},[25,51063],{"alt":27,"src":51064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51066,51067],{},[25,51068],{"alt":27,"src":51069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51071,51072],{},"上述题目选D",[19,51074,51075],{},"与真2假1；或真1假2",[174,51077,51079],{"id":51078},"_265-运算符优先级","2.6.5 运算符优先级",[19,51081,51082],{},[25,51083],{"alt":27,"src":51084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51086,51087],{},"先算逻辑与，后算逻辑或",[14,51089,51091],{"id":51090},"_27-语句","2.7 语句",[19,51093,51094],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51096,51097],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51099,51100],{},[25,51101],{"alt":27,"src":51102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51104,51105],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51107,51108],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[174,51110,51112],{"id":51111},"_271-分支语句","2.7.1 分支语句",[22088,51114,51116],{"id":51115},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51118,51119],{},"if语句单行简单的话，可以不写{}，写在一行就行",[157,51121,51122],{},[160,51123,51124],{},"单分支语句",[19,51126,51127],{},[25,51128],{"alt":27,"src":51129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51131,51132],{},"除了0，所有数字都为真",[194,51134,51136],{"className":50691,"code":51135,"language":50693,"meta":27,"style":27},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[200,51137,51138,51143,51148,51153,51157],{"__ignoreMap":27},[203,51139,51140],{"class":205,"line":206},[203,51141,51142],{"class":213},"if（0) {\n",[203,51144,51145],{"class":205,"line":124},[203,51146,51147],{"class":213},"    let a=1\n",[203,51149,51150],{"class":205,"line":1269},[203,51151,51152],{"class":213},"    alert(typeof a)\n",[203,51154,51155],{"class":205,"line":1284},[203,51156,1654],{"class":213},[203,51158,51159],{"class":205,"line":1290},[203,51160,51161],{"class":213},"不输出，括号为假\n",[157,51163,51164],{"start":124},[160,51165,51166],{},"双分支语句",[19,51168,51169],{},[25,51170],{"alt":27,"src":51171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[157,51173,51174],{"start":1269},[160,51175,51176],{},"多分支语句",[19,51178,51179],{},[25,51180],{"alt":27,"src":51181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22088,51183,51185],{"id":51184},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51187,51188],{},[25,51189],{"alt":27,"src":51190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22088,51192,51194],{"id":51193},"_2713-switch语句","2.7.1.3 switch语句",[19,51196,51197],{},[25,51198],{"alt":27,"src":51199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51201,51202],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[174,51204,51206],{"id":51205},"_272-循环语句","2.7.2 循环语句",[22088,51208,51210],{"id":51209},"_2721-断点演示","2.7.2.1 断点演示",[19,51212,51213],{},[25,51214],{"alt":27,"src":51215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22088,51217,51219],{"id":51218},"_2722-while循环","2.7.2.2 while循环",[19,51221,51222],{},[25,51223],{"alt":27,"src":51224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51226,51227],{},[25,51228],{"alt":27,"src":51229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22088,51231,51233],{"id":51232},"_2723-for循环","2.7.2.3 for循环",[19,51235,51236],{},[25,51237],{"alt":27,"src":51238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51240,51241],{},"for(;;) {",[19,51243,1160],{},[19,51245,51246],{},"表示无限循环",[19,51248,51249],{},[25,51250],{"alt":27,"src":51251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22088,51253,51255],{"id":51254},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51257,51258],{},[25,51259],{"alt":27,"src":51260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51262,51264],{"id":51263},"_28-数组","2.8 数组",[174,51266,51268],{"id":51267},"_281-基础认识","2.8.1 基础认识",[19,51270,51271],{},[25,51272],{"alt":27,"src":51273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51275,51276],{},[25,51277],{"alt":27,"src":51278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51280,51281],{},[25,51282],{"alt":27,"src":51283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51285,51286],{},[25,51287],{"alt":27,"src":51288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[174,51290,51292],{"id":51291},"_282-操作数组","2.8.2 操作数组",[19,51294,51295],{},[25,51296],{"alt":27,"src":51297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[157,51299,51300],{},[160,51301,51302],{},"添加元素",[19,51304,51305],{},[25,51306],{"alt":27,"src":51307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51309,51310],{},"console.log(arr.push('green'))",[19,51312,51313],{},"输出结果：为新数组的长度",[19,51315,51316],{},[25,51317],{"alt":27,"src":51318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51320,51321],{},"push用的非常多，一定要记住",[157,51323,51324],{},[160,51325,51326],{},"删除元素",[19,51328,51329],{},[25,51330],{"alt":27,"src":51331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51333,51334],{},[25,51335],{"alt":27,"src":51336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51338,51339],{},[25,51340],{"alt":27,"src":51341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[174,51343,51345],{"id":51344},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[194,51347,51349],{"className":50691,"code":51348,"language":50693,"meta":27,"style":27},"\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",[200,51350,51351,51366,51382,51386,51395,51413,51437,51459,51473,51481,51488,51500,51511,51515,51519,51526,51538,51553,51566,51585,51602,51617,51629,51641,51653,51657,51661,51672,51682,51694,51706,51718,51729,51733,51737,51749,51753,51767,51771,51775,51786,51800,51812,51826,51830,51839,51848,51852,51861,51865,51874,51879,51884,51897,51925,51930,51935,51960,51965,51969,51974,51979,51994,51998,52003,52033,52045,52061,52077,52091,52096,52103,52107,52112,52125,52133,52141,52145],{"__ignoreMap":27},[203,51352,51353,51356,51360,51363],{"class":205,"line":206},[203,51354,51355],{"class":213},"\u003C!",[203,51357,51359],{"class":51358},"s9eBZ","DOCTYPE",[203,51361,51362],{"class":2052}," html",[203,51364,51365],{"class":213},">\n",[203,51367,51368,51370,51372,51375,51377,51380],{"class":205,"line":124},[203,51369,1124],{"class":213},[203,51371,50693],{"class":51358},[203,51373,51374],{"class":2052}," lang",[203,51376,259],{"class":213},[203,51378,51379],{"class":318},"\"en\"",[203,51381,51365],{"class":213},[203,51383,51384],{"class":205,"line":1269},[203,51385,2489],{"emptyLinePlaceholder":131},[203,51387,51388,51390,51393],{"class":205,"line":1284},[203,51389,1124],{"class":213},[203,51391,51392],{"class":51358},"head",[203,51394,51365],{"class":213},[203,51396,51397,51400,51403,51406,51408,51411],{"class":205,"line":1290},[203,51398,51399],{"class":213},"    \u003C",[203,51401,51402],{"class":51358},"meta",[203,51404,51405],{"class":2052}," charset",[203,51407,259],{"class":213},[203,51409,51410],{"class":318},"\"UTF-8\"",[203,51412,51365],{"class":213},[203,51414,51415,51417,51419,51422,51424,51427,51430,51432,51435],{"class":205,"line":1304},[203,51416,51399],{"class":213},[203,51418,51402],{"class":51358},[203,51420,51421],{"class":2052}," http-equiv",[203,51423,259],{"class":213},[203,51425,51426],{"class":318},"\"X-UA-Compatible\"",[203,51428,51429],{"class":2052}," content",[203,51431,259],{"class":213},[203,51433,51434],{"class":318},"\"IE=edge\"",[203,51436,51365],{"class":213},[203,51438,51439,51441,51443,51445,51447,51450,51452,51454,51457],{"class":205,"line":1310},[203,51440,51399],{"class":213},[203,51442,51402],{"class":51358},[203,51444,15010],{"class":2052},[203,51446,259],{"class":213},[203,51448,51449],{"class":318},"\"viewport\"",[203,51451,51429],{"class":2052},[203,51453,259],{"class":213},[203,51455,51456],{"class":318},"\"width=device-width, initial-scale=1.0\"",[203,51458,51365],{"class":213},[203,51460,51461,51463,51466,51469,51471],{"class":205,"line":1401},[203,51462,51399],{"class":213},[203,51464,51465],{"class":51358},"title",[203,51467,51468],{"class":213},">Document\u003C\u002F",[203,51470,51465],{"class":51358},[203,51472,51365],{"class":213},[203,51474,51475,51477,51479],{"class":205,"line":1407},[203,51476,51399],{"class":213},[203,51478,5216],{"class":51358},[203,51480,51365],{"class":213},[203,51482,51483,51486],{"class":205,"line":1419},[203,51484,51485],{"class":51358},"        *",[203,51487,15662],{"class":213},[203,51489,51490,51493,51496,51498],{"class":205,"line":1701},[203,51491,51492],{"class":262},"            margin",[203,51494,51495],{"class":213},": ",[203,51497,405],{"class":262},[203,51499,1380],{"class":213},[203,51501,51502,51505,51507,51509],{"class":205,"line":1706},[203,51503,51504],{"class":262},"            padding",[203,51506,51495],{"class":213},[203,51508,405],{"class":262},[203,51510,1380],{"class":213},[203,51512,51513],{"class":205,"line":1712},[203,51514,2618],{"class":213},[203,51516,51517],{"class":205,"line":1717},[203,51518,2489],{"emptyLinePlaceholder":131},[203,51520,51521,51524],{"class":205,"line":1731},[203,51522,51523],{"class":2052},"        .box",[203,51525,15662],{"class":213},[203,51527,51528,51531,51533,51536],{"class":205,"line":1736},[203,51529,51530],{"class":262},"            display",[203,51532,51495],{"class":213},[203,51534,51535],{"class":262},"flex",[203,51537,1380],{"class":213},[203,51539,51540,51543,51545,51548,51551],{"class":205,"line":1742},[203,51541,51542],{"class":262},"            width",[203,51544,51495],{"class":213},[203,51546,51547],{"class":262},"700",[203,51549,51550],{"class":209},"px",[203,51552,1380],{"class":213},[203,51554,51555,51558,51560,51562,51564],{"class":205,"line":1763},[203,51556,51557],{"class":262},"            height",[203,51559,51495],{"class":213},[203,51561,4062],{"class":262},[203,51563,51550],{"class":209},[203,51565,1380],{"class":213},[203,51567,51568,51571,51573,51575,51577,51580,51583],{"class":205,"line":1768},[203,51569,51570],{"class":262},"            border-left",[203,51572,51495],{"class":213},[203,51574,431],{"class":262},[203,51576,51550],{"class":209},[203,51578,51579],{"class":262}," solid",[203,51581,51582],{"class":262}," pink",[203,51584,1380],{"class":213},[203,51586,51587,51590,51592,51594,51596,51598,51600],{"class":205,"line":1782},[203,51588,51589],{"class":262},"            border-bottom",[203,51591,51495],{"class":213},[203,51593,431],{"class":262},[203,51595,51550],{"class":209},[203,51597,51579],{"class":262},[203,51599,51582],{"class":262},[203,51601,1380],{"class":213},[203,51603,51604,51606,51608,51610,51612,51615],{"class":205,"line":1787},[203,51605,51492],{"class":262},[203,51607,51495],{"class":213},[203,51609,870],{"class":262},[203,51611,51550],{"class":209},[203,51613,51614],{"class":262}," auto",[203,51616,1380],{"class":213},[203,51618,51619,51622,51624,51627],{"class":205,"line":1816},[203,51620,51621],{"class":262},"            justify-content",[203,51623,51495],{"class":213},[203,51625,51626],{"class":262},"space-around",[203,51628,1380],{"class":213},[203,51630,51631,51634,51636,51639],{"class":205,"line":1821},[203,51632,51633],{"class":262},"            align-items",[203,51635,51495],{"class":213},[203,51637,51638],{"class":262},"flex-end",[203,51640,1380],{"class":213},[203,51642,51643,51646,51648,51651],{"class":205,"line":1838},[203,51644,51645],{"class":262},"            text-align",[203,51647,51495],{"class":213},[203,51649,51650],{"class":262},"center",[203,51652,1380],{"class":213},[203,51654,51655],{"class":205,"line":1843},[203,51656,2618],{"class":213},[203,51658,51659],{"class":205,"line":1848},[203,51660,2489],{"emptyLinePlaceholder":131},[203,51662,51663,51665,51667,51670],{"class":205,"line":1853},[203,51664,51523],{"class":2052},[203,51666,1174],{"class":209},[203,51668,51669],{"class":51358},"div",[203,51671,15662],{"class":213},[203,51673,51674,51676,51678,51680],{"class":205,"line":1867},[203,51675,51530],{"class":262},[203,51677,51495],{"class":213},[203,51679,51535],{"class":262},[203,51681,1380],{"class":213},[203,51683,51684,51686,51688,51690,51692],{"class":205,"line":1872},[203,51685,51542],{"class":262},[203,51687,51495],{"class":213},[203,51689,870],{"class":262},[203,51691,51550],{"class":209},[203,51693,1380],{"class":213},[203,51695,51696,51699,51701,51704],{"class":205,"line":2666},[203,51697,51698],{"class":262},"            background-color",[203,51700,51495],{"class":213},[203,51702,51703],{"class":262},"pink",[203,51705,1380],{"class":213},[203,51707,51708,51711,51713,51716],{"class":205,"line":2680},[203,51709,51710],{"class":262},"            flex-direction",[203,51712,51495],{"class":213},[203,51714,51715],{"class":262},"column",[203,51717,1380],{"class":213},[203,51719,51720,51722,51724,51727],{"class":205,"line":2688},[203,51721,51621],{"class":262},[203,51723,51495],{"class":213},[203,51725,51726],{"class":262},"space-between",[203,51728,1380],{"class":213},[203,51730,51731],{"class":205,"line":2693},[203,51732,2618],{"class":213},[203,51734,51735],{"class":205,"line":2699},[203,51736,2489],{"emptyLinePlaceholder":131},[203,51738,51739,51741,51744,51747],{"class":205,"line":2705},[203,51740,51523],{"class":2052},[203,51742,51743],{"class":51358}," div",[203,51745,51746],{"class":51358}," span",[203,51748,15662],{"class":213},[203,51750,51751],{"class":205,"line":2710},[203,51752,2489],{"emptyLinePlaceholder":131},[203,51754,51755,51758,51760,51763,51765],{"class":205,"line":8038},[203,51756,51757],{"class":262},"            margin-top",[203,51759,51495],{"class":213},[203,51761,51762],{"class":262},"-20",[203,51764,51550],{"class":209},[203,51766,1380],{"class":213},[203,51768,51769],{"class":205,"line":8062},[203,51770,2618],{"class":213},[203,51772,51773],{"class":205,"line":8067},[203,51774,2489],{"emptyLinePlaceholder":131},[203,51776,51777,51779,51781,51784],{"class":205,"line":8073},[203,51778,51523],{"class":2052},[203,51780,51743],{"class":51358},[203,51782,51783],{"class":51358}," h4",[203,51785,15662],{"class":213},[203,51787,51788,51791,51793,51796,51798],{"class":205,"line":8100},[203,51789,51790],{"class":262},"            margin-bottom",[203,51792,51495],{"class":213},[203,51794,51795],{"class":262},"-35",[203,51797,51550],{"class":209},[203,51799,1380],{"class":213},[203,51801,51802,51804,51806,51808,51810],{"class":205,"line":8105},[203,51803,51542],{"class":262},[203,51805,51495],{"class":213},[203,51807,570],{"class":262},[203,51809,51550],{"class":209},[203,51811,1380],{"class":213},[203,51813,51814,51817,51819,51822,51824],{"class":205,"line":8111},[203,51815,51816],{"class":262},"            margin-left",[203,51818,51495],{"class":213},[203,51820,51821],{"class":262},"-10",[203,51823,51550],{"class":209},[203,51825,1380],{"class":213},[203,51827,51828],{"class":205,"line":8123},[203,51829,2618],{"class":213},[203,51831,51832,51835,51837],{"class":205,"line":8135},[203,51833,51834],{"class":213},"    \u003C\u002F",[203,51836,5216],{"class":51358},[203,51838,51365],{"class":213},[203,51840,51841,51844,51846],{"class":205,"line":8147},[203,51842,51843],{"class":213},"\u003C\u002F",[203,51845,51392],{"class":51358},[203,51847,51365],{"class":213},[203,51849,51850],{"class":205,"line":9806},[203,51851,2489],{"emptyLinePlaceholder":131},[203,51853,51854,51856,51859],{"class":205,"line":9831},[203,51855,1124],{"class":213},[203,51857,51858],{"class":51358},"body",[203,51860,51365],{"class":213},[203,51862,51863],{"class":205,"line":9854},[203,51864,2489],{"emptyLinePlaceholder":131},[203,51866,51867,51869,51872],{"class":205,"line":9878},[203,51868,51399],{"class":213},[203,51870,51871],{"class":51358},"script",[203,51873,51365],{"class":213},[203,51875,51876],{"class":205,"line":9883},[203,51877,51878],{"class":272},"        \u002F\u002F 1. 四次弹框效果\n",[203,51880,51881],{"class":205,"line":9888},[203,51882,51883],{"class":272},"        \u002F\u002F 声明一个新的数组\n",[203,51885,51886,51889,51892,51894],{"class":205,"line":9893},[203,51887,51888],{"class":209},"        let",[203,51890,51891],{"class":213}," arr ",[203,51893,259],{"class":209},[203,51895,51896],{"class":213}," []\n",[203,51898,51899,51901,51903,51906,51908,51910,51912,51914,51916,51919,51921,51923],{"class":205,"line":9902},[203,51900,3492],{"class":209},[203,51902,1747],{"class":213},[203,51904,51905],{"class":209},"let",[203,51907,9528],{"class":213},[203,51909,259],{"class":209},[203,51911,25176],{"class":262},[203,51913,9535],{"class":213},[203,51915,1677],{"class":209},[203,51917,51918],{"class":262}," 4",[203,51920,3303],{"class":213},[203,51922,2381],{"class":209},[203,51924,12532],{"class":213},[203,51926,51927],{"class":205,"line":9907},[203,51928,51929],{"class":272},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[203,51931,51932],{"class":205,"line":9913},[203,51933,51934],{"class":272},"            \u002F\u002F arr.push(num)\n",[203,51936,51937,51940,51943,51945,51948,51950,51953,51955,51958],{"class":205,"line":9934},[203,51938,51939],{"class":213},"            arr.",[203,51941,51942],{"class":2052},"push",[203,51944,214],{"class":213},[203,51946,51947],{"class":2052},"prompt",[203,51949,214],{"class":213},[203,51951,51952],{"class":318},"`请输入第${",[203,51954,655],{"class":213},[203,51956,51957],{"class":318},"}季度的数据:`",[203,51959,30555],{"class":213},[203,51961,51962],{"class":205,"line":9940},[203,51963,51964],{"class":272},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[203,51966,51967],{"class":205,"line":9954},[203,51968,2618],{"class":213},[203,51970,51971],{"class":205,"line":9960},[203,51972,51973],{"class":272},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[203,51975,51976],{"class":205,"line":9987},[203,51977,51978],{"class":272},"        \u002F\u002F 盒子开头\n",[203,51980,51981,51984,51987,51989,51992],{"class":205,"line":9996},[203,51982,51983],{"class":213},"        document.",[203,51985,51986],{"class":2052},"write",[203,51988,214],{"class":213},[203,51990,51991],{"class":318},"` \u003Cdiv class=\"box\">`",[203,51993,220],{"class":213},[203,51995,51996],{"class":205,"line":10002},[203,51997,2489],{"emptyLinePlaceholder":131},[203,51999,52000],{"class":205,"line":10010},[203,52001,52002],{"class":272},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[203,52004,52005,52007,52009,52011,52013,52015,52017,52019,52021,52024,52027,52029,52031],{"class":205,"line":10015},[203,52006,3492],{"class":209},[203,52008,1747],{"class":213},[203,52010,51905],{"class":209},[203,52012,9528],{"class":213},[203,52014,259],{"class":209},[203,52016,4182],{"class":262},[203,52018,9535],{"class":213},[203,52020,1124],{"class":209},[203,52022,52023],{"class":213}," arr.",[203,52025,52026],{"class":262},"length",[203,52028,3303],{"class":213},[203,52030,2381],{"class":209},[203,52032,12532],{"class":213},[203,52034,52035,52038,52040,52042],{"class":205,"line":16694},[203,52036,52037],{"class":213},"            document.",[203,52039,51986],{"class":2052},[203,52041,214],{"class":213},[203,52043,52044],{"class":318},"`\n",[203,52046,52047,52050,52052,52054,52056,52058],{"class":205,"line":16700},[203,52048,52049],{"class":318},"              \u003Cdiv style=\"height: ${",[203,52051,3969],{"class":213},[203,52053,1104],{"class":318},[203,52055,655],{"class":213},[203,52057,1154],{"class":318},[203,52059,52060],{"class":318},"}px;\">\n",[203,52062,52063,52066,52068,52070,52072,52074],{"class":205,"line":16723},[203,52064,52065],{"class":318},"                \u003Cspan>${",[203,52067,3969],{"class":213},[203,52069,1104],{"class":318},[203,52071,655],{"class":213},[203,52073,1154],{"class":318},[203,52075,52076],{"class":318},"}\u003C\u002Fspan>\n",[203,52078,52079,52082,52084,52086,52088],{"class":205,"line":16729},[203,52080,52081],{"class":318},"                \u003Ch4>第${",[203,52083,655],{"class":213},[203,52085,45624],{"class":209},[203,52087,25176],{"class":262},[203,52089,52090],{"class":318},"}季度\u003C\u002Fh4>\n",[203,52092,52093],{"class":205,"line":16752},[203,52094,52095],{"class":318},"              \u003C\u002Fdiv>          \n",[203,52097,52098,52101],{"class":205,"line":16766},[203,52099,52100],{"class":318},"            `",[203,52102,220],{"class":213},[203,52104,52105],{"class":205,"line":16786},[203,52106,2618],{"class":213},[203,52108,52109],{"class":205,"line":16792},[203,52110,52111],{"class":272},"        \u002F\u002F 盒子结尾\n",[203,52113,52114,52116,52118,52120,52123],{"class":205,"line":16803},[203,52115,51983],{"class":213},[203,52117,51986],{"class":2052},[203,52119,214],{"class":213},[203,52121,52122],{"class":318},"` \u003C\u002Fdiv>`",[203,52124,220],{"class":213},[203,52126,52127,52129,52131],{"class":205,"line":16826},[203,52128,51834],{"class":213},[203,52130,51871],{"class":51358},[203,52132,51365],{"class":213},[203,52134,52135,52137,52139],{"class":205,"line":16848},[203,52136,51843],{"class":213},[203,52138,51858],{"class":51358},[203,52140,51365],{"class":213},[203,52142,52143],{"class":205,"line":16853},[203,52144,2489],{"emptyLinePlaceholder":131},[203,52146,52147,52149,52151],{"class":205,"line":16859},[203,52148,51843],{"class":213},[203,52150,50693],{"class":51358},[203,52152,51365],{"class":213},[174,52154,52156],{"id":52155},"_284-冒泡排序","2.8.4 冒泡排序",[194,52158,52160],{"className":50691,"code":52159,"language":50693,"meta":27,"style":27},"\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",[200,52161,52162,52172,52186,52190,52198,52213,52233,52245,52253,52257,52265,52273,52305,52338,52375,52380,52399,52404,52417,52432,52448,52452,52457,52461,52471,52480,52488,52492],{"__ignoreMap":27},[203,52163,52164,52166,52168,52170],{"class":205,"line":206},[203,52165,51355],{"class":213},[203,52167,51359],{"class":51358},[203,52169,51362],{"class":2052},[203,52171,51365],{"class":213},[203,52173,52174,52176,52178,52180,52182,52184],{"class":205,"line":124},[203,52175,1124],{"class":213},[203,52177,50693],{"class":51358},[203,52179,51374],{"class":2052},[203,52181,259],{"class":213},[203,52183,51379],{"class":318},[203,52185,51365],{"class":213},[203,52187,52188],{"class":205,"line":1269},[203,52189,2489],{"emptyLinePlaceholder":131},[203,52191,52192,52194,52196],{"class":205,"line":1284},[203,52193,1124],{"class":213},[203,52195,51392],{"class":51358},[203,52197,51365],{"class":213},[203,52199,52200,52203,52205,52207,52209,52211],{"class":205,"line":1290},[203,52201,52202],{"class":213},"  \u003C",[203,52204,51402],{"class":51358},[203,52206,51405],{"class":2052},[203,52208,259],{"class":213},[203,52210,51410],{"class":318},[203,52212,51365],{"class":213},[203,52214,52215,52217,52219,52221,52223,52225,52227,52229,52231],{"class":205,"line":1304},[203,52216,52202],{"class":213},[203,52218,51402],{"class":51358},[203,52220,15010],{"class":2052},[203,52222,259],{"class":213},[203,52224,51449],{"class":318},[203,52226,51429],{"class":2052},[203,52228,259],{"class":213},[203,52230,51456],{"class":318},[203,52232,51365],{"class":213},[203,52234,52235,52237,52239,52241,52243],{"class":205,"line":1310},[203,52236,52202],{"class":213},[203,52238,51465],{"class":51358},[203,52240,51468],{"class":213},[203,52242,51465],{"class":51358},[203,52244,51365],{"class":213},[203,52246,52247,52249,52251],{"class":205,"line":1401},[203,52248,51843],{"class":213},[203,52250,51392],{"class":51358},[203,52252,51365],{"class":213},[203,52254,52255],{"class":205,"line":1407},[203,52256,2489],{"emptyLinePlaceholder":131},[203,52258,52259,52261,52263],{"class":205,"line":1419},[203,52260,1124],{"class":213},[203,52262,51858],{"class":51358},[203,52264,51365],{"class":213},[203,52266,52267,52269,52271],{"class":205,"line":1701},[203,52268,52202],{"class":213},[203,52270,51871],{"class":51358},[203,52272,51365],{"class":213},[203,52274,52275,52278,52280,52282,52285,52287,52289,52291,52293,52295,52297,52299,52301,52303],{"class":205,"line":1706},[203,52276,52277],{"class":209},"    let",[203,52279,51891],{"class":213},[203,52281,259],{"class":209},[203,52283,52284],{"class":213}," [",[203,52286,533],{"class":262},[203,52288,12525],{"class":213},[203,52290,507],{"class":262},[203,52292,12525],{"class":213},[203,52294,285],{"class":262},[203,52296,12525],{"class":213},[203,52298,291],{"class":262},[203,52300,12525],{"class":213},[203,52302,431],{"class":262},[203,52304,33304],{"class":213},[203,52306,52307,52309,52311,52313,52315,52317,52319,52321,52323,52325,52327,52330,52332,52334,52336],{"class":205,"line":1712},[203,52308,3290],{"class":209},[203,52310,1747],{"class":213},[203,52312,51905],{"class":209},[203,52314,9528],{"class":213},[203,52316,259],{"class":209},[203,52318,4182],{"class":262},[203,52320,9535],{"class":213},[203,52322,1124],{"class":209},[203,52324,52023],{"class":213},[203,52326,52026],{"class":262},[203,52328,52329],{"class":209}," -",[203,52331,25176],{"class":262},[203,52333,3303],{"class":213},[203,52335,2381],{"class":209},[203,52337,12532],{"class":213},[203,52339,52340,52343,52345,52347,52349,52351,52353,52355,52357,52359,52361,52363,52365,52367,52369,52371,52373],{"class":205,"line":1717},[203,52341,52342],{"class":209},"      for",[203,52344,1747],{"class":213},[203,52346,51905],{"class":209},[203,52348,9590],{"class":213},[203,52350,259],{"class":209},[203,52352,4182],{"class":262},[203,52354,9597],{"class":213},[203,52356,1124],{"class":209},[203,52358,52023],{"class":213},[203,52360,52026],{"class":262},[203,52362,52329],{"class":209},[203,52364,9528],{"class":213},[203,52366,746],{"class":209},[203,52368,25176],{"class":262},[203,52370,9604],{"class":213},[203,52372,2381],{"class":209},[203,52374,12532],{"class":213},[203,52376,52377],{"class":205,"line":1731},[203,52378,52379],{"class":272},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[203,52381,52382,52384,52387,52389,52392,52394,52396],{"class":205,"line":1736},[203,52383,2586],{"class":209},[203,52385,52386],{"class":213}," (arr[j] ",[203,52388,1174],{"class":209},[203,52390,52391],{"class":213}," arr[j ",[203,52393,695],{"class":209},[203,52395,25176],{"class":262},[203,52397,52398],{"class":213},"]) {\n",[203,52400,52401],{"class":205,"line":1742},[203,52402,52403],{"class":272},"          \u002F\u002F 交换两个变量\n",[203,52405,52406,52409,52412,52414],{"class":205,"line":1763},[203,52407,52408],{"class":209},"          let",[203,52410,52411],{"class":213}," tmp ",[203,52413,259],{"class":209},[203,52415,52416],{"class":213}," arr[j]\n",[203,52418,52419,52422,52424,52426,52428,52430],{"class":205,"line":1768},[203,52420,52421],{"class":213},"          arr[j] ",[203,52423,259],{"class":209},[203,52425,52391],{"class":213},[203,52427,695],{"class":209},[203,52429,25176],{"class":262},[203,52431,33304],{"class":213},[203,52433,52434,52437,52439,52441,52443,52445],{"class":205,"line":1782},[203,52435,52436],{"class":213},"          arr[j ",[203,52438,695],{"class":209},[203,52440,25176],{"class":262},[203,52442,4532],{"class":213},[203,52444,259],{"class":209},[203,52446,52447],{"class":213}," tmp\n",[203,52449,52450],{"class":205,"line":1787},[203,52451,2618],{"class":213},[203,52453,52454],{"class":205,"line":1816},[203,52455,52456],{"class":213},"      }\n",[203,52458,52459],{"class":205,"line":1821},[203,52460,2276],{"class":213},[203,52462,52463,52466,52468],{"class":205,"line":1838},[203,52464,52465],{"class":213},"    document.",[203,52467,51986],{"class":2052},[203,52469,52470],{"class":213},"(arr)\n",[203,52472,52473,52476,52478],{"class":205,"line":1843},[203,52474,52475],{"class":213},"  \u003C\u002F",[203,52477,51871],{"class":51358},[203,52479,51365],{"class":213},[203,52481,52482,52484,52486],{"class":205,"line":1848},[203,52483,51843],{"class":213},[203,52485,51858],{"class":51358},[203,52487,51365],{"class":213},[203,52489,52490],{"class":205,"line":1853},[203,52491,2489],{"emptyLinePlaceholder":131},[203,52493,52494,52496,52498],{"class":205,"line":1867},[203,52495,51843],{"class":213},[203,52497,50693],{"class":51358},[203,52499,51365],{"class":213},[19,52501,52502],{},[25,52503],{"alt":27,"src":52504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,52506,52507],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,52509,52510],{},"let arr = [4, 2, 5, 1, 3]",[19,52512,52513],{},"\u002F\u002F 1.升序排列写法",[19,52515,52516],{},"arr.sort(function (a, b) {",[19,52518,52519],{},"return a - b",[19,52521,52522],{},"})",[19,52524,52525],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,52527,52528],{},"\u002F\u002F 降序排列写法",[19,52530,52516],{},[19,52532,52533],{},"return b - a",[19,52535,52522],{},[19,52537,52538],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,52540,52542],{"id":52541},"_29-函数","2.9 函数",[19,52544,52545],{},[25,52546],{"alt":27,"src":52547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,52549,52550],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,52552,52553],{},"函数的声明用function",[19,52555,52556],{},"函数里边可以嵌套函数",[174,52558,52560],{"id":52559},"_291-函数传参","2.9.1 函数传参",[19,52562,52563],{},[25,52564],{"alt":27,"src":52565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,52567,52568],{},[25,52569],{"alt":27,"src":52570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1221,52572,52573,52576,52579,52582,52585,52588],{},[160,52574,52575],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[160,52577,52578],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[160,52580,52581],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[160,52583,52584],{},"开发中尽量保持形参和实参个数一致",[160,52586,52587],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[160,52589,52590],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,52592,52593],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[174,52595,52597],{"id":52596},"_292-函数的返回值","2.9.2 函数的返回值",[19,52599,52600],{},[25,52601],{"alt":27,"src":52602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,52604,52605],{},[25,52606],{"alt":27,"src":52607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1221,52609,52610,52613,52616,52619,52622],{},[160,52611,52612],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[160,52614,52615],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[160,52617,52618],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[160,52620,52621],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[160,52623,52624],{},"断点调试:进入函数内部看执行过程F11",[174,52626,52628],{"id":52627},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[194,52630,52632],{"className":50691,"code":52631,"language":50693,"meta":27,"style":27},"    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",[200,52633,52634,52639,52644,52648,52653],{"__ignoreMap":27},[203,52635,52636],{"class":205,"line":206},[203,52637,52638],{"class":213},"    function fn(a, b) {\n",[203,52640,52641],{"class":205,"line":124},[203,52642,52643],{"class":213},"      console.log(a + b);\n",[203,52645,52646],{"class":205,"line":1269},[203,52647,2276],{"class":213},[203,52649,52650],{"class":205,"line":1284},[203,52651,52652],{"class":213},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[203,52654,52655],{"class":205,"line":1290},[203,52656,52657],{"class":213},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[174,52659,52661],{"id":52660},"_294-作用域","2.9.4 作用域",[1221,52663,52664,52670,52675,52678,52681],{},[160,52665,52666,52667],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[363,52668,52669],{},"作用域",[160,52671,52672],{},[363,52673,52674],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[160,52676,52677],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[160,52679,52680],{},"函数内部可以直接所使用全局变量",[160,52682,52683],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,52685,14723],{},[194,52687,52689],{"className":50691,"code":52688,"language":50693,"meta":27,"style":27},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[200,52690,52691,52696,52701,52705,52710,52715,52720],{"__ignoreMap":27},[203,52692,52693],{"class":205,"line":206},[203,52694,52695],{"class":213},"    function fun() {\n",[203,52697,52698],{"class":205,"line":124},[203,52699,52700],{"class":213},"      num = 10\n",[203,52702,52703],{"class":205,"line":1269},[203,52704,2276],{"class":213},[203,52706,52707],{"class":205,"line":1284},[203,52708,52709],{"class":213},"    fun()\n",[203,52711,52712],{"class":205,"line":1290},[203,52713,52714],{"class":213},"    console.log(num)\n",[203,52716,52717],{"class":205,"line":1304},[203,52718,52719],{"class":213},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[203,52721,52722],{"class":205,"line":1310},[203,52723,52724],{"class":213},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1221,52726,52727,52730],{},[160,52728,52729],{},"函数内部的形参可以看做是局部变量",[160,52731,52732],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,52734,52735,52736],{},"变量访问原则： ",[363,52737,52738],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[174,52740,52742],{"id":52741},"_295-匿名函数","2.9.5 匿名函数",[19,52744,52745],{},"函数可以分为具名函数和匿名函数",[19,52747,52748],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[157,52750,52751],{},[160,52752,52753],{},"函数表达式",[19,52755,52756],{},[25,52757],{"alt":27,"src":52758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,52760,52761],{},"里边也可以写参数",[19,52763,52764],{},"具名函数调用位置可以随意调整；",[19,52766,52767],{},"匿名函数函数表达式形式只能在声明后才可以使用",[157,52769,52770],{"start":124},[160,52771,52772],{},"立即执行函数",[19,52774,52775],{},[25,52776],{"alt":27,"src":52777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,52779,52780],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,52782,52783],{},"写法：两个小括号，然后在第一个小括号中写function",[19,52785,52786],{},"(function () {})();",[19,52788,52789],{},"不要落下最后的;",[19,52791,52792],{},"立即执行函数必须要加;",[19,52794,52795],{},"分号写前写后都没问题",[19,52797,52798],{},"写前：",[19,52800,52801],{},"(function() {})()",[19,52803,52804],{},";(function () {})();",[19,52806,52807],{},"写后:",[19,52809,52810],{},"(function() {})();",[19,52812,52786],{},[19,52814,52815],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,52817,52818],{},"还有一种写法：",[19,52820,52821],{},"(function(){}());",[19,52823,52824],{},"或者:",[19,52826,52827],{},"!function(){}();",[19,52829,52830],{},"立即执行函数有时候也是可以加名字的：",[19,52832,52833],{},"(function flexible(window,document) {}(window,document));",[19,52835,52836],{},"省一些调用方法",[174,52838,52840],{"id":52839},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,52842,52843],{},[25,52844],{"alt":27,"src":52845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,52847,52848],{},"这样就不用非得给x,y初始化了",[19,52850,52851],{},[25,52852],{"alt":27,"src":52853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,52855,52856],{},"代码执行时先看左边",[19,52858,52859],{},"例如：console.log(false && 3+5)",[19,52861,52862],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,52864,52865],{},"&&都是真时，就返回最后一个真值",[19,52867,52868],{},"console.log(11 && 22)",[19,52870,52871],{},"输出22",[19,52873,52874],{},"逻辑与：遇真则真",[19,52876,14723],{},[19,52878,52879],{},"let age=1",[19,52881,52882],{},"console.log(11 || age++)",[19,52884,52885],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,52887,52888],{},"console.log(11 || 22)",[19,52890,52891],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,52893,52894],{},"||如果都是假的话，就取最后一个假的值了",[174,52896,52898],{"id":52897},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,52900,52901],{},"显示转换：",[19,52903,52904,52907,52908],{},[363,52905,52906],{},"记忆","： ",[363,52909,52910],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,52912,52913],{},"空字符串为假，其他字符串全为真",[19,52915,52916],{},[25,52917],{"alt":27,"src":52918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,52920,52921],{},"隐式转换：",[19,52923,52924],{},[25,52925],{"alt":27,"src":52926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,52928,52929],{},"隐式转换:",[19,52931,52932],{},"null+3=3",[19,52934,52935],{},"undefined+3=NaN",[19,52937,52938],{},"null==undefined 输出true,他两个都当0看",[19,52940,52941],{},"null===undefined 输出false",[19,52943,52944],{},"undefined做任何操作都是NaN",[19,52946,52947],{},"NaN不等于NaN，NaN表示计算错误",[14,52949,52951],{"id":52950},"_210-对象","2.10 对象",[174,52953,52955],{"id":52954},"_2101-对象的介绍","2.10.1 对象的介绍",[19,52957,52958],{},"对象也是一种数据类型，里边的数据是无序的",[19,52960,52961],{},"对象由属性和方法组成",[19,52963,52964],{},[25,52965],{"alt":27,"src":52966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,52968,52969],{},[25,52970],{"alt":27,"src":52971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,52973,52974],{},[25,52975],{"alt":27,"src":52976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[174,52978,52980],{"id":52979},"_2102-对象属性","2.10.2 对象属性",[19,52982,52983],{},[25,52984],{"alt":27,"src":52985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[157,52987,52988],{},[160,52989,52990],{},"查询对象",[19,52992,52993],{},"对象名.属性 goods.uname",[19,52995,52996],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,52998,52999],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53001,53002],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53004,53005],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[157,53007,53008],{"start":124},[160,53009,53010],{},"重新赋值",[19,53012,53013],{},"对象名.属性=新值",[157,53015,53016],{"start":1269},[160,53017,53018],{},"增加新数据",[19,53020,53013],{},[157,53022,53023],{"start":1284},[160,53024,53025],{},"删除对象中的属性",[19,53027,53028],{},"delete 对象名.属性",[174,53030,53032],{"id":53031},"_2103-对象方法","2.10.3 对象方法",[19,53034,53035],{},[25,53036],{"alt":27,"src":53037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53039,53040],{},"后边跟的是匿名函数",[19,53042,53043],{},"对象外面的叫函数；对象内部的叫方法",[19,53045,53046],{},[25,53047],{"alt":27,"src":53048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[174,53050,53052],{"id":53051},"_2104-遍历对象","2.10.4 遍历对象",[19,53054,53055],{},"理解为加括号的python字典遍历",[19,53057,53058],{},[25,53059],{"alt":27,"src":53060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53062,53063],{},"k是字符串类型",[19,53065,53066],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[194,53068,53070],{"className":50691,"code":53069,"language":50693,"meta":27,"style":27},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[200,53071,53072,53077,53082,53087,53092],{"__ignoreMap":27},[203,53073,53074],{"class":205,"line":206},[203,53075,53076],{"class":213},"   let arr = [1, 2, 3]\n",[203,53078,53079],{"class":205,"line":124},[203,53080,53081],{"class":213},"    for (let k in arr) {\n",[203,53083,53084],{"class":205,"line":1269},[203,53085,53086],{"class":213},"      console.log(k)\n",[203,53088,53089],{"class":205,"line":1284},[203,53090,53091],{"class":213},"      console.log(arr[k])\n",[203,53093,53094],{"class":205,"line":1290},[203,53095,2276],{"class":213},[19,53097,53098],{},[25,53099],{"alt":27,"src":53100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53102,53103],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53105,53106],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53108,53109],{},"for in 得到的k是属性名",[51871,53111,53112],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[19,53114,53115],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[174,53117,53119],{"id":53118},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53121,53122],{},"数组中放对象信息",[194,53124,53128],{"className":53125,"code":53126,"language":53127,"meta":27,"style":27},"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",[200,53129,53130,53138,53143,53148,53153,53158,53163,53168,53173,53178,53183,53188,53193,53197,53201],{"__ignoreMap":27},[203,53131,53132,53134,53136],{"class":205,"line":206},[203,53133,1124],{"class":213},[203,53135,51871],{"class":51358},[203,53137,51365],{"class":213},[203,53139,53140],{"class":205,"line":124},[203,53141,53142],{"class":213},"    let students = [\n",[203,53144,53145],{"class":205,"line":1269},[203,53146,53147],{"class":213},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[203,53149,53150],{"class":205,"line":1284},[203,53151,53152],{"class":213},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[203,53154,53155],{"class":205,"line":1290},[203,53156,53157],{"class":213},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[203,53159,53160],{"class":205,"line":1304},[203,53161,53162],{"class":213},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[203,53164,53165],{"class":205,"line":1310},[203,53166,53167],{"class":213},"    ]\n",[203,53169,53170],{"class":205,"line":1401},[203,53171,53172],{"class":213},"    for (let i = 0; i \u003C students.length; i++) {\n",[203,53174,53175],{"class":205,"line":1407},[203,53176,53177],{"class":213},"      for (let k in students[i]) {\n",[203,53179,53180],{"class":205,"line":1419},[203,53181,53182],{"class":213},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[203,53184,53185],{"class":205,"line":1701},[203,53186,53187],{"class":213},"        \u002F\u002F输出每个人的名字：\n",[203,53189,53190],{"class":205,"line":1706},[203,53191,53192],{"class":213},"        \u002F\u002Fconsole.log(students[i].name)\n",[203,53194,53195],{"class":205,"line":1712},[203,53196,52456],{"class":213},[203,53198,53199],{"class":205,"line":1717},[203,53200,2276],{"class":213},[203,53202,53203,53205,53207],{"class":205,"line":1731},[203,53204,52475],{"class":213},[203,53206,51871],{"class":51358},[203,53208,51365],{"class":213},[174,53210,53212],{"id":53211},"_2106-内置对象","2.10.6 内置对象",[19,53214,53215],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[157,53217,53218],{},[160,53219,53220],{},"数学对象Math",[19,53222,53223],{},[25,53224],{"alt":27,"src":53225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53227,53228],{},[452,53229,53232],{"href":53230,"rel":53231},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23956],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53234,53235],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53237,53238],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53240,53241],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53243,53244],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53246,53247],{},"null属于对象数据类型",[157,53249,53250],{"start":124},[160,53251,53252],{},"生成任意范围随机数",[19,53254,53255],{},[25,53256],{"alt":27,"src":53257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53259,53260],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53262,53263],{},"乘以几就取不到几",[19,53265,53266],{},"取数组中的随机元素：",[19,53268,53269],{},"let arr = ['red', 'green', 'blue']",[19,53271,53272],{},"let random = Math.floor(Math.random() * arr.length)",[19,53274,53275],{},"console.log(arr[random])",[19,53277,53278],{},"这个函数得到的是全闭区间",[19,53280,53281],{},"function getRandom(N, M) {",[19,53283,53284],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53286,1160],{},[19,53288,53289],{},"console.log(getRandom(4, 8))",[174,53291,53293],{"id":53292},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53295,53296],{},[25,53297],{"alt":27,"src":53298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53300,53301],{},[25,53302],{"alt":27,"src":53303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53305,53306],{},[25,53307],{"alt":27,"src":53308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53310,53311],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53313,53314],{},[25,53315],{"alt":27,"src":53316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53318,53319],{},[25,53320],{"alt":27,"src":53321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53323,53324],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53326,53327],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53329,53330],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5216,53332,53333],{},"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":27,"searchDepth":124,"depth":124,"links":53335},[53336,53344,53345,53346,53347,53348,53355,53359,53365,53374],{"id":50526,"depth":124,"text":50527,"children":53337},[53338,53339,53340,53341,53342,53343],{"id":50530,"depth":1269,"text":50531},{"id":50547,"depth":1269,"text":50548},{"id":50587,"depth":1269,"text":50588},{"id":50599,"depth":1269,"text":50600},{"id":50608,"depth":1269,"text":50609},{"id":50656,"depth":1269,"text":50657},{"id":50666,"depth":124,"text":50667},{"id":50754,"depth":124,"text":50755},{"id":50777,"depth":124,"text":50778},{"id":50789,"depth":124,"text":50790},{"id":50976,"depth":124,"text":50977,"children":53349},[53350,53351,53352,53353,53354],{"id":50980,"depth":1269,"text":50981},{"id":50989,"depth":1269,"text":50990},{"id":51017,"depth":1269,"text":51018},{"id":51053,"depth":1269,"text":51054},{"id":51078,"depth":1269,"text":51079},{"id":51090,"depth":124,"text":51091,"children":53356},[53357,53358],{"id":51111,"depth":1269,"text":51112},{"id":51205,"depth":1269,"text":51206},{"id":51263,"depth":124,"text":51264,"children":53360},[53361,53362,53363,53364],{"id":51267,"depth":1269,"text":51268},{"id":51291,"depth":1269,"text":51292},{"id":51344,"depth":1269,"text":51345},{"id":52155,"depth":1269,"text":52156},{"id":52541,"depth":124,"text":52542,"children":53366},[53367,53368,53369,53370,53371,53372,53373],{"id":52559,"depth":1269,"text":52560},{"id":52596,"depth":1269,"text":52597},{"id":52627,"depth":1269,"text":52628},{"id":52660,"depth":1269,"text":52661},{"id":52741,"depth":1269,"text":52742},{"id":52839,"depth":1269,"text":52840},{"id":52897,"depth":1269,"text":52898},{"id":52950,"depth":124,"text":52951,"children":53375},[53376,53377,53378,53379,53380,53381,53382],{"id":52954,"depth":1269,"text":52955},{"id":52979,"depth":1269,"text":52980},{"id":53031,"depth":1269,"text":53032},{"id":53051,"depth":1269,"text":53052},{"id":53118,"depth":1269,"text":53119},{"id":53211,"depth":1269,"text":53212},{"id":53292,"depth":1269,"text":53293},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50518,"description":23467},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53389,"title":53390,"body":53391,"description":23467,"extension":129,"meta":76731,"navigation":131,"path":76732,"seo":76733,"stem":76734,"__hash__":76735},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53392,"toc":76671},[53393,53396,53399,53402,53407,53410,53413,53416,53420,53424,53430,53435,53443,53450,53453,53457,53462,53467,53472,53475,53478,53489,53492,53496,53499,53502,53507,53512,53517,53520,53523,53615,53618,53623,53626,53631,53634,53637,53642,53645,53650,53654,53657,53671,53675,53680,53683,53686,53690,53695,53698,53702,53706,53711,53715,53720,53723,53726,53729,53732,53735,53738,53743,53748,53776,53779,53782,53785,53790,53793,53796,53799,53802,53806,53835,53839,53844,53849,53852,53855,53858,53863,53978,53983,53988,54149,54154,54157,54161,54166,54171,54174,54177,54180,54183,54186,54189,54192,54195,54198,54201,54204,54207,54210,54213,54215,54218,54221,54224,54229,54233,54630,54633,54639,54643,54648,55930,55935,55938,55941,55944,55949,57145,57149,57155,57160,57163,57168,57173,57177,57181,57186,57189,57194,57197,57200,57204,58112,58115,58119,58340,58343,58346,58349,58575,58578,58802,58805,58809,58814,58817,58820,59048,59051,59084,59087,59091,59096,59100,59103,59106,59109,59112,59115,59118,59121,59126,60406,60410,60413,61506,61510,61513,61516,61519,61522,61526,61529,61532,61534,61542,63023,63027,63030,63033,63036,63245,63248,63252,63256,63261,63266,63269,63272,63277,63281,63286,63289,63398,63402,63407,63412,63415,63418,63422,63427,63432,63437,63440,63443,63454,63457,63462,63467,63470,63473,63546,63550,63555,63558,63560,63571,63575,63580,64906,64909,64912,64915,64917,64920,64923,64926,64929,64932,64935,64938,64941,64944,64947,64950,64953,64955,64957,64960,64964,66058,66061,66064,66080,66094,66097,66102,66108,66113,66117,66121,66126,66130,66135,66577,66582,66585,66589,66594,66597,66600,66604,66609,66613,66618,66623,66627,66632,66637,66640,66645,66650,66654,66659,66664,66768,66771,66775,66780,67146,67149,67152,67155,67158,67161,67164,67167,67170,68466,68470,68475,68480,68483,68486,68489,68492,68494,68499,68504,68507,68511,68516,68521,68526,68529,68532,68535,68538,68541,68546,68549,68553,68558,68563,68567,68572,68575,68580,68583,68586,68589,68592,68595,68600,68603,68606,68609,68612,68616,68621,68624,68628,68633,68636,68639,68643,68672,68675,68679,68683,68688,68692,68697,68700,68703,68706,68709,68712,68715,68718,68721,68724,68727,68730,68733,68736,68739,68743,68748,68753,68756,68760,68764,68769,68772,68776,68779,68782,68787,68792,68797,68802,68807,68810,68813,68818,68823,68827,68832,68835,68840,68843,68846,68849,68852,68857,68860,68869,68873,68878,68881,68884,68888,68891,68896,68900,68903,68909,68915,68919,68945,68948,70509,70512,71008,71011,71016,71021,71026,71030,71035,71040,71045,71049,71054,71057,71060,71063,71066,71070,71073,71078,71081,71086,71090,71095,71098,71103,71108,71113,71116,71119,71124,71129,71132,71135,71139,71142,71147,71150,71155,71158,71163,71168,71173,71176,71181,71246,71249,71260,71264,71269,71441,71445,71450,71453,71456,71459,71463,71474,71478,71481,71486,71491,71494,71497,71500,71503,71506,71508,71511,71514,71517,71522,71525,71530,71533,71537,71540,71543,71557,71561,71564,71619,71624,71627,71630,71635,71638,71642,71647,71777,71781,71786,71791,71872,71877,71881,71884,71889,71894,71900,71903,71906,71909,71913,71918,71921,71932,71936,71953,75000,75004,75007,75010,75013,75034,75038,75041,75049,75052,75057,75060,75063,75068,75073,75077,75098,75102,75107,75110,75113,75116,75119,75123,75128,75131,75135,75140,75143,75148,75151,75156,75159,75164,76367,76371,76376,76379,76384,76668],[10,53394,53390],{"id":53395},"_3web-apis",[19,53397,53398],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53400,53401],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53403,53404],{},[25,53405],{"alt":27,"src":53406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53408,53409],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53411,53412],{},"建议数组和对象使用 const 来声明",[19,53414,53415],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53417,53419],{"id":53418},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[174,53421,53423],{"id":53422},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,53425,53426,53429],{},[200,53427,53428],{},"document"," = HTML 文件解析后的对象化表示；",[19,53431,53432,53434],{},[200,53433,53428],{}," ≠ HTML 文件本身",[19,53436,53437,53442],{},[363,53438,53439],{},[200,53440,53441],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,53444,53445,53449],{},[363,53446,53447],{},[200,53448,53428],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,53451,53452],{},"document实际上为window.document的简写",[174,53454,53456],{"id":53455},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,53458,53459],{},[25,53460],{"alt":27,"src":53461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,53463,53464],{},[25,53465],{"alt":27,"src":53466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,53468,53469],{},[25,53470],{"alt":27,"src":53471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,53473,53474],{},"console.dir()",[19,53476,53477],{},"dir用来打印对象",[1221,53479,53480,53483,53486],{},[160,53481,53482],{},"任何一个标签，都是一个对象",[160,53484,53485],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[160,53487,53488],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,53490,53491],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[174,53493,53495],{"id":53494},"_312-获取dom对象","3.1.2 获取DoM对象",[19,53497,53498],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,53500,53501],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,53503,53504],{},[363,53505,53506],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[157,53508,53509],{},[160,53510,53511],{},"利用CSS选择器来获取标签元素",[19,53513,53514],{},[25,53515],{"alt":27,"src":53516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,53518,53519],{},"里边的选择器必须必须加引号！！！",[19,53521,53522],{},"只选择第一个元素",[194,53524,53526],{"className":53125,"code":53525,"language":53127,"meta":27,"style":27},"\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",[200,53527,53528,53536,53557,53576,53584,53589,53594,53599,53607],{"__ignoreMap":27},[203,53529,53530,53532,53534],{"class":205,"line":206},[203,53531,1124],{"class":213},[203,53533,51858],{"class":51358},[203,53535,51365],{"class":213},[203,53537,53538,53540,53542,53545,53547,53550,53553,53555],{"class":205,"line":124},[203,53539,52202],{"class":213},[203,53541,51669],{"class":51358},[203,53543,53544],{"class":2052}," class",[203,53546,259],{"class":213},[203,53548,53549],{"class":318},"\"box\"",[203,53551,53552],{"class":213},">123\u003C\u002F",[203,53554,51669],{"class":51358},[203,53556,51365],{"class":213},[203,53558,53559,53561,53563,53565,53567,53569,53572,53574],{"class":205,"line":1269},[203,53560,52202],{"class":213},[203,53562,51669],{"class":51358},[203,53564,53544],{"class":2052},[203,53566,259],{"class":213},[203,53568,53549],{"class":318},[203,53570,53571],{"class":213},">456\u003C\u002F",[203,53573,51669],{"class":51358},[203,53575,51365],{"class":213},[203,53577,53578,53580,53582],{"class":205,"line":1284},[203,53579,52202],{"class":213},[203,53581,51871],{"class":51358},[203,53583,51365],{"class":213},[203,53585,53586],{"class":205,"line":1290},[203,53587,53588],{"class":213},"    \u002F\u002F 1.获取匹配的第一个元素\n",[203,53590,53591],{"class":205,"line":1304},[203,53592,53593],{"class":213},"    const box = document.querySelector('div')\n",[203,53595,53596],{"class":205,"line":1310},[203,53597,53598],{"class":213},"    console.dir(box)\n",[203,53600,53601,53603,53605],{"class":205,"line":1401},[203,53602,52475],{"class":213},[203,53604,51871],{"class":51358},[203,53606,51365],{"class":213},[203,53608,53609,53611,53613],{"class":205,"line":1407},[203,53610,51843],{"class":213},[203,53612,51858],{"class":51358},[203,53614,51365],{"class":213},[19,53616,53617],{},"只选123，不选456",[19,53619,53620],{},[25,53621],{"alt":27,"src":53622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,53624,53625],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,53627,53628],{},[25,53629],{"alt":27,"src":53630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,53632,53633],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,53635,53636],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[157,53638,53639],{"start":124},[160,53640,53641],{},"其他方法来获取标签元素",[19,53643,53644],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,53646,53647],{},[25,53648],{"alt":27,"src":53649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[174,53651,53653],{"id":53652},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,53655,53656],{},"设置修改DOM元素内容有两种方式：",[1221,53658,53659,53662,53665,53668],{},[160,53660,53661],{},"元素.innerText=''",[160,53663,53664],{},"元素.innerHTML=''",[160,53666,53667],{},"不写字符串输出数字也是可以的",[160,53669,53670],{},"元素.innerHtml=1",[22088,53672,53674],{"id":53673},"_3131-innertext","3.1.3.1 innerText",[19,53676,53677],{},[25,53678],{"alt":27,"src":53679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,53681,53682],{},"思路：实现了修改盒子中的内容！",[19,53684,53685],{},"它只显示纯文本，不解析标签",[22088,53687,53689],{"id":53688},"_3132-innerhtml","3.1.3.2 innerHTML",[19,53691,53692],{},[25,53693],{"alt":27,"src":53694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,53696,53697],{},"相比于innerText，他的强大之处在于可以解析标签",[174,53699,53701],{"id":53700},"_314-操作元素属性","3.1.4 操作元素属性",[22088,53703,53705],{"id":53704},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,53707,53708],{},[25,53709],{"alt":27,"src":53710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22088,53712,53714],{"id":53713},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,53716,53717],{},[25,53718],{"alt":27,"src":53719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,53721,53722],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,53724,53725],{},"div.style.backgroundColor = 'hotpink'",[19,53727,53728],{},"如果按照css的写法，-表示减，就会出错",[19,53730,53731],{},"body元素不需要再获取，直接用就行！！！！！！",[19,53733,53734],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,53736,53737],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,53739,53740],{},[25,53741],{"alt":27,"src":53742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,53744,53745],{},[25,53746],{"alt":27,"src":53747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[157,53749,53750,53753,53756,53759,53762,53765],{},[160,53751,53752],{},"className这个方式就是修改很多样式的时候来使用的！",[160,53754,53755],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[160,53757,53758],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[160,53760,53761],{},"className为属性名，如果还用class的话就导致与关键字冲突",[160,53763,53764],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[160,53766,53767,53768,53773],{},"解析标签的时候就变为了",[51669,53769],{"className":53770},[53771,53772],"nav","box",[53774,53775],"br",{},[19,53777,53778],{},"例子：",[51669,53780],{"className":53781},[53771],[51871,53783,53784],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,53786,53787],{},[25,53788],{"alt":27,"src":53789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,53791,53792],{},"追加和删除类名用classList",[19,53794,53795],{},"常用于类似于开关的操作",[19,53797,53798],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,53800,53801],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22088,53803,53805],{"id":53804},"_3143-牢记点","3.1.4.3 牢记点",[157,53807,53808,53811,53814,53817,53820,53823,53826,53829,53832],{},[160,53809,53810],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[160,53812,53813],{},"使用style属性操作css时不要忘记引号",[160,53815,53816],{},"使用className或者classList时也不要忘记引号",[160,53818,53819],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[160,53821,53822],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[160,53824,53825],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[160,53827,53828],{},"若： let arr=['1','2',3] arr[0]=1",[160,53830,53831],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[160,53833,53834],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[174,53836,53838],{"id":53837},"_315-操作表单元素","3.1.5 操作表单元素",[157,53840,53841],{},[160,53842,53843],{},"天生的属性",[19,53845,53846],{},[25,53847],{"alt":27,"src":53848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,53850,53851],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,53853,53854],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,53856,53857],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,53859,53860],{},[25,53861],{"alt":27,"src":53862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[194,53864,53866],{"className":50691,"code":53865,"language":50693,"meta":27,"style":27},"在复选框中如果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",[200,53867,53868,53873,53905,53910,53915,53920,53925,53929,53934,53939,53956,53968,53973],{"__ignoreMap":27},[203,53869,53870],{"class":205,"line":206},[203,53871,53872],{"class":213},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[203,53874,53875,53877,53880,53883,53885,53888,53890,53892,53894,53896,53898,53900,53903],{"class":205,"line":124},[203,53876,1124],{"class":213},[203,53878,53879],{"class":51358},"input",[203,53881,53882],{"class":2052}," type",[203,53884,259],{"class":213},[203,53886,53887],{"class":318},"\"checkbox\"",[203,53889,15010],{"class":2052},[203,53891,259],{"class":213},[203,53893,7742],{"class":318},[203,53895,15049],{"class":2052},[203,53897,259],{"class":213},[203,53899,7742],{"class":318},[203,53901,53902],{"class":2052}," checked",[203,53904,51365],{"class":213},[203,53906,53907],{"class":205,"line":1269},[203,53908,53909],{"class":213},"不选的话：\n",[203,53911,53912],{"class":205,"line":1284},[203,53913,53914],{"class":213},"const input = document.querySelector('input')\n",[203,53916,53917],{"class":205,"line":1290},[203,53918,53919],{"class":213},"input.checked=false\n",[203,53921,53922],{"class":205,"line":1304},[203,53923,53924],{"class":213},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[203,53926,53927],{"class":205,"line":1310},[203,53928,2489],{"emptyLinePlaceholder":131},[203,53930,53931],{"class":205,"line":1401},[203,53932,53933],{"class":213},"禁用按钮：\n",[203,53935,53936],{"class":205,"line":1407},[203,53937,53938],{"class":213},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[203,53940,53941,53943,53946,53949,53952,53954],{"class":205,"line":1419},[203,53942,1124],{"class":213},[203,53944,53945],{"class":51358},"button",[203,53947,53948],{"class":2052}," disabled",[203,53950,53951],{"class":213},">点击\u003C\u002F",[203,53953,53945],{"class":51358},[203,53955,51365],{"class":213},[203,53957,53958,53960,53962,53964,53966],{"class":205,"line":1701},[203,53959,1124],{"class":213},[203,53961,53945],{"class":51358},[203,53963,53951],{"class":213},[203,53965,53945],{"class":51358},[203,53967,51365],{"class":213},[203,53969,53970],{"class":205,"line":1706},[203,53971,53972],{"class":213},"const bt = document.querySelector('button')\n",[203,53974,53975],{"class":205,"line":1712},[203,53976,53977],{"class":213},"bt.disabled = false\n",[157,53979,53980],{"start":124},[160,53981,53982],{},"自定义属性",[19,53984,53985],{},[25,53986],{"alt":27,"src":53987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[194,53989,53991],{"className":53125,"code":53990,"language":53127,"meta":27,"style":27},"\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",[200,53992,53993,54001,54029,54048,54067,54086,54105,54113,54118,54123,54128,54133,54141],{"__ignoreMap":27},[203,53994,53995,53997,53999],{"class":205,"line":206},[203,53996,1124],{"class":213},[203,53998,51858],{"class":51358},[203,54000,51365],{"class":213},[203,54002,54003,54005,54007,54010,54012,54014,54017,54019,54022,54025,54027],{"class":205,"line":124},[203,54004,52202],{"class":213},[203,54006,51669],{"class":51358},[203,54008,54009],{"class":2052}," data-id",[203,54011,259],{"class":213},[203,54013,3767],{"class":318},[203,54015,54016],{"class":2052}," data-spm",[203,54018,259],{"class":213},[203,54020,54021],{"class":318},"\"我不知道\"",[203,54023,54024],{"class":213},">1\u003C\u002F",[203,54026,51669],{"class":51358},[203,54028,51365],{"class":213},[203,54030,54031,54033,54035,54037,54039,54041,54044,54046],{"class":205,"line":1269},[203,54032,52202],{"class":213},[203,54034,51669],{"class":51358},[203,54036,54009],{"class":2052},[203,54038,259],{"class":213},[203,54040,3790],{"class":318},[203,54042,54043],{"class":213},">2\u003C\u002F",[203,54045,51669],{"class":51358},[203,54047,51365],{"class":213},[203,54049,54050,54052,54054,54056,54058,54060,54063,54065],{"class":205,"line":1284},[203,54051,52202],{"class":213},[203,54053,51669],{"class":51358},[203,54055,54009],{"class":2052},[203,54057,259],{"class":213},[203,54059,3803],{"class":318},[203,54061,54062],{"class":213},">3\u003C\u002F",[203,54064,51669],{"class":51358},[203,54066,51365],{"class":213},[203,54068,54069,54071,54073,54075,54077,54079,54082,54084],{"class":205,"line":1290},[203,54070,52202],{"class":213},[203,54072,51669],{"class":51358},[203,54074,54009],{"class":2052},[203,54076,259],{"class":213},[203,54078,3816],{"class":318},[203,54080,54081],{"class":213},">4\u003C\u002F",[203,54083,51669],{"class":51358},[203,54085,51365],{"class":213},[203,54087,54088,54090,54092,54094,54096,54098,54101,54103],{"class":205,"line":1304},[203,54089,52202],{"class":213},[203,54091,51669],{"class":51358},[203,54093,54009],{"class":2052},[203,54095,259],{"class":213},[203,54097,3837],{"class":318},[203,54099,54100],{"class":213},">5\u003C\u002F",[203,54102,51669],{"class":51358},[203,54104,51365],{"class":213},[203,54106,54107,54109,54111],{"class":205,"line":1310},[203,54108,52202],{"class":213},[203,54110,51871],{"class":51358},[203,54112,51365],{"class":213},[203,54114,54115],{"class":205,"line":1401},[203,54116,54117],{"class":213},"    const one = document.querySelector('div')\n",[203,54119,54120],{"class":205,"line":1407},[203,54121,54122],{"class":213},"    console.log(one.dataset)\n",[203,54124,54125],{"class":205,"line":1419},[203,54126,54127],{"class":213},"    console.log(one.dataset.id)\n",[203,54129,54130],{"class":205,"line":1701},[203,54131,54132],{"class":213},"    console.log(one.dataset.spm)\n",[203,54134,54135,54137,54139],{"class":205,"line":1706},[203,54136,52475],{"class":213},[203,54138,51871],{"class":51358},[203,54140,51365],{"class":213},[203,54142,54143,54145,54147],{"class":205,"line":1712},[203,54144,51843],{"class":213},[203,54146,51858],{"class":51358},[203,54148,51365],{"class":213},[19,54150,54151],{},[25,54152],{"alt":27,"src":54153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54155,54156],{},"document.querySelector选择的是第一个对象（元素）",[174,54158,54160],{"id":54159},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54162,54163],{},[25,54164],{"alt":27,"src":54165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54167,54168],{},[25,54169],{"alt":27,"src":54170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54172,54173],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51871,54175,54176],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54178,54179],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51871,54181,54182],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[19,54184,54185],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54187,54188],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54190,54191],{},"单位为毫秒！！！",[19,54193,54194],{},"可以搭配匿名函数来用！！！",[19,54196,54197],{},"setInterval(function () {",[19,54199,54200],{},"alert('两秒执行一次')",[19,54202,54203],{},"}, 2000)",[19,54205,54206],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54208,54209],{},"function fn() {",[19,54211,54212],{},"document.write(1)",[19,54214,1160],{},[19,54216,54217],{},"setInterval(fn, 1000)",[19,54219,54220],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54222,54223],{},"setInterval('fn()', 1000)",[19,54225,54226],{},[25,54227],{"alt":27,"src":54228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22088,54230,54232],{"id":54231},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[194,54234,54236],{"className":50691,"code":54235,"language":50693,"meta":27,"style":27},"\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",[200,54237,54238,54248,54262,54266,54274,54288,54308,54320,54328,54332,54340,54377,54382,54387,54392,54400,54408,54430,54438,54443,54465,54470,54475,54486,54491,54511,54519,54534,54549,54560,54565,54575,54585,54589,54598,54602,54610,54618,54622],{"__ignoreMap":27},[203,54239,54240,54242,54244,54246],{"class":205,"line":206},[203,54241,51355],{"class":213},[203,54243,51359],{"class":51358},[203,54245,51362],{"class":2052},[203,54247,51365],{"class":213},[203,54249,54250,54252,54254,54256,54258,54260],{"class":205,"line":124},[203,54251,1124],{"class":213},[203,54253,50693],{"class":51358},[203,54255,51374],{"class":2052},[203,54257,259],{"class":213},[203,54259,51379],{"class":318},[203,54261,51365],{"class":213},[203,54263,54264],{"class":205,"line":1269},[203,54265,2489],{"emptyLinePlaceholder":131},[203,54267,54268,54270,54272],{"class":205,"line":1284},[203,54269,1124],{"class":213},[203,54271,51392],{"class":51358},[203,54273,51365],{"class":213},[203,54275,54276,54278,54280,54282,54284,54286],{"class":205,"line":1290},[203,54277,52202],{"class":213},[203,54279,51402],{"class":51358},[203,54281,51405],{"class":2052},[203,54283,259],{"class":213},[203,54285,51410],{"class":318},[203,54287,51365],{"class":213},[203,54289,54290,54292,54294,54296,54298,54300,54302,54304,54306],{"class":205,"line":1304},[203,54291,52202],{"class":213},[203,54293,51402],{"class":51358},[203,54295,15010],{"class":2052},[203,54297,259],{"class":213},[203,54299,51449],{"class":318},[203,54301,51429],{"class":2052},[203,54303,259],{"class":213},[203,54305,51456],{"class":318},[203,54307,51365],{"class":213},[203,54309,54310,54312,54314,54316,54318],{"class":205,"line":1310},[203,54311,52202],{"class":213},[203,54313,51465],{"class":51358},[203,54315,51468],{"class":213},[203,54317,51465],{"class":51358},[203,54319,51365],{"class":213},[203,54321,54322,54324,54326],{"class":205,"line":1401},[203,54323,51843],{"class":213},[203,54325,51392],{"class":51358},[203,54327,51365],{"class":213},[203,54329,54330],{"class":205,"line":1407},[203,54331,2489],{"emptyLinePlaceholder":131},[203,54333,54334,54336,54338],{"class":205,"line":1419},[203,54335,1124],{"class":213},[203,54337,51858],{"class":51358},[203,54339,51365],{"class":213},[203,54341,54342,54344,54347,54349,54351,54353,54355,54357,54359,54362,54364,54367,54370,54372,54375],{"class":205,"line":1701},[203,54343,52202],{"class":213},[203,54345,54346],{"class":51358},"textarea",[203,54348,15010],{"class":2052},[203,54350,259],{"class":213},[203,54352,7742],{"class":318},[203,54354,15049],{"class":2052},[203,54356,259],{"class":213},[203,54358,7742],{"class":318},[203,54360,54361],{"class":2052}," cols",[203,54363,259],{"class":213},[203,54365,54366],{"class":318},"\"30\"",[203,54368,54369],{"class":2052}," rows",[203,54371,259],{"class":213},[203,54373,54374],{"class":318},"\"10\"",[203,54376,51365],{"class":213},[203,54378,54379],{"class":205,"line":1706},[203,54380,54381],{"class":213},"        用户注册协议\n",[203,54383,54384],{"class":205,"line":1712},[203,54385,54386],{"class":213},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[203,54388,54389],{"class":205,"line":1717},[203,54390,54391],{"class":213},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[203,54393,54394,54396,54398],{"class":205,"line":1731},[203,54395,51834],{"class":213},[203,54397,54346],{"class":51358},[203,54399,51365],{"class":213},[203,54401,54402,54404,54406],{"class":205,"line":1736},[203,54403,52202],{"class":213},[203,54405,53774],{"class":51358},[203,54407,51365],{"class":213},[203,54409,54410,54412,54414,54416,54418,54421,54423,54426,54428],{"class":205,"line":1742},[203,54411,52202],{"class":213},[203,54413,53945],{"class":51358},[203,54415,53544],{"class":2052},[203,54417,259],{"class":213},[203,54419,54420],{"class":318},"\"btn\"",[203,54422,53948],{"class":2052},[203,54424,54425],{"class":213},">我已经阅读用户协议(5)\u003C\u002F",[203,54427,53945],{"class":51358},[203,54429,51365],{"class":213},[203,54431,54432,54434,54436],{"class":205,"line":1763},[203,54433,52202],{"class":213},[203,54435,51871],{"class":51358},[203,54437,51365],{"class":213},[203,54439,54440],{"class":205,"line":1768},[203,54441,54442],{"class":272},"    \u002F\u002F 1. 获取元素\n",[203,54444,54445,54447,54450,54452,54455,54458,54460,54463],{"class":205,"line":1782},[203,54446,11311],{"class":209},[203,54448,54449],{"class":262}," btn",[203,54451,13654],{"class":209},[203,54453,54454],{"class":213}," document.",[203,54456,54457],{"class":2052},"querySelector",[203,54459,214],{"class":213},[203,54461,54462],{"class":318},"'.btn'",[203,54464,220],{"class":213},[203,54466,54467],{"class":205,"line":1787},[203,54468,54469],{"class":272},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[203,54471,54472],{"class":205,"line":1816},[203,54473,54474],{"class":272},"    \u002F\u002F 2. 倒计时\n",[203,54476,54477,54479,54481,54483],{"class":205,"line":1821},[203,54478,52277],{"class":209},[203,54480,9528],{"class":213},[203,54482,259],{"class":209},[203,54484,54485],{"class":262}," 5\n",[203,54487,54488],{"class":205,"line":1838},[203,54489,54490],{"class":272},"    \u002F\u002F 2.1 开启定时器\n",[203,54492,54493,54495,54498,54500,54503,54505,54508],{"class":205,"line":1843},[203,54494,52277],{"class":209},[203,54496,54497],{"class":213}," n ",[203,54499,259],{"class":209},[203,54501,54502],{"class":2052}," setInterval",[203,54504,214],{"class":213},[203,54506,54507],{"class":209},"function",[203,54509,54510],{"class":213}," () {\n",[203,54512,54513,54516],{"class":205,"line":1848},[203,54514,54515],{"class":213},"      i",[203,54517,54518],{"class":209},"--\n",[203,54520,54521,54524,54526,54529,54531],{"class":205,"line":1853},[203,54522,54523],{"class":213},"      btn.innerHTML ",[203,54525,259],{"class":209},[203,54527,54528],{"class":318}," `我已经阅读用户协议(${",[203,54530,655],{"class":213},[203,54532,54533],{"class":318},"})`\n",[203,54535,54536,54539,54542,54545,54547],{"class":205,"line":1867},[203,54537,54538],{"class":209},"      if",[203,54540,54541],{"class":213}," (i ",[203,54543,54544],{"class":209},"===",[203,54546,4182],{"class":262},[203,54548,12532],{"class":213},[203,54550,54551,54554,54557],{"class":205,"line":1872},[203,54552,54553],{"class":2052},"        clearInterval",[203,54555,54556],{"class":213},"(n)  ",[203,54558,54559],{"class":272},"\u002F\u002F 关闭定时器\n",[203,54561,54562],{"class":205,"line":2666},[203,54563,54564],{"class":272},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[203,54566,54567,54570,54572],{"class":205,"line":2680},[203,54568,54569],{"class":213},"        btn.disabled ",[203,54571,259],{"class":209},[203,54573,54574],{"class":262}," false\n",[203,54576,54577,54580,54582],{"class":205,"line":2688},[203,54578,54579],{"class":213},"        btn.innerHTML ",[203,54581,259],{"class":209},[203,54583,54584],{"class":318}," '同意'\n",[203,54586,54587],{"class":205,"line":2693},[203,54588,52456],{"class":213},[203,54590,54591,54594,54596],{"class":205,"line":2699},[203,54592,54593],{"class":213},"    }, ",[203,54595,6500],{"class":262},[203,54597,220],{"class":213},[203,54599,54600],{"class":205,"line":2705},[203,54601,2489],{"emptyLinePlaceholder":131},[203,54603,54604,54606,54608],{"class":205,"line":2710},[203,54605,52475],{"class":213},[203,54607,51871],{"class":51358},[203,54609,51365],{"class":213},[203,54611,54612,54614,54616],{"class":205,"line":8038},[203,54613,51843],{"class":213},[203,54615,51858],{"class":51358},[203,54617,51365],{"class":213},[203,54619,54620],{"class":205,"line":8062},[203,54621,2489],{"emptyLinePlaceholder":131},[203,54623,54624,54626,54628],{"class":205,"line":8067},[203,54625,51843],{"class":213},[203,54627,50693],{"class":51358},[203,54629,51365],{"class":213},[19,54631,54632],{},"不要一直想着用死循环,避免死循环",[19,54634,54635,54638],{},[200,54636,54637],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22088,54640,54642],{"id":54641},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[157,54644,54645],{},[160,54646,54647],{},"法1",[194,54649,54651],{"className":50691,"code":54650,"language":50693,"meta":27,"style":27},"\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",[200,54652,54653,54663,54677,54681,54689,54703,54723,54735,54743,54749,54760,54771,54775,54779,54786,54798,54802,54806,54813,54825,54839,54852,54866,54870,54874,54881,54892,54903,54914,54926,54938,54950,54954,54958,54966,54976,54989,55001,55014,55018,55022,55029,55039,55051,55063,55074,55085,55095,55107,55119,55123,55127,55136,55148,55160,55188,55201,55205,55209,55216,55227,55231,55239,55247,55251,55259,55273,55288,55312,55320,55335,55348,55356,55377,55389,55401,55413,55425,55437,55449,55461,55470,55478,55486,55494,55506,55529,55548,55567,55586,55605,55624,55643,55663,55667,55687,55706,55726,55747,55758,55775,55785,55795,55805,55810,55815,55820,55825,55850,55863,55867,55890,55894,55902,55910,55918,55922],{"__ignoreMap":27},[203,54654,54655,54657,54659,54661],{"class":205,"line":206},[203,54656,51355],{"class":213},[203,54658,51359],{"class":51358},[203,54660,51362],{"class":2052},[203,54662,51365],{"class":213},[203,54664,54665,54667,54669,54671,54673,54675],{"class":205,"line":124},[203,54666,1124],{"class":213},[203,54668,50693],{"class":51358},[203,54670,51374],{"class":2052},[203,54672,259],{"class":213},[203,54674,51379],{"class":318},[203,54676,51365],{"class":213},[203,54678,54679],{"class":205,"line":1269},[203,54680,2489],{"emptyLinePlaceholder":131},[203,54682,54683,54685,54687],{"class":205,"line":1284},[203,54684,1124],{"class":213},[203,54686,51392],{"class":51358},[203,54688,51365],{"class":213},[203,54690,54691,54693,54695,54697,54699,54701],{"class":205,"line":1290},[203,54692,52202],{"class":213},[203,54694,51402],{"class":51358},[203,54696,51405],{"class":2052},[203,54698,259],{"class":213},[203,54700,51410],{"class":318},[203,54702,51365],{"class":213},[203,54704,54705,54707,54709,54711,54713,54715,54717,54719,54721],{"class":205,"line":1304},[203,54706,52202],{"class":213},[203,54708,51402],{"class":51358},[203,54710,15010],{"class":2052},[203,54712,259],{"class":213},[203,54714,51449],{"class":318},[203,54716,51429],{"class":2052},[203,54718,259],{"class":213},[203,54720,51456],{"class":318},[203,54722,51365],{"class":213},[203,54724,54725,54727,54729,54731,54733],{"class":205,"line":1310},[203,54726,52202],{"class":213},[203,54728,51465],{"class":51358},[203,54730,51468],{"class":213},[203,54732,51465],{"class":51358},[203,54734,51365],{"class":213},[203,54736,54737,54739,54741],{"class":205,"line":1401},[203,54738,52202],{"class":213},[203,54740,5216],{"class":51358},[203,54742,51365],{"class":213},[203,54744,54745,54747],{"class":205,"line":1407},[203,54746,6493],{"class":51358},[203,54748,15662],{"class":213},[203,54750,54751,54754,54756,54758],{"class":205,"line":1419},[203,54752,54753],{"class":262},"      padding",[203,54755,51495],{"class":213},[203,54757,405],{"class":262},[203,54759,1380],{"class":213},[203,54761,54762,54765,54767,54769],{"class":205,"line":1701},[203,54763,54764],{"class":262},"      margin",[203,54766,51495],{"class":213},[203,54768,405],{"class":262},[203,54770,1380],{"class":213},[203,54772,54773],{"class":205,"line":1706},[203,54774,2276],{"class":213},[203,54776,54777],{"class":205,"line":1712},[203,54778,2489],{"emptyLinePlaceholder":131},[203,54780,54781,54784],{"class":205,"line":1717},[203,54782,54783],{"class":51358},"    li",[203,54785,15662],{"class":213},[203,54787,54788,54791,54793,54796],{"class":205,"line":1731},[203,54789,54790],{"class":262},"      list-style",[203,54792,51495],{"class":213},[203,54794,54795],{"class":262},"none",[203,54797,1380],{"class":213},[203,54799,54800],{"class":205,"line":1736},[203,54801,2276],{"class":213},[203,54803,54804],{"class":205,"line":1742},[203,54805,2489],{"emptyLinePlaceholder":131},[203,54807,54808,54811],{"class":205,"line":1763},[203,54809,54810],{"class":2052},"    .box",[203,54812,15662],{"class":213},[203,54814,54815,54818,54820,54823],{"class":205,"line":1768},[203,54816,54817],{"class":262},"      position",[203,54819,51495],{"class":213},[203,54821,54822],{"class":262},"relative",[203,54824,1380],{"class":213},[203,54826,54827,54830,54832,54835,54837],{"class":205,"line":1782},[203,54828,54829],{"class":262},"      width",[203,54831,51495],{"class":213},[203,54833,54834],{"class":262},"976",[203,54836,51550],{"class":209},[203,54838,1380],{"class":213},[203,54840,54841,54844,54846,54848,54850],{"class":205,"line":1787},[203,54842,54843],{"class":262},"      height",[203,54845,51495],{"class":213},[203,54847,1628],{"class":262},[203,54849,51550],{"class":209},[203,54851,1380],{"class":213},[203,54853,54854,54856,54858,54860,54862,54864],{"class":205,"line":1816},[203,54855,54764],{"class":262},[203,54857,51495],{"class":213},[203,54859,525],{"class":262},[203,54861,51550],{"class":209},[203,54863,51614],{"class":262},[203,54865,1380],{"class":213},[203,54867,54868],{"class":205,"line":1821},[203,54869,2276],{"class":213},[203,54871,54872],{"class":205,"line":1838},[203,54873,2489],{"emptyLinePlaceholder":131},[203,54875,54876,54879],{"class":205,"line":1843},[203,54877,54878],{"class":2052},"    .slider-footer",[203,54880,15662],{"class":213},[203,54882,54883,54885,54887,54890],{"class":205,"line":1848},[203,54884,54817],{"class":262},[203,54886,51495],{"class":213},[203,54888,54889],{"class":262},"absolute",[203,54891,1380],{"class":213},[203,54893,54894,54897,54899,54901],{"class":205,"line":1853},[203,54895,54896],{"class":262},"      left",[203,54898,51495],{"class":213},[203,54900,405],{"class":262},[203,54902,1380],{"class":213},[203,54904,54905,54908,54910,54912],{"class":205,"line":1867},[203,54906,54907],{"class":262},"      bottom",[203,54909,51495],{"class":213},[203,54911,405],{"class":262},[203,54913,1380],{"class":213},[203,54915,54916,54918,54920,54922,54924],{"class":205,"line":1872},[203,54917,54829],{"class":262},[203,54919,51495],{"class":213},[203,54921,525],{"class":262},[203,54923,542],{"class":209},[203,54925,1380],{"class":213},[203,54927,54928,54930,54932,54934,54936],{"class":205,"line":2666},[203,54929,54843],{"class":262},[203,54931,51495],{"class":213},[203,54933,789],{"class":262},[203,54935,542],{"class":209},[203,54937,1380],{"class":213},[203,54939,54940,54943,54945,54948],{"class":205,"line":2680},[203,54941,54942],{"class":262},"      background-color",[203,54944,51495],{"class":213},[203,54946,54947],{"class":262},"skyblue",[203,54949,1380],{"class":213},[203,54951,54952],{"class":205,"line":2688},[203,54953,2276],{"class":213},[203,54955,54956],{"class":205,"line":2693},[203,54957,2489],{"emptyLinePlaceholder":131},[203,54959,54960,54962,54964],{"class":205,"line":2699},[203,54961,54878],{"class":2052},[203,54963,6915],{"class":51358},[203,54965,15662],{"class":213},[203,54967,54968,54970,54972,54974],{"class":205,"line":2705},[203,54969,54817],{"class":262},[203,54971,51495],{"class":213},[203,54973,54889],{"class":262},[203,54975,1380],{"class":213},[203,54977,54978,54981,54983,54985,54987],{"class":205,"line":2710},[203,54979,54980],{"class":262},"      font-size",[203,54982,51495],{"class":213},[203,54984,1115],{"class":262},[203,54986,51550],{"class":209},[203,54988,1380],{"class":213},[203,54990,54991,54993,54995,54997,54999],{"class":205,"line":8038},[203,54992,54896],{"class":262},[203,54994,51495],{"class":213},[203,54996,914],{"class":262},[203,54998,51550],{"class":209},[203,55000,1380],{"class":213},[203,55002,55003,55006,55008,55010,55012],{"class":205,"line":8062},[203,55004,55005],{"class":262},"      top",[203,55007,51495],{"class":213},[203,55009,533],{"class":262},[203,55011,51550],{"class":209},[203,55013,1380],{"class":213},[203,55015,55016],{"class":205,"line":8067},[203,55017,2276],{"class":213},[203,55019,55020],{"class":205,"line":8073},[203,55021,2489],{"emptyLinePlaceholder":131},[203,55023,55024,55027],{"class":205,"line":8100},[203,55025,55026],{"class":51358},"    ul",[203,55028,15662],{"class":213},[203,55030,55031,55033,55035,55037],{"class":205,"line":8105},[203,55032,54817],{"class":262},[203,55034,51495],{"class":213},[203,55036,54889],{"class":262},[203,55038,1380],{"class":213},[203,55040,55041,55043,55045,55047,55049],{"class":205,"line":8111},[203,55042,55005],{"class":262},[203,55044,51495],{"class":213},[203,55046,995],{"class":262},[203,55048,51550],{"class":209},[203,55050,1380],{"class":213},[203,55052,55053,55055,55057,55059,55061],{"class":205,"line":8123},[203,55054,54896],{"class":262},[203,55056,51495],{"class":213},[203,55058,914],{"class":262},[203,55060,51550],{"class":209},[203,55062,1380],{"class":213},[203,55064,55065,55068,55070,55072],{"class":205,"line":8135},[203,55066,55067],{"class":262},"      display",[203,55069,51495],{"class":213},[203,55071,51535],{"class":262},[203,55073,1380],{"class":213},[203,55075,55076,55079,55081,55083],{"class":205,"line":8147},[203,55077,55078],{"class":262},"      justify-content",[203,55080,51495],{"class":213},[203,55082,51726],{"class":262},[203,55084,1380],{"class":213},[203,55086,55087,55089,55091,55093],{"class":205,"line":9806},[203,55088,54817],{"class":262},[203,55090,51495],{"class":213},[203,55092,54889],{"class":262},[203,55094,1380],{"class":213},[203,55096,55097,55099,55101,55103,55105],{"class":205,"line":9831},[203,55098,54829],{"class":262},[203,55100,51495],{"class":213},[203,55102,4081],{"class":262},[203,55104,51550],{"class":209},[203,55106,1380],{"class":213},[203,55108,55109,55111,55113,55115,55117],{"class":205,"line":9854},[203,55110,54843],{"class":262},[203,55112,51495],{"class":213},[203,55114,914],{"class":262},[203,55116,51550],{"class":209},[203,55118,1380],{"class":213},[203,55120,55121],{"class":205,"line":9878},[203,55122,2276],{"class":213},[203,55124,55125],{"class":205,"line":9883},[203,55126,2489],{"emptyLinePlaceholder":131},[203,55128,55129,55131,55134],{"class":205,"line":9888},[203,55130,55026],{"class":51358},[203,55132,55133],{"class":51358}," li",[203,55135,15662],{"class":213},[203,55137,55138,55140,55142,55144,55146],{"class":205,"line":9893},[203,55139,54829],{"class":262},[203,55141,51495],{"class":213},[203,55143,914],{"class":262},[203,55145,51550],{"class":209},[203,55147,1380],{"class":213},[203,55149,55150,55152,55154,55156,55158],{"class":205,"line":9902},[203,55151,54843],{"class":262},[203,55153,51495],{"class":213},[203,55155,914],{"class":262},[203,55157,51550],{"class":209},[203,55159,1380],{"class":213},[203,55161,55162,55164,55166,55169,55171,55173,55175,55177,55179,55181,55183,55186],{"class":205,"line":9907},[203,55163,54942],{"class":262},[203,55165,51495],{"class":213},[203,55167,55168],{"class":262},"rgba",[203,55170,214],{"class":213},[203,55172,405],{"class":262},[203,55174,12525],{"class":213},[203,55176,405],{"class":262},[203,55178,12525],{"class":213},[203,55180,405],{"class":262},[203,55182,12525],{"class":213},[203,55184,55185],{"class":262},".4",[203,55187,2808],{"class":213},[203,55189,55190,55193,55195,55197,55199],{"class":205,"line":9913},[203,55191,55192],{"class":262},"      border-radius",[203,55194,51495],{"class":213},[203,55196,660],{"class":262},[203,55198,51550],{"class":209},[203,55200,1380],{"class":213},[203,55202,55203],{"class":205,"line":9934},[203,55204,2276],{"class":213},[203,55206,55207],{"class":205,"line":9940},[203,55208,2489],{"emptyLinePlaceholder":131},[203,55210,55211,55214],{"class":205,"line":9954},[203,55212,55213],{"class":2052},"    .activate",[203,55215,15662],{"class":213},[203,55217,55218,55220,55222,55225],{"class":205,"line":9960},[203,55219,54942],{"class":262},[203,55221,51495],{"class":213},[203,55223,55224],{"class":262},"#f7f7f7",[203,55226,1380],{"class":213},[203,55228,55229],{"class":205,"line":9987},[203,55230,2276],{"class":213},[203,55232,55233,55235,55237],{"class":205,"line":9996},[203,55234,52475],{"class":213},[203,55236,5216],{"class":51358},[203,55238,51365],{"class":213},[203,55240,55241,55243,55245],{"class":205,"line":10002},[203,55242,51843],{"class":213},[203,55244,51392],{"class":51358},[203,55246,51365],{"class":213},[203,55248,55249],{"class":205,"line":10010},[203,55250,2489],{"emptyLinePlaceholder":131},[203,55252,55253,55255,55257],{"class":205,"line":10015},[203,55254,1124],{"class":213},[203,55256,51858],{"class":51358},[203,55258,51365],{"class":213},[203,55260,55261,55263,55265,55267,55269,55271],{"class":205,"line":16694},[203,55262,52202],{"class":213},[203,55264,51669],{"class":51358},[203,55266,53544],{"class":2052},[203,55268,259],{"class":213},[203,55270,53549],{"class":318},[203,55272,51365],{"class":213},[203,55274,55275,55277,55279,55281,55283,55286],{"class":205,"line":16700},[203,55276,51399],{"class":213},[203,55278,51669],{"class":51358},[203,55280,53544],{"class":2052},[203,55282,259],{"class":213},[203,55284,55285],{"class":318},"\"slider-wrapper\"",[203,55287,51365],{"class":213},[203,55289,55290,55293,55295,55298,55300,55303,55306,55308,55310],{"class":205,"line":16723},[203,55291,55292],{"class":213},"      \u003C",[203,55294,25],{"class":51358},[203,55296,55297],{"class":2052}," src",[203,55299,259],{"class":213},[203,55301,55302],{"class":318},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[203,55304,55305],{"class":2052}," alt",[203,55307,259],{"class":213},[203,55309,7742],{"class":318},[203,55311,51365],{"class":213},[203,55313,55314,55316,55318],{"class":205,"line":16729},[203,55315,51834],{"class":213},[203,55317,51669],{"class":51358},[203,55319,51365],{"class":213},[203,55321,55322,55324,55326,55328,55330,55333],{"class":205,"line":16752},[203,55323,51399],{"class":213},[203,55325,51669],{"class":51358},[203,55327,53544],{"class":2052},[203,55329,259],{"class":213},[203,55331,55332],{"class":318},"\"slider-footer\"",[203,55334,51365],{"class":213},[203,55336,55337,55339,55341,55344,55346],{"class":205,"line":16766},[203,55338,55292],{"class":213},[203,55340,19],{"class":51358},[203,55342,55343],{"class":213},">对人类来说会不会太超前了?\u003C\u002F",[203,55345,19],{"class":51358},[203,55347,51365],{"class":213},[203,55349,55350,55352,55354],{"class":205,"line":16786},[203,55351,55292],{"class":213},[203,55353,1221],{"class":51358},[203,55355,51365],{"class":213},[203,55357,55358,55361,55363,55365,55367,55370,55373,55375],{"class":205,"line":16792},[203,55359,55360],{"class":213},"        \u003C",[203,55362,160],{"class":51358},[203,55364,53544],{"class":2052},[203,55366,259],{"class":213},[203,55368,55369],{"class":318},"\"activate\"",[203,55371,55372],{"class":213},">\u003C\u002F",[203,55374,160],{"class":51358},[203,55376,51365],{"class":213},[203,55378,55379,55381,55383,55385,55387],{"class":205,"line":16803},[203,55380,55360],{"class":213},[203,55382,160],{"class":51358},[203,55384,55372],{"class":213},[203,55386,160],{"class":51358},[203,55388,51365],{"class":213},[203,55390,55391,55393,55395,55397,55399],{"class":205,"line":16826},[203,55392,55360],{"class":213},[203,55394,160],{"class":51358},[203,55396,55372],{"class":213},[203,55398,160],{"class":51358},[203,55400,51365],{"class":213},[203,55402,55403,55405,55407,55409,55411],{"class":205,"line":16848},[203,55404,55360],{"class":213},[203,55406,160],{"class":51358},[203,55408,55372],{"class":213},[203,55410,160],{"class":51358},[203,55412,51365],{"class":213},[203,55414,55415,55417,55419,55421,55423],{"class":205,"line":16853},[203,55416,55360],{"class":213},[203,55418,160],{"class":51358},[203,55420,55372],{"class":213},[203,55422,160],{"class":51358},[203,55424,51365],{"class":213},[203,55426,55427,55429,55431,55433,55435],{"class":205,"line":16859},[203,55428,55360],{"class":213},[203,55430,160],{"class":51358},[203,55432,55372],{"class":213},[203,55434,160],{"class":51358},[203,55436,51365],{"class":213},[203,55438,55439,55441,55443,55445,55447],{"class":205,"line":16873},[203,55440,55360],{"class":213},[203,55442,160],{"class":51358},[203,55444,55372],{"class":213},[203,55446,160],{"class":51358},[203,55448,51365],{"class":213},[203,55450,55451,55453,55455,55457,55459],{"class":205,"line":16886},[203,55452,55360],{"class":213},[203,55454,160],{"class":51358},[203,55456,55372],{"class":213},[203,55458,160],{"class":51358},[203,55460,51365],{"class":213},[203,55462,55463,55466,55468],{"class":205,"line":16891},[203,55464,55465],{"class":213},"      \u003C\u002F",[203,55467,1221],{"class":51358},[203,55469,51365],{"class":213},[203,55471,55472,55474,55476],{"class":205,"line":16905},[203,55473,51834],{"class":213},[203,55475,51669],{"class":51358},[203,55477,51365],{"class":213},[203,55479,55480,55482,55484],{"class":205,"line":16910},[203,55481,52475],{"class":213},[203,55483,51669],{"class":51358},[203,55485,51365],{"class":213},[203,55487,55488,55490,55492],{"class":205,"line":16916},[203,55489,52202],{"class":213},[203,55491,51871],{"class":51358},[203,55493,51365],{"class":213},[203,55495,55496,55498,55501,55503],{"class":205,"line":16921},[203,55497,11311],{"class":209},[203,55499,55500],{"class":262}," arrImage",[203,55502,13654],{"class":209},[203,55504,55505],{"class":213}," [\n",[203,55507,55508,55511,55514,55517,55520,55523,55526],{"class":205,"line":16935},[203,55509,55510],{"class":213},"      { url: ",[203,55512,55513],{"class":318},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[203,55515,55516],{"class":213},", title: ",[203,55518,55519],{"class":318},"'对人类来说会不会太超前了?'",[203,55521,55522],{"class":213},", color: ",[203,55524,55525],{"class":318},"'rgba(100,67,68)'",[203,55527,55528],{"class":213}," },\n",[203,55530,55531,55533,55536,55538,55541,55543,55546],{"class":205,"line":16940},[203,55532,55510],{"class":213},[203,55534,55535],{"class":318},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[203,55537,55516],{"class":213},[203,55539,55540],{"class":318},"'开启剑与雪的黑暗传说!'",[203,55542,55522],{"class":213},[203,55544,55545],{"class":318},"'rgba(43,35,26)'",[203,55547,55528],{"class":213},[203,55549,55550,55552,55555,55557,55560,55562,55565],{"class":205,"line":16945},[203,55551,55510],{"class":213},[203,55553,55554],{"class":318},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[203,55556,55516],{"class":213},[203,55558,55559],{"class":318},"'真正的jo厨出现了!'",[203,55561,55522],{"class":213},[203,55563,55564],{"class":318},"'rgba(36,31,33)'",[203,55566,55528],{"class":213},[203,55568,55569,55571,55574,55576,55579,55581,55584],{"class":205,"line":16959},[203,55570,55510],{"class":213},[203,55572,55573],{"class":318},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[203,55575,55516],{"class":213},[203,55577,55578],{"class":318},"'李玉刚:让世界通过b站看到东方大国文化'",[203,55580,55522],{"class":213},[203,55582,55583],{"class":318},"'rgba(139,98,66)'",[203,55585,55528],{"class":213},[203,55587,55588,55590,55593,55595,55598,55600,55603],{"class":205,"line":16971},[203,55589,55510],{"class":213},[203,55591,55592],{"class":318},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[203,55594,55516],{"class":213},[203,55596,55597],{"class":318},"'快来分享你的寒假日常吧'",[203,55599,55522],{"class":213},[203,55601,55602],{"class":318},"'rgba(67,90,92)'",[203,55604,55528],{"class":213},[203,55606,55607,55609,55612,55614,55617,55619,55622],{"class":205,"line":16976},[203,55608,55510],{"class":213},[203,55610,55611],{"class":318},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[203,55613,55516],{"class":213},[203,55615,55616],{"class":318},"'哔哩哔哩小年YEAR'",[203,55618,55522],{"class":213},[203,55620,55621],{"class":318},"'rgba(166,131,143)'",[203,55623,55528],{"class":213},[203,55625,55626,55628,55631,55633,55636,55638,55641],{"class":205,"line":16989},[203,55627,55510],{"class":213},[203,55629,55630],{"class":318},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[203,55632,55516],{"class":213},[203,55634,55635],{"class":318},"'一站式解决你的电脑配置问题'",[203,55637,55522],{"class":213},[203,55639,55640],{"class":318},"'rgba(53,29,25)'",[203,55642,55528],{"class":213},[203,55644,55645,55647,55650,55652,55655,55657,55660],{"class":205,"line":16994},[203,55646,55510],{"class":213},[203,55648,55649],{"class":318},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[203,55651,55516],{"class":213},[203,55653,55654],{"class":318},"'谁不想和小猫咪贴贴呢?'",[203,55656,55522],{"class":213},[203,55658,55659],{"class":318},"'rgba(99,72,114)'",[203,55661,55662],{"class":213}," }\n",[203,55664,55665],{"class":205,"line":16999},[203,55666,53167],{"class":213},[203,55668,55669,55671,55674,55676,55678,55680,55682,55685],{"class":205,"line":17004},[203,55670,11311],{"class":209},[203,55672,55673],{"class":262}," img",[203,55675,13654],{"class":209},[203,55677,54454],{"class":213},[203,55679,54457],{"class":2052},[203,55681,214],{"class":213},[203,55683,55684],{"class":318},"'.slider-wrapper img'",[203,55686,220],{"class":213},[203,55688,55689,55691,55693,55695,55697,55699,55701,55704],{"class":205,"line":17017},[203,55690,11311],{"class":209},[203,55692,6915],{"class":262},[203,55694,13654],{"class":209},[203,55696,54454],{"class":213},[203,55698,54457],{"class":2052},[203,55700,214],{"class":213},[203,55702,55703],{"class":318},"'.slider-footer p'",[203,55705,220],{"class":213},[203,55707,55708,55710,55713,55715,55717,55719,55721,55724],{"class":205,"line":17022},[203,55709,11311],{"class":209},[203,55711,55712],{"class":262}," color",[203,55714,13654],{"class":209},[203,55716,54454],{"class":213},[203,55718,54457],{"class":2052},[203,55720,214],{"class":213},[203,55722,55723],{"class":318},"'.slider-footer'",[203,55725,220],{"class":213},[203,55727,55728,55730,55733,55735,55737,55740,55742,55745],{"class":205,"line":32691},[203,55729,11311],{"class":209},[203,55731,55732],{"class":262}," lis",[203,55734,13654],{"class":209},[203,55736,54454],{"class":213},[203,55738,55739],{"class":2052},"querySelectorAll",[203,55741,214],{"class":213},[203,55743,55744],{"class":318},"'.slider-footer ul li'",[203,55746,220],{"class":213},[203,55748,55749,55751,55753,55755],{"class":205,"line":32697},[203,55750,52277],{"class":209},[203,55752,9528],{"class":213},[203,55754,259],{"class":209},[203,55756,55757],{"class":262}," 1\n",[203,55759,55760,55762,55765,55767,55769,55771,55773],{"class":205,"line":32703},[203,55761,52277],{"class":209},[203,55763,55764],{"class":213}," timer ",[203,55766,259],{"class":209},[203,55768,54502],{"class":2052},[203,55770,214],{"class":213},[203,55772,54507],{"class":209},[203,55774,54510],{"class":213},[203,55776,55777,55780,55782],{"class":205,"line":32709},[203,55778,55779],{"class":213},"      img.src ",[203,55781,259],{"class":209},[203,55783,55784],{"class":213}," arrImage[i].url\n",[203,55786,55787,55790,55792],{"class":205,"line":32715},[203,55788,55789],{"class":213},"      p.innerHTML ",[203,55791,259],{"class":209},[203,55793,55794],{"class":213}," arrImage[i].title\n",[203,55796,55797,55800,55802],{"class":205,"line":32726},[203,55798,55799],{"class":213},"      color.style.backgroundColor ",[203,55801,259],{"class":209},[203,55803,55804],{"class":213}," arrImage[i].color\n",[203,55806,55807],{"class":205,"line":32732},[203,55808,55809],{"class":272},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[203,55811,55812],{"class":205,"line":32752},[203,55813,55814],{"class":272},"      \u002F\u002F li.classList.add('activate')\n",[203,55816,55817],{"class":205,"line":32758},[203,55818,55819],{"class":272},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[203,55821,55822],{"class":205,"line":32769},[203,55823,55824],{"class":272},"      \u002F\u002F lis[i].classList.remove('activate')\n",[203,55826,55827,55830,55832,55834,55837,55840,55843,55845,55848],{"class":205,"line":32775},[203,55828,55829],{"class":213},"      document.",[203,55831,54457],{"class":2052},[203,55833,214],{"class":213},[203,55835,55836],{"class":318},"'.activate'",[203,55838,55839],{"class":213},")?.classList.",[203,55841,55842],{"class":2052},"toggle",[203,55844,214],{"class":213},[203,55846,55847],{"class":318},"'activate'",[203,55849,220],{"class":213},[203,55851,55852,55855,55857,55859,55861],{"class":205,"line":32781},[203,55853,55854],{"class":213},"      lis[i].classList.",[203,55856,5424],{"class":2052},[203,55858,214],{"class":213},[203,55860,55847],{"class":318},[203,55862,220],{"class":213},[203,55864,55865],{"class":205,"line":32787},[203,55866,2489],{"emptyLinePlaceholder":131},[203,55868,55869,55872,55874,55876,55878,55880,55882,55884,55887],{"class":205,"line":32793},[203,55870,55871],{"class":213},"      i ",[203,55873,259],{"class":209},[203,55875,54541],{"class":213},[203,55877,695],{"class":209},[203,55879,25176],{"class":262},[203,55881,13804],{"class":213},[203,55883,542],{"class":209},[203,55885,55886],{"class":213}," arrImage.",[203,55888,55889],{"class":262},"length\n",[203,55891,55892],{"class":205,"line":32799},[203,55893,2489],{"emptyLinePlaceholder":131},[203,55895,55896,55898,55900],{"class":205,"line":32805},[203,55897,54593],{"class":213},[203,55899,6500],{"class":262},[203,55901,220],{"class":213},[203,55903,55904,55906,55908],{"class":205,"line":32811},[203,55905,52475],{"class":213},[203,55907,51871],{"class":51358},[203,55909,51365],{"class":213},[203,55911,55912,55914,55916],{"class":205,"line":32831},[203,55913,51843],{"class":213},[203,55915,51858],{"class":51358},[203,55917,51365],{"class":213},[203,55919,55920],{"class":205,"line":32837},[203,55921,2489],{"emptyLinePlaceholder":131},[203,55923,55924,55926,55928],{"class":205,"line":32853},[203,55925,51843],{"class":213},[203,55927,50693],{"class":51358},[203,55929,51365],{"class":213},[19,55931,55932],{},[25,55933],{"alt":27,"src":55934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,55936,55937],{},"?.就是短路保护,确保输出正常进行",[19,55939,55940],{},"不要忘记取余%,有时候可以用",[19,55942,55943],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[157,55945,55946],{"start":124},[160,55947,55948],{},"法2",[194,55950,55952],{"className":50691,"code":55951,"language":50693,"meta":27,"style":27},"\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",[200,55953,55954,55964,55978,55982,55990,56004,56024,56036,56044,56050,56060,56070,56074,56078,56084,56094,56098,56102,56108,56118,56130,56142,56156,56160,56164,56170,56180,56190,56200,56212,56224,56234,56238,56242,56250,56260,56272,56284,56296,56300,56304,56310,56320,56332,56344,56354,56364,56374,56386,56398,56402,56406,56414,56426,56438,56464,56476,56480,56484,56490,56500,56504,56512,56520,56524,56532,56546,56560,56580,56588,56602,56614,56622,56640,56652,56664,56676,56688,56700,56712,56724,56732,56740,56748,56756,56767,56783,56799,56815,56831,56847,56863,56879,56895,56899,56904,56922,56940,56950,56955,56960,56971,56977,56992,57001,57005,57010,57019,57024,57033,57038,57043,57048,57071,57101,57105,57113,57117,57125,57133,57137],{"__ignoreMap":27},[203,55955,55956,55958,55960,55962],{"class":205,"line":206},[203,55957,51355],{"class":213},[203,55959,51359],{"class":51358},[203,55961,51362],{"class":2052},[203,55963,51365],{"class":213},[203,55965,55966,55968,55970,55972,55974,55976],{"class":205,"line":124},[203,55967,1124],{"class":213},[203,55969,50693],{"class":51358},[203,55971,51374],{"class":2052},[203,55973,259],{"class":213},[203,55975,51379],{"class":318},[203,55977,51365],{"class":213},[203,55979,55980],{"class":205,"line":1269},[203,55981,2489],{"emptyLinePlaceholder":131},[203,55983,55984,55986,55988],{"class":205,"line":1284},[203,55985,1124],{"class":213},[203,55987,51392],{"class":51358},[203,55989,51365],{"class":213},[203,55991,55992,55994,55996,55998,56000,56002],{"class":205,"line":1290},[203,55993,52202],{"class":213},[203,55995,51402],{"class":51358},[203,55997,51405],{"class":2052},[203,55999,259],{"class":213},[203,56001,51410],{"class":318},[203,56003,51365],{"class":213},[203,56005,56006,56008,56010,56012,56014,56016,56018,56020,56022],{"class":205,"line":1304},[203,56007,52202],{"class":213},[203,56009,51402],{"class":51358},[203,56011,15010],{"class":2052},[203,56013,259],{"class":213},[203,56015,51449],{"class":318},[203,56017,51429],{"class":2052},[203,56019,259],{"class":213},[203,56021,51456],{"class":318},[203,56023,51365],{"class":213},[203,56025,56026,56028,56030,56032,56034],{"class":205,"line":1310},[203,56027,52202],{"class":213},[203,56029,51465],{"class":51358},[203,56031,51468],{"class":213},[203,56033,51465],{"class":51358},[203,56035,51365],{"class":213},[203,56037,56038,56040,56042],{"class":205,"line":1401},[203,56039,52202],{"class":213},[203,56041,5216],{"class":51358},[203,56043,51365],{"class":213},[203,56045,56046,56048],{"class":205,"line":1407},[203,56047,6493],{"class":51358},[203,56049,15662],{"class":213},[203,56051,56052,56054,56056,56058],{"class":205,"line":1419},[203,56053,54753],{"class":262},[203,56055,51495],{"class":213},[203,56057,405],{"class":262},[203,56059,1380],{"class":213},[203,56061,56062,56064,56066,56068],{"class":205,"line":1701},[203,56063,54764],{"class":262},[203,56065,51495],{"class":213},[203,56067,405],{"class":262},[203,56069,1380],{"class":213},[203,56071,56072],{"class":205,"line":1706},[203,56073,2276],{"class":213},[203,56075,56076],{"class":205,"line":1712},[203,56077,2489],{"emptyLinePlaceholder":131},[203,56079,56080,56082],{"class":205,"line":1717},[203,56081,54783],{"class":51358},[203,56083,15662],{"class":213},[203,56085,56086,56088,56090,56092],{"class":205,"line":1731},[203,56087,54790],{"class":262},[203,56089,51495],{"class":213},[203,56091,54795],{"class":262},[203,56093,1380],{"class":213},[203,56095,56096],{"class":205,"line":1736},[203,56097,2276],{"class":213},[203,56099,56100],{"class":205,"line":1742},[203,56101,2489],{"emptyLinePlaceholder":131},[203,56103,56104,56106],{"class":205,"line":1763},[203,56105,54810],{"class":2052},[203,56107,15662],{"class":213},[203,56109,56110,56112,56114,56116],{"class":205,"line":1768},[203,56111,54817],{"class":262},[203,56113,51495],{"class":213},[203,56115,54822],{"class":262},[203,56117,1380],{"class":213},[203,56119,56120,56122,56124,56126,56128],{"class":205,"line":1782},[203,56121,54829],{"class":262},[203,56123,51495],{"class":213},[203,56125,54834],{"class":262},[203,56127,51550],{"class":209},[203,56129,1380],{"class":213},[203,56131,56132,56134,56136,56138,56140],{"class":205,"line":1787},[203,56133,54843],{"class":262},[203,56135,51495],{"class":213},[203,56137,1628],{"class":262},[203,56139,51550],{"class":209},[203,56141,1380],{"class":213},[203,56143,56144,56146,56148,56150,56152,56154],{"class":205,"line":1816},[203,56145,54764],{"class":262},[203,56147,51495],{"class":213},[203,56149,525],{"class":262},[203,56151,51550],{"class":209},[203,56153,51614],{"class":262},[203,56155,1380],{"class":213},[203,56157,56158],{"class":205,"line":1821},[203,56159,2276],{"class":213},[203,56161,56162],{"class":205,"line":1838},[203,56163,2489],{"emptyLinePlaceholder":131},[203,56165,56166,56168],{"class":205,"line":1843},[203,56167,54878],{"class":2052},[203,56169,15662],{"class":213},[203,56171,56172,56174,56176,56178],{"class":205,"line":1848},[203,56173,54817],{"class":262},[203,56175,51495],{"class":213},[203,56177,54889],{"class":262},[203,56179,1380],{"class":213},[203,56181,56182,56184,56186,56188],{"class":205,"line":1853},[203,56183,54896],{"class":262},[203,56185,51495],{"class":213},[203,56187,405],{"class":262},[203,56189,1380],{"class":213},[203,56191,56192,56194,56196,56198],{"class":205,"line":1867},[203,56193,54907],{"class":262},[203,56195,51495],{"class":213},[203,56197,405],{"class":262},[203,56199,1380],{"class":213},[203,56201,56202,56204,56206,56208,56210],{"class":205,"line":1872},[203,56203,54829],{"class":262},[203,56205,51495],{"class":213},[203,56207,525],{"class":262},[203,56209,542],{"class":209},[203,56211,1380],{"class":213},[203,56213,56214,56216,56218,56220,56222],{"class":205,"line":2666},[203,56215,54843],{"class":262},[203,56217,51495],{"class":213},[203,56219,789],{"class":262},[203,56221,542],{"class":209},[203,56223,1380],{"class":213},[203,56225,56226,56228,56230,56232],{"class":205,"line":2680},[203,56227,54942],{"class":262},[203,56229,51495],{"class":213},[203,56231,54947],{"class":262},[203,56233,1380],{"class":213},[203,56235,56236],{"class":205,"line":2688},[203,56237,2276],{"class":213},[203,56239,56240],{"class":205,"line":2693},[203,56241,2489],{"emptyLinePlaceholder":131},[203,56243,56244,56246,56248],{"class":205,"line":2699},[203,56245,54878],{"class":2052},[203,56247,6915],{"class":51358},[203,56249,15662],{"class":213},[203,56251,56252,56254,56256,56258],{"class":205,"line":2705},[203,56253,54817],{"class":262},[203,56255,51495],{"class":213},[203,56257,54889],{"class":262},[203,56259,1380],{"class":213},[203,56261,56262,56264,56266,56268,56270],{"class":205,"line":2710},[203,56263,54980],{"class":262},[203,56265,51495],{"class":213},[203,56267,1115],{"class":262},[203,56269,51550],{"class":209},[203,56271,1380],{"class":213},[203,56273,56274,56276,56278,56280,56282],{"class":205,"line":8038},[203,56275,54896],{"class":262},[203,56277,51495],{"class":213},[203,56279,914],{"class":262},[203,56281,51550],{"class":209},[203,56283,1380],{"class":213},[203,56285,56286,56288,56290,56292,56294],{"class":205,"line":8062},[203,56287,55005],{"class":262},[203,56289,51495],{"class":213},[203,56291,533],{"class":262},[203,56293,51550],{"class":209},[203,56295,1380],{"class":213},[203,56297,56298],{"class":205,"line":8067},[203,56299,2276],{"class":213},[203,56301,56302],{"class":205,"line":8073},[203,56303,2489],{"emptyLinePlaceholder":131},[203,56305,56306,56308],{"class":205,"line":8100},[203,56307,55026],{"class":51358},[203,56309,15662],{"class":213},[203,56311,56312,56314,56316,56318],{"class":205,"line":8105},[203,56313,54817],{"class":262},[203,56315,51495],{"class":213},[203,56317,54889],{"class":262},[203,56319,1380],{"class":213},[203,56321,56322,56324,56326,56328,56330],{"class":205,"line":8111},[203,56323,55005],{"class":262},[203,56325,51495],{"class":213},[203,56327,995],{"class":262},[203,56329,51550],{"class":209},[203,56331,1380],{"class":213},[203,56333,56334,56336,56338,56340,56342],{"class":205,"line":8123},[203,56335,54896],{"class":262},[203,56337,51495],{"class":213},[203,56339,914],{"class":262},[203,56341,51550],{"class":209},[203,56343,1380],{"class":213},[203,56345,56346,56348,56350,56352],{"class":205,"line":8135},[203,56347,55067],{"class":262},[203,56349,51495],{"class":213},[203,56351,51535],{"class":262},[203,56353,1380],{"class":213},[203,56355,56356,56358,56360,56362],{"class":205,"line":8147},[203,56357,55078],{"class":262},[203,56359,51495],{"class":213},[203,56361,51726],{"class":262},[203,56363,1380],{"class":213},[203,56365,56366,56368,56370,56372],{"class":205,"line":9806},[203,56367,54817],{"class":262},[203,56369,51495],{"class":213},[203,56371,54889],{"class":262},[203,56373,1380],{"class":213},[203,56375,56376,56378,56380,56382,56384],{"class":205,"line":9831},[203,56377,54829],{"class":262},[203,56379,51495],{"class":213},[203,56381,4081],{"class":262},[203,56383,51550],{"class":209},[203,56385,1380],{"class":213},[203,56387,56388,56390,56392,56394,56396],{"class":205,"line":9854},[203,56389,54843],{"class":262},[203,56391,51495],{"class":213},[203,56393,914],{"class":262},[203,56395,51550],{"class":209},[203,56397,1380],{"class":213},[203,56399,56400],{"class":205,"line":9878},[203,56401,2276],{"class":213},[203,56403,56404],{"class":205,"line":9883},[203,56405,2489],{"emptyLinePlaceholder":131},[203,56407,56408,56410,56412],{"class":205,"line":9888},[203,56409,55026],{"class":51358},[203,56411,55133],{"class":51358},[203,56413,15662],{"class":213},[203,56415,56416,56418,56420,56422,56424],{"class":205,"line":9893},[203,56417,54829],{"class":262},[203,56419,51495],{"class":213},[203,56421,914],{"class":262},[203,56423,51550],{"class":209},[203,56425,1380],{"class":213},[203,56427,56428,56430,56432,56434,56436],{"class":205,"line":9902},[203,56429,54843],{"class":262},[203,56431,51495],{"class":213},[203,56433,914],{"class":262},[203,56435,51550],{"class":209},[203,56437,1380],{"class":213},[203,56439,56440,56442,56444,56446,56448,56450,56452,56454,56456,56458,56460,56462],{"class":205,"line":9907},[203,56441,54942],{"class":262},[203,56443,51495],{"class":213},[203,56445,55168],{"class":262},[203,56447,214],{"class":213},[203,56449,405],{"class":262},[203,56451,12525],{"class":213},[203,56453,405],{"class":262},[203,56455,12525],{"class":213},[203,56457,405],{"class":262},[203,56459,12525],{"class":213},[203,56461,55185],{"class":262},[203,56463,2808],{"class":213},[203,56465,56466,56468,56470,56472,56474],{"class":205,"line":9913},[203,56467,55192],{"class":262},[203,56469,51495],{"class":213},[203,56471,660],{"class":262},[203,56473,51550],{"class":209},[203,56475,1380],{"class":213},[203,56477,56478],{"class":205,"line":9934},[203,56479,2276],{"class":213},[203,56481,56482],{"class":205,"line":9940},[203,56483,2489],{"emptyLinePlaceholder":131},[203,56485,56486,56488],{"class":205,"line":9954},[203,56487,55213],{"class":2052},[203,56489,15662],{"class":213},[203,56491,56492,56494,56496,56498],{"class":205,"line":9960},[203,56493,54942],{"class":262},[203,56495,51495],{"class":213},[203,56497,55224],{"class":262},[203,56499,1380],{"class":213},[203,56501,56502],{"class":205,"line":9987},[203,56503,2276],{"class":213},[203,56505,56506,56508,56510],{"class":205,"line":9996},[203,56507,52475],{"class":213},[203,56509,5216],{"class":51358},[203,56511,51365],{"class":213},[203,56513,56514,56516,56518],{"class":205,"line":10002},[203,56515,51843],{"class":213},[203,56517,51392],{"class":51358},[203,56519,51365],{"class":213},[203,56521,56522],{"class":205,"line":10010},[203,56523,2489],{"emptyLinePlaceholder":131},[203,56525,56526,56528,56530],{"class":205,"line":10015},[203,56527,1124],{"class":213},[203,56529,51858],{"class":51358},[203,56531,51365],{"class":213},[203,56533,56534,56536,56538,56540,56542,56544],{"class":205,"line":16694},[203,56535,52202],{"class":213},[203,56537,51669],{"class":51358},[203,56539,53544],{"class":2052},[203,56541,259],{"class":213},[203,56543,53549],{"class":318},[203,56545,51365],{"class":213},[203,56547,56548,56550,56552,56554,56556,56558],{"class":205,"line":16700},[203,56549,51399],{"class":213},[203,56551,51669],{"class":51358},[203,56553,53544],{"class":2052},[203,56555,259],{"class":213},[203,56557,55285],{"class":318},[203,56559,51365],{"class":213},[203,56561,56562,56564,56566,56568,56570,56572,56574,56576,56578],{"class":205,"line":16723},[203,56563,55292],{"class":213},[203,56565,25],{"class":51358},[203,56567,55297],{"class":2052},[203,56569,259],{"class":213},[203,56571,55302],{"class":318},[203,56573,55305],{"class":2052},[203,56575,259],{"class":213},[203,56577,7742],{"class":318},[203,56579,51365],{"class":213},[203,56581,56582,56584,56586],{"class":205,"line":16729},[203,56583,51834],{"class":213},[203,56585,51669],{"class":51358},[203,56587,51365],{"class":213},[203,56589,56590,56592,56594,56596,56598,56600],{"class":205,"line":16752},[203,56591,51399],{"class":213},[203,56593,51669],{"class":51358},[203,56595,53544],{"class":2052},[203,56597,259],{"class":213},[203,56599,55332],{"class":318},[203,56601,51365],{"class":213},[203,56603,56604,56606,56608,56610,56612],{"class":205,"line":16766},[203,56605,55292],{"class":213},[203,56607,19],{"class":51358},[203,56609,55343],{"class":213},[203,56611,19],{"class":51358},[203,56613,51365],{"class":213},[203,56615,56616,56618,56620],{"class":205,"line":16786},[203,56617,55292],{"class":213},[203,56619,1221],{"class":51358},[203,56621,51365],{"class":213},[203,56623,56624,56626,56628,56630,56632,56634,56636,56638],{"class":205,"line":16792},[203,56625,55360],{"class":213},[203,56627,160],{"class":51358},[203,56629,53544],{"class":2052},[203,56631,259],{"class":213},[203,56633,55369],{"class":318},[203,56635,55372],{"class":213},[203,56637,160],{"class":51358},[203,56639,51365],{"class":213},[203,56641,56642,56644,56646,56648,56650],{"class":205,"line":16803},[203,56643,55360],{"class":213},[203,56645,160],{"class":51358},[203,56647,55372],{"class":213},[203,56649,160],{"class":51358},[203,56651,51365],{"class":213},[203,56653,56654,56656,56658,56660,56662],{"class":205,"line":16826},[203,56655,55360],{"class":213},[203,56657,160],{"class":51358},[203,56659,55372],{"class":213},[203,56661,160],{"class":51358},[203,56663,51365],{"class":213},[203,56665,56666,56668,56670,56672,56674],{"class":205,"line":16848},[203,56667,55360],{"class":213},[203,56669,160],{"class":51358},[203,56671,55372],{"class":213},[203,56673,160],{"class":51358},[203,56675,51365],{"class":213},[203,56677,56678,56680,56682,56684,56686],{"class":205,"line":16853},[203,56679,55360],{"class":213},[203,56681,160],{"class":51358},[203,56683,55372],{"class":213},[203,56685,160],{"class":51358},[203,56687,51365],{"class":213},[203,56689,56690,56692,56694,56696,56698],{"class":205,"line":16859},[203,56691,55360],{"class":213},[203,56693,160],{"class":51358},[203,56695,55372],{"class":213},[203,56697,160],{"class":51358},[203,56699,51365],{"class":213},[203,56701,56702,56704,56706,56708,56710],{"class":205,"line":16873},[203,56703,55360],{"class":213},[203,56705,160],{"class":51358},[203,56707,55372],{"class":213},[203,56709,160],{"class":51358},[203,56711,51365],{"class":213},[203,56713,56714,56716,56718,56720,56722],{"class":205,"line":16886},[203,56715,55360],{"class":213},[203,56717,160],{"class":51358},[203,56719,55372],{"class":213},[203,56721,160],{"class":51358},[203,56723,51365],{"class":213},[203,56725,56726,56728,56730],{"class":205,"line":16891},[203,56727,55465],{"class":213},[203,56729,1221],{"class":51358},[203,56731,51365],{"class":213},[203,56733,56734,56736,56738],{"class":205,"line":16905},[203,56735,51834],{"class":213},[203,56737,51669],{"class":51358},[203,56739,51365],{"class":213},[203,56741,56742,56744,56746],{"class":205,"line":16910},[203,56743,52475],{"class":213},[203,56745,51669],{"class":51358},[203,56747,51365],{"class":213},[203,56749,56750,56752,56754],{"class":205,"line":16916},[203,56751,52202],{"class":213},[203,56753,51871],{"class":51358},[203,56755,51365],{"class":213},[203,56757,56758,56760,56763,56765],{"class":205,"line":16921},[203,56759,11311],{"class":209},[203,56761,56762],{"class":262}," sliderData",[203,56764,13654],{"class":209},[203,56766,55505],{"class":213},[203,56768,56769,56771,56773,56775,56777,56779,56781],{"class":205,"line":16935},[203,56770,55510],{"class":213},[203,56772,55513],{"class":318},[203,56774,55516],{"class":213},[203,56776,55519],{"class":318},[203,56778,55522],{"class":213},[203,56780,55525],{"class":318},[203,56782,55528],{"class":213},[203,56784,56785,56787,56789,56791,56793,56795,56797],{"class":205,"line":16940},[203,56786,55510],{"class":213},[203,56788,55535],{"class":318},[203,56790,55516],{"class":213},[203,56792,55540],{"class":318},[203,56794,55522],{"class":213},[203,56796,55545],{"class":318},[203,56798,55528],{"class":213},[203,56800,56801,56803,56805,56807,56809,56811,56813],{"class":205,"line":16945},[203,56802,55510],{"class":213},[203,56804,55554],{"class":318},[203,56806,55516],{"class":213},[203,56808,55559],{"class":318},[203,56810,55522],{"class":213},[203,56812,55564],{"class":318},[203,56814,55528],{"class":213},[203,56816,56817,56819,56821,56823,56825,56827,56829],{"class":205,"line":16959},[203,56818,55510],{"class":213},[203,56820,55573],{"class":318},[203,56822,55516],{"class":213},[203,56824,55578],{"class":318},[203,56826,55522],{"class":213},[203,56828,55583],{"class":318},[203,56830,55528],{"class":213},[203,56832,56833,56835,56837,56839,56841,56843,56845],{"class":205,"line":16971},[203,56834,55510],{"class":213},[203,56836,55592],{"class":318},[203,56838,55516],{"class":213},[203,56840,55597],{"class":318},[203,56842,55522],{"class":213},[203,56844,55602],{"class":318},[203,56846,55528],{"class":213},[203,56848,56849,56851,56853,56855,56857,56859,56861],{"class":205,"line":16976},[203,56850,55510],{"class":213},[203,56852,55611],{"class":318},[203,56854,55516],{"class":213},[203,56856,55616],{"class":318},[203,56858,55522],{"class":213},[203,56860,55621],{"class":318},[203,56862,55528],{"class":213},[203,56864,56865,56867,56869,56871,56873,56875,56877],{"class":205,"line":16989},[203,56866,55510],{"class":213},[203,56868,55630],{"class":318},[203,56870,55516],{"class":213},[203,56872,55635],{"class":318},[203,56874,55522],{"class":213},[203,56876,55640],{"class":318},[203,56878,55528],{"class":213},[203,56880,56881,56883,56885,56887,56889,56891,56893],{"class":205,"line":16994},[203,56882,55510],{"class":213},[203,56884,55649],{"class":318},[203,56886,55516],{"class":213},[203,56888,55654],{"class":318},[203,56890,55522],{"class":213},[203,56892,55659],{"class":318},[203,56894,55662],{"class":213},[203,56896,56897],{"class":205,"line":16999},[203,56898,53167],{"class":213},[203,56900,56901],{"class":205,"line":17004},[203,56902,56903],{"class":272},"    \u002F\u002F 1.获取元素\n",[203,56905,56906,56908,56910,56912,56914,56916,56918,56920],{"class":205,"line":17017},[203,56907,11311],{"class":209},[203,56909,55673],{"class":262},[203,56911,13654],{"class":209},[203,56913,54454],{"class":213},[203,56915,54457],{"class":2052},[203,56917,214],{"class":213},[203,56919,55684],{"class":318},[203,56921,220],{"class":213},[203,56923,56924,56926,56928,56930,56932,56934,56936,56938],{"class":205,"line":17022},[203,56925,11311],{"class":209},[203,56927,6915],{"class":262},[203,56929,13654],{"class":209},[203,56931,54454],{"class":213},[203,56933,54457],{"class":2052},[203,56935,214],{"class":213},[203,56937,55703],{"class":318},[203,56939,220],{"class":213},[203,56941,56942,56944,56946,56948],{"class":205,"line":32691},[203,56943,52277],{"class":209},[203,56945,9528],{"class":213},[203,56947,259],{"class":209},[203,56949,47391],{"class":262},[203,56951,56952],{"class":205,"line":32697},[203,56953,56954],{"class":272},"    \u002F\u002F 2.开启定时器\n",[203,56956,56957],{"class":205,"line":32703},[203,56958,56959],{"class":272},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[203,56961,56962,56965,56967,56969],{"class":205,"line":32709},[203,56963,56964],{"class":2052},"    setInterval",[203,56966,214],{"class":213},[203,56968,54507],{"class":209},[203,56970,54510],{"class":213},[203,56972,56973,56975],{"class":205,"line":32715},[203,56974,54515],{"class":213},[203,56976,2791],{"class":209},[203,56978,56979,56981,56983,56985,56988,56990],{"class":205,"line":32726},[203,56980,54538],{"class":209},[203,56982,54541],{"class":213},[203,56984,1799],{"class":209},[203,56986,56987],{"class":213}," sliderData.",[203,56989,52026],{"class":262},[203,56991,12532],{"class":213},[203,56993,56994,56997,56999],{"class":205,"line":32732},[203,56995,56996],{"class":213},"        i ",[203,56998,259],{"class":209},[203,57000,47391],{"class":262},[203,57002,57003],{"class":205,"line":32752},[203,57004,52456],{"class":213},[203,57006,57007],{"class":205,"line":32758},[203,57008,57009],{"class":272},"      \u002F\u002F 更换图片路径\n",[203,57011,57012,57014,57016],{"class":205,"line":32769},[203,57013,55779],{"class":213},[203,57015,259],{"class":209},[203,57017,57018],{"class":213}," sliderData[i].url\n",[203,57020,57021],{"class":205,"line":32775},[203,57022,57023],{"class":272},"      \u002F\u002F 把文字写到p里面\n",[203,57025,57026,57028,57030],{"class":205,"line":32781},[203,57027,55789],{"class":213},[203,57029,259],{"class":209},[203,57031,57032],{"class":213}," sliderData[i].title\n",[203,57034,57035],{"class":205,"line":32787},[203,57036,57037],{"class":272},"      \u002F\u002F 小圆点\n",[203,57039,57040],{"class":205,"line":32793},[203,57041,57042],{"class":272},"      \u002F\u002F 先删除以前的active\n",[203,57044,57045],{"class":205,"line":32799},[203,57046,57047],{"class":272},"      \u002F\u002F 只让当前li添加active\n",[203,57049,57050,57052,57054,57056,57059,57062,57065,57067,57069],{"class":205,"line":32805},[203,57051,55829],{"class":213},[203,57053,54457],{"class":2052},[203,57055,214],{"class":213},[203,57057,57058],{"class":318},"'.slider-footer .activate'",[203,57060,57061],{"class":213},").classList.",[203,57063,57064],{"class":2052},"remove",[203,57066,214],{"class":213},[203,57068,55847],{"class":318},[203,57070,220],{"class":213},[203,57072,57073,57075,57077,57079,57082,57084,57086,57088,57091,57093,57095,57097,57099],{"class":205,"line":32811},[203,57074,55829],{"class":213},[203,57076,54457],{"class":2052},[203,57078,214],{"class":213},[203,57080,57081],{"class":318},"`.slider-footer ul li:nth-child(${",[203,57083,655],{"class":213},[203,57085,45624],{"class":209},[203,57087,25176],{"class":262},[203,57089,57090],{"class":318},"})`",[203,57092,57061],{"class":213},[203,57094,5424],{"class":2052},[203,57096,214],{"class":213},[203,57098,55847],{"class":318},[203,57100,220],{"class":213},[203,57102,57103],{"class":205,"line":32831},[203,57104,2489],{"emptyLinePlaceholder":131},[203,57106,57107,57109,57111],{"class":205,"line":32837},[203,57108,54593],{"class":213},[203,57110,6500],{"class":262},[203,57112,220],{"class":213},[203,57114,57115],{"class":205,"line":32853},[203,57116,2489],{"emptyLinePlaceholder":131},[203,57118,57119,57121,57123],{"class":205,"line":32859},[203,57120,52475],{"class":213},[203,57122,51871],{"class":51358},[203,57124,51365],{"class":213},[203,57126,57127,57129,57131],{"class":205,"line":32873},[203,57128,51843],{"class":213},[203,57130,51858],{"class":51358},[203,57132,51365],{"class":213},[203,57134,57135],{"class":205,"line":32879},[203,57136,2489],{"emptyLinePlaceholder":131},[203,57138,57139,57141,57143],{"class":205,"line":32894},[203,57140,51843],{"class":213},[203,57142,50693],{"class":51358},[203,57144,51365],{"class":213},[174,57146,57148],{"id":57147},"_317-重要知识点","3.1.7 重要知识点",[19,57150,57151,57152],{},"浏览器在渲染文本时， ",[363,57153,57154],{},"没有空格或换行符就没有“断行点”",[19,57156,57157],{},[25,57158],{"alt":27,"src":57159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57161,57162],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57164,57165],{},[25,57166],{"alt":27,"src":57167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57169,57170],{},[25,57171],{"alt":27,"src":57172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57174,57176],{"id":57175},"_32-dom事件基础","3.2 DOM事件基础",[174,57178,57180],{"id":57179},"_321-事件监听","3.2.1 事件监听",[19,57182,57183],{},[25,57184],{"alt":27,"src":57185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57187,57188],{},"事件监听有响应的发生",[19,57190,57191],{},[25,57192],{"alt":27,"src":57193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57195,57196],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57198,57199],{},"对于有名函数,要执行的函数名后边不要加()",[174,57201,57203],{"id":57202},"_322-随机点名案例","3.2.2 随机点名案例",[194,57205,57207],{"className":50691,"code":57206,"language":50693,"meta":27,"style":27},"\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",[200,57208,57209,57219,57233,57237,57245,57259,57279,57291,57299,57305,57315,57325,57329,57333,57340,57351,57355,57359,57365,57377,57391,57401,57413,57426,57430,57434,57441,57445,57458,57470,57482,57486,57490,57494,57501,57511,57515,57519,57528,57540,57552,57567,57571,57579,57587,57591,57599,57612,57626,57639,57659,57667,57682,57702,57722,57730,57734,57742,57747,57783,57803,57808,57827,57832,57843,57848,57859,57864,57883,57898,57903,57929,57939,57948,57953,57969,57974,57979,57984,57999,58003,58007,58012,58031,58048,58056,58061,58076,58080,58084,58092,58100,58104],{"__ignoreMap":27},[203,57210,57211,57213,57215,57217],{"class":205,"line":206},[203,57212,51355],{"class":213},[203,57214,51359],{"class":51358},[203,57216,51362],{"class":2052},[203,57218,51365],{"class":213},[203,57220,57221,57223,57225,57227,57229,57231],{"class":205,"line":124},[203,57222,1124],{"class":213},[203,57224,50693],{"class":51358},[203,57226,51374],{"class":2052},[203,57228,259],{"class":213},[203,57230,51379],{"class":318},[203,57232,51365],{"class":213},[203,57234,57235],{"class":205,"line":1269},[203,57236,2489],{"emptyLinePlaceholder":131},[203,57238,57239,57241,57243],{"class":205,"line":1284},[203,57240,1124],{"class":213},[203,57242,51392],{"class":51358},[203,57244,51365],{"class":213},[203,57246,57247,57249,57251,57253,57255,57257],{"class":205,"line":1290},[203,57248,52202],{"class":213},[203,57250,51402],{"class":51358},[203,57252,51405],{"class":2052},[203,57254,259],{"class":213},[203,57256,51410],{"class":318},[203,57258,51365],{"class":213},[203,57260,57261,57263,57265,57267,57269,57271,57273,57275,57277],{"class":205,"line":1304},[203,57262,52202],{"class":213},[203,57264,51402],{"class":51358},[203,57266,15010],{"class":2052},[203,57268,259],{"class":213},[203,57270,51449],{"class":318},[203,57272,51429],{"class":2052},[203,57274,259],{"class":213},[203,57276,51456],{"class":318},[203,57278,51365],{"class":213},[203,57280,57281,57283,57285,57287,57289],{"class":205,"line":1310},[203,57282,52202],{"class":213},[203,57284,51465],{"class":51358},[203,57286,51468],{"class":213},[203,57288,51465],{"class":51358},[203,57290,51365],{"class":213},[203,57292,57293,57295,57297],{"class":205,"line":1401},[203,57294,52202],{"class":213},[203,57296,5216],{"class":51358},[203,57298,51365],{"class":213},[203,57300,57301,57303],{"class":205,"line":1407},[203,57302,6493],{"class":51358},[203,57304,15662],{"class":213},[203,57306,57307,57309,57311,57313],{"class":205,"line":1419},[203,57308,54764],{"class":262},[203,57310,51495],{"class":213},[203,57312,405],{"class":262},[203,57314,1380],{"class":213},[203,57316,57317,57319,57321,57323],{"class":205,"line":1701},[203,57318,54753],{"class":262},[203,57320,51495],{"class":213},[203,57322,405],{"class":262},[203,57324,1380],{"class":213},[203,57326,57327],{"class":205,"line":1706},[203,57328,2276],{"class":213},[203,57330,57331],{"class":205,"line":1712},[203,57332,2489],{"emptyLinePlaceholder":131},[203,57334,57335,57338],{"class":205,"line":1717},[203,57336,57337],{"class":51358},"    h2",[203,57339,15662],{"class":213},[203,57341,57342,57345,57347,57349],{"class":205,"line":1731},[203,57343,57344],{"class":262},"      text-align",[203,57346,51495],{"class":213},[203,57348,51650],{"class":262},[203,57350,1380],{"class":213},[203,57352,57353],{"class":205,"line":1736},[203,57354,2276],{"class":213},[203,57356,57357],{"class":205,"line":1742},[203,57358,2489],{"emptyLinePlaceholder":131},[203,57360,57361,57363],{"class":205,"line":1763},[203,57362,54810],{"class":2052},[203,57364,15662],{"class":213},[203,57366,57367,57369,57371,57373,57375],{"class":205,"line":1768},[203,57368,54829],{"class":262},[203,57370,51495],{"class":213},[203,57372,1628],{"class":262},[203,57374,51550],{"class":209},[203,57376,1380],{"class":213},[203,57378,57379,57381,57383,57385,57387,57389],{"class":205,"line":1782},[203,57380,54764],{"class":262},[203,57382,51495],{"class":213},[203,57384,870],{"class":262},[203,57386,51550],{"class":209},[203,57388,51614],{"class":262},[203,57390,1380],{"class":213},[203,57392,57393,57395,57397,57399],{"class":205,"line":1787},[203,57394,55067],{"class":262},[203,57396,51495],{"class":213},[203,57398,51535],{"class":262},[203,57400,1380],{"class":213},[203,57402,57403,57405,57407,57409,57411],{"class":205,"line":1816},[203,57404,54980],{"class":262},[203,57406,51495],{"class":213},[203,57408,1039],{"class":262},[203,57410,51550],{"class":209},[203,57412,1380],{"class":213},[203,57414,57415,57418,57420,57422,57424],{"class":205,"line":1821},[203,57416,57417],{"class":262},"      line-height",[203,57419,51495],{"class":213},[203,57421,615],{"class":262},[203,57423,51550],{"class":209},[203,57425,1380],{"class":213},[203,57427,57428],{"class":205,"line":1838},[203,57429,2276],{"class":213},[203,57431,57432],{"class":205,"line":1843},[203,57433,2489],{"emptyLinePlaceholder":131},[203,57435,57436,57439],{"class":205,"line":1848},[203,57437,57438],{"class":2052},"    .qs",[203,57440,15662],{"class":213},[203,57442,57443],{"class":205,"line":1853},[203,57444,2489],{"emptyLinePlaceholder":131},[203,57446,57447,57449,57451,57454,57456],{"class":205,"line":1867},[203,57448,54829],{"class":262},[203,57450,51495],{"class":213},[203,57452,57453],{"class":262},"450",[203,57455,51550],{"class":209},[203,57457,1380],{"class":213},[203,57459,57460,57462,57464,57466,57468],{"class":205,"line":1872},[203,57461,54843],{"class":262},[203,57463,51495],{"class":213},[203,57465,615],{"class":262},[203,57467,51550],{"class":209},[203,57469,1380],{"class":213},[203,57471,57472,57475,57477,57480],{"class":205,"line":2666},[203,57473,57474],{"class":262},"      color",[203,57476,51495],{"class":213},[203,57478,57479],{"class":262},"red",[203,57481,1380],{"class":213},[203,57483,57484],{"class":205,"line":2680},[203,57485,2489],{"emptyLinePlaceholder":131},[203,57487,57488],{"class":205,"line":2688},[203,57489,2276],{"class":213},[203,57491,57492],{"class":205,"line":2693},[203,57493,2489],{"emptyLinePlaceholder":131},[203,57495,57496,57499],{"class":205,"line":2699},[203,57497,57498],{"class":2052},"    .btns",[203,57500,15662],{"class":213},[203,57502,57503,57505,57507,57509],{"class":205,"line":2705},[203,57504,57344],{"class":262},[203,57506,51495],{"class":213},[203,57508,51650],{"class":262},[203,57510,1380],{"class":213},[203,57512,57513],{"class":205,"line":2710},[203,57514,2276],{"class":213},[203,57516,57517],{"class":205,"line":8038},[203,57518,2489],{"emptyLinePlaceholder":131},[203,57520,57521,57523,57526],{"class":205,"line":8062},[203,57522,57498],{"class":2052},[203,57524,57525],{"class":51358}," button",[203,57527,15662],{"class":213},[203,57529,57530,57532,57534,57536,57538],{"class":205,"line":8067},[203,57531,54829],{"class":262},[203,57533,51495],{"class":213},[203,57535,1031],{"class":262},[203,57537,51550],{"class":209},[203,57539,1380],{"class":213},[203,57541,57542,57544,57546,57548,57550],{"class":205,"line":8073},[203,57543,54843],{"class":262},[203,57545,51495],{"class":213},[203,57547,487],{"class":262},[203,57549,51550],{"class":209},[203,57551,1380],{"class":213},[203,57553,57554,57556,57558,57560,57563,57565],{"class":205,"line":8100},[203,57555,54764],{"class":262},[203,57557,51495],{"class":213},[203,57559,405],{"class":262},[203,57561,57562],{"class":262}," 50",[203,57564,51550],{"class":209},[203,57566,1380],{"class":213},[203,57568,57569],{"class":205,"line":8105},[203,57570,2276],{"class":213},[203,57572,57573,57575,57577],{"class":205,"line":8111},[203,57574,52475],{"class":213},[203,57576,5216],{"class":51358},[203,57578,51365],{"class":213},[203,57580,57581,57583,57585],{"class":205,"line":8123},[203,57582,51843],{"class":213},[203,57584,51392],{"class":51358},[203,57586,51365],{"class":213},[203,57588,57589],{"class":205,"line":8135},[203,57590,2489],{"emptyLinePlaceholder":131},[203,57592,57593,57595,57597],{"class":205,"line":8147},[203,57594,1124],{"class":213},[203,57596,51858],{"class":51358},[203,57598,51365],{"class":213},[203,57600,57601,57603,57605,57608,57610],{"class":205,"line":9806},[203,57602,52202],{"class":213},[203,57604,14],{"class":51358},[203,57606,57607],{"class":213},">随机点名\u003C\u002F",[203,57609,14],{"class":51358},[203,57611,51365],{"class":213},[203,57613,57614,57616,57618,57620,57622,57624],{"class":205,"line":9831},[203,57615,52202],{"class":213},[203,57617,51669],{"class":51358},[203,57619,53544],{"class":2052},[203,57621,259],{"class":213},[203,57623,53549],{"class":318},[203,57625,51365],{"class":213},[203,57627,57628,57630,57632,57635,57637],{"class":205,"line":9854},[203,57629,51399],{"class":213},[203,57631,203],{"class":51358},[203,57633,57634],{"class":213},">名字是：\u003C\u002F",[203,57636,203],{"class":51358},[203,57638,51365],{"class":213},[203,57640,57641,57643,57645,57647,57649,57652,57655,57657],{"class":205,"line":9878},[203,57642,51399],{"class":213},[203,57644,51669],{"class":51358},[203,57646,53544],{"class":2052},[203,57648,259],{"class":213},[203,57650,57651],{"class":318},"\"qs\"",[203,57653,57654],{"class":213},">这里显示姓名\u003C\u002F",[203,57656,51669],{"class":51358},[203,57658,51365],{"class":213},[203,57660,57661,57663,57665],{"class":205,"line":9883},[203,57662,52475],{"class":213},[203,57664,51669],{"class":51358},[203,57666,51365],{"class":213},[203,57668,57669,57671,57673,57675,57677,57680],{"class":205,"line":9888},[203,57670,52202],{"class":213},[203,57672,51669],{"class":51358},[203,57674,53544],{"class":2052},[203,57676,259],{"class":213},[203,57678,57679],{"class":318},"\"btns\"",[203,57681,51365],{"class":213},[203,57683,57684,57686,57688,57690,57692,57695,57698,57700],{"class":205,"line":9893},[203,57685,51399],{"class":213},[203,57687,53945],{"class":51358},[203,57689,53544],{"class":2052},[203,57691,259],{"class":213},[203,57693,57694],{"class":318},"\"start\"",[203,57696,57697],{"class":213},">开始\u003C\u002F",[203,57699,53945],{"class":51358},[203,57701,51365],{"class":213},[203,57703,57704,57706,57708,57710,57712,57715,57718,57720],{"class":205,"line":9902},[203,57705,51399],{"class":213},[203,57707,53945],{"class":51358},[203,57709,53544],{"class":2052},[203,57711,259],{"class":213},[203,57713,57714],{"class":318},"\"end\"",[203,57716,57717],{"class":213},">结束\u003C\u002F",[203,57719,53945],{"class":51358},[203,57721,51365],{"class":213},[203,57723,57724,57726,57728],{"class":205,"line":9907},[203,57725,52475],{"class":213},[203,57727,51669],{"class":51358},[203,57729,51365],{"class":213},[203,57731,57732],{"class":205,"line":9913},[203,57733,2489],{"emptyLinePlaceholder":131},[203,57735,57736,57738,57740],{"class":205,"line":9934},[203,57737,52202],{"class":213},[203,57739,51871],{"class":51358},[203,57741,51365],{"class":213},[203,57743,57744],{"class":205,"line":9940},[203,57745,57746],{"class":272},"    \u002F\u002F 数据数组\n",[203,57748,57749,57751,57754,57756,57758,57761,57763,57766,57768,57771,57773,57776,57778,57781],{"class":205,"line":9954},[203,57750,11311],{"class":209},[203,57752,57753],{"class":262}," arr",[203,57755,13654],{"class":209},[203,57757,52284],{"class":213},[203,57759,57760],{"class":318},"'马超'",[203,57762,12525],{"class":213},[203,57764,57765],{"class":318},"'黄忠'",[203,57767,12525],{"class":213},[203,57769,57770],{"class":318},"'赵云'",[203,57772,12525],{"class":213},[203,57774,57775],{"class":318},"'关羽'",[203,57777,12525],{"class":213},[203,57779,57780],{"class":318},"'张飞'",[203,57782,33304],{"class":213},[203,57784,57785,57787,57790,57792,57794,57796,57798,57801],{"class":205,"line":9960},[203,57786,11311],{"class":209},[203,57788,57789],{"class":262}," qs",[203,57791,13654],{"class":209},[203,57793,54454],{"class":213},[203,57795,54457],{"class":2052},[203,57797,214],{"class":213},[203,57799,57800],{"class":318},"'.qs'",[203,57802,220],{"class":213},[203,57804,57805],{"class":205,"line":9987},[203,57806,57807],{"class":272},"    \u002F\u002F 1.业务1.开始按钮模块\n",[203,57809,57810,57812,57814,57816,57818,57820,57822,57825],{"class":205,"line":9996},[203,57811,11311],{"class":209},[203,57813,4273],{"class":262},[203,57815,13654],{"class":209},[203,57817,54454],{"class":213},[203,57819,54457],{"class":2052},[203,57821,214],{"class":213},[203,57823,57824],{"class":318},"'.start'",[203,57826,220],{"class":213},[203,57828,57829],{"class":205,"line":10002},[203,57830,57831],{"class":272},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[203,57833,57834,57836,57839,57841],{"class":205,"line":10010},[203,57835,52277],{"class":209},[203,57837,57838],{"class":213}," timerId ",[203,57840,259],{"class":209},[203,57842,47391],{"class":262},[203,57844,57845],{"class":205,"line":10015},[203,57846,57847],{"class":272},"    \u002F\u002F 随机号要全局变量\n",[203,57849,57850,57852,57855,57857],{"class":205,"line":16694},[203,57851,52277],{"class":209},[203,57853,57854],{"class":213}," random ",[203,57856,259],{"class":209},[203,57858,47391],{"class":262},[203,57860,57861],{"class":205,"line":16700},[203,57862,57863],{"class":272},"    \u002F\u002F 1.1 添加点击事件\n",[203,57865,57866,57869,57872,57874,57877,57879,57881],{"class":205,"line":16723},[203,57867,57868],{"class":213},"    start.",[203,57870,57871],{"class":2052},"addEventListener",[203,57873,214],{"class":213},[203,57875,57876],{"class":318},"'click'",[203,57878,12525],{"class":213},[203,57880,54507],{"class":209},[203,57882,54510],{"class":213},[203,57884,57885,57888,57890,57892,57894,57896],{"class":205,"line":16729},[203,57886,57887],{"class":213},"      timerId ",[203,57889,259],{"class":209},[203,57891,54502],{"class":2052},[203,57893,214],{"class":213},[203,57895,54507],{"class":209},[203,57897,54510],{"class":213},[203,57899,57900],{"class":205,"line":16752},[203,57901,57902],{"class":272},"        \u002F\u002F 随机数\n",[203,57904,57905,57908,57910,57913,57916,57919,57921,57923,57925,57927],{"class":205,"line":16766},[203,57906,57907],{"class":213},"        random ",[203,57909,259],{"class":209},[203,57911,57912],{"class":2052}," parseInt",[203,57914,57915],{"class":213},"(Math.",[203,57917,57918],{"class":2052},"random",[203,57920,13140],{"class":213},[203,57922,669],{"class":209},[203,57924,52023],{"class":213},[203,57926,52026],{"class":262},[203,57928,220],{"class":213},[203,57930,57931,57934,57936],{"class":205,"line":16786},[203,57932,57933],{"class":213},"        qs.innerHTML ",[203,57935,259],{"class":209},[203,57937,57938],{"class":213}," arr[random]\n",[203,57940,57941,57944,57946],{"class":205,"line":16792},[203,57942,57943],{"class":213},"      }, ",[203,57945,487],{"class":262},[203,57947,220],{"class":213},[203,57949,57950],{"class":205,"line":16803},[203,57951,57952],{"class":272},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[203,57954,57955,57957,57960,57962,57965,57967],{"class":205,"line":16826},[203,57956,54538],{"class":209},[203,57958,57959],{"class":213}," (arr.",[203,57961,52026],{"class":262},[203,57963,57964],{"class":209}," ===",[203,57966,25176],{"class":262},[203,57968,12532],{"class":213},[203,57970,57971],{"class":205,"line":16848},[203,57972,57973],{"class":272},"        \u002F\u002F start.disabled = true\n",[203,57975,57976],{"class":205,"line":16853},[203,57977,57978],{"class":272},"        \u002F\u002F end.disabled = true\n",[203,57980,57981],{"class":205,"line":16859},[203,57982,57983],{"class":272},"        \u002F\u002F 可以合起来写\n",[203,57985,57986,57989,57991,57994,57996],{"class":205,"line":16873},[203,57987,57988],{"class":213},"        start.disabled ",[203,57990,259],{"class":209},[203,57992,57993],{"class":213}," end.disabled ",[203,57995,259],{"class":209},[203,57997,57998],{"class":262}," true\n",[203,58000,58001],{"class":205,"line":16886},[203,58002,52456],{"class":213},[203,58004,58005],{"class":205,"line":16891},[203,58006,33519],{"class":213},[203,58008,58009],{"class":205,"line":16905},[203,58010,58011],{"class":272},"    \u002F\u002F 1.2 关闭按钮模块\n",[203,58013,58014,58016,58018,58020,58022,58024,58026,58029],{"class":205,"line":16910},[203,58015,11311],{"class":209},[203,58017,4289],{"class":262},[203,58019,13654],{"class":209},[203,58021,54454],{"class":213},[203,58023,54457],{"class":2052},[203,58025,214],{"class":213},[203,58027,58028],{"class":318},"'.end'",[203,58030,220],{"class":213},[203,58032,58033,58036,58038,58040,58042,58044,58046],{"class":205,"line":16916},[203,58034,58035],{"class":213},"    end.",[203,58037,57871],{"class":2052},[203,58039,214],{"class":213},[203,58041,57876],{"class":318},[203,58043,12525],{"class":213},[203,58045,54507],{"class":209},[203,58047,54510],{"class":213},[203,58049,58050,58053],{"class":205,"line":16921},[203,58051,58052],{"class":2052},"      clearInterval",[203,58054,58055],{"class":213},"(timerId)\n",[203,58057,58058],{"class":205,"line":16935},[203,58059,58060],{"class":272},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[203,58062,58063,58066,58069,58072,58074],{"class":205,"line":16940},[203,58064,58065],{"class":213},"      arr.",[203,58067,58068],{"class":2052},"splice",[203,58070,58071],{"class":213},"(random, ",[203,58073,431],{"class":262},[203,58075,220],{"class":213},[203,58077,58078],{"class":205,"line":16945},[203,58079,33519],{"class":213},[203,58081,58082],{"class":205,"line":16959},[203,58083,2489],{"emptyLinePlaceholder":131},[203,58085,58086,58088,58090],{"class":205,"line":16971},[203,58087,52475],{"class":213},[203,58089,51871],{"class":51358},[203,58091,51365],{"class":213},[203,58093,58094,58096,58098],{"class":205,"line":16976},[203,58095,51843],{"class":213},[203,58097,51858],{"class":51358},[203,58099,51365],{"class":213},[203,58101,58102],{"class":205,"line":16989},[203,58103,2489],{"emptyLinePlaceholder":131},[203,58105,58106,58108,58110],{"class":205,"line":16994},[203,58107,51843],{"class":213},[203,58109,50693],{"class":51358},[203,58111,51365],{"class":213},[19,58113,58114],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[174,58116,58118],{"id":58117},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[194,58120,58122],{"className":50691,"code":58121,"language":50693,"meta":27,"style":27},"\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",[200,58123,58124,58134,58148,58152,58160,58174,58194,58206,58214,58218,58226,58238,58246,58265,58282,58298,58308,58312,58320,58328,58332],{"__ignoreMap":27},[203,58125,58126,58128,58130,58132],{"class":205,"line":206},[203,58127,51355],{"class":213},[203,58129,51359],{"class":51358},[203,58131,51362],{"class":2052},[203,58133,51365],{"class":213},[203,58135,58136,58138,58140,58142,58144,58146],{"class":205,"line":124},[203,58137,1124],{"class":213},[203,58139,50693],{"class":51358},[203,58141,51374],{"class":2052},[203,58143,259],{"class":213},[203,58145,51379],{"class":318},[203,58147,51365],{"class":213},[203,58149,58150],{"class":205,"line":1269},[203,58151,2489],{"emptyLinePlaceholder":131},[203,58153,58154,58156,58158],{"class":205,"line":1284},[203,58155,1124],{"class":213},[203,58157,51392],{"class":51358},[203,58159,51365],{"class":213},[203,58161,58162,58164,58166,58168,58170,58172],{"class":205,"line":1290},[203,58163,52202],{"class":213},[203,58165,51402],{"class":51358},[203,58167,51405],{"class":2052},[203,58169,259],{"class":213},[203,58171,51410],{"class":318},[203,58173,51365],{"class":213},[203,58175,58176,58178,58180,58182,58184,58186,58188,58190,58192],{"class":205,"line":1304},[203,58177,52202],{"class":213},[203,58179,51402],{"class":51358},[203,58181,15010],{"class":2052},[203,58183,259],{"class":213},[203,58185,51449],{"class":318},[203,58187,51429],{"class":2052},[203,58189,259],{"class":213},[203,58191,51456],{"class":318},[203,58193,51365],{"class":213},[203,58195,58196,58198,58200,58202,58204],{"class":205,"line":1310},[203,58197,52202],{"class":213},[203,58199,51465],{"class":51358},[203,58201,51468],{"class":213},[203,58203,51465],{"class":51358},[203,58205,51365],{"class":213},[203,58207,58208,58210,58212],{"class":205,"line":1401},[203,58209,51843],{"class":213},[203,58211,51392],{"class":51358},[203,58213,51365],{"class":213},[203,58215,58216],{"class":205,"line":1407},[203,58217,2489],{"emptyLinePlaceholder":131},[203,58219,58220,58222,58224],{"class":205,"line":1419},[203,58221,1124],{"class":213},[203,58223,51858],{"class":51358},[203,58225,51365],{"class":213},[203,58227,58228,58230,58232,58234,58236],{"class":205,"line":1701},[203,58229,52202],{"class":213},[203,58231,53945],{"class":51358},[203,58233,53951],{"class":213},[203,58235,53945],{"class":51358},[203,58237,51365],{"class":213},[203,58239,58240,58242,58244],{"class":205,"line":1706},[203,58241,52202],{"class":213},[203,58243,51871],{"class":51358},[203,58245,51365],{"class":213},[203,58247,58248,58250,58252,58254,58256,58258,58260,58263],{"class":205,"line":1712},[203,58249,11311],{"class":209},[203,58251,54449],{"class":262},[203,58253,13654],{"class":209},[203,58255,54454],{"class":213},[203,58257,54457],{"class":2052},[203,58259,214],{"class":213},[203,58261,58262],{"class":318},"'button'",[203,58264,220],{"class":213},[203,58266,58267,58270,58272,58274,58276,58278,58280],{"class":205,"line":1717},[203,58268,58269],{"class":213},"    btn.",[203,58271,57871],{"class":2052},[203,58273,214],{"class":213},[203,58275,57876],{"class":318},[203,58277,12525],{"class":213},[203,58279,54507],{"class":209},[203,58281,54510],{"class":213},[203,58283,58284,58287,58289,58291,58294,58296],{"class":205,"line":1731},[203,58285,58286],{"class":209},"      const",[203,58288,2329],{"class":262},[203,58290,13654],{"class":209},[203,58292,58293],{"class":213}," Math.",[203,58295,57918],{"class":2052},[203,58297,2065],{"class":213},[203,58299,58300,58303,58306],{"class":205,"line":1736},[203,58301,58302],{"class":213},"      console.",[203,58304,58305],{"class":2052},"log",[203,58307,227],{"class":213},[203,58309,58310],{"class":205,"line":1742},[203,58311,33519],{"class":213},[203,58313,58314,58316,58318],{"class":205,"line":1763},[203,58315,52475],{"class":213},[203,58317,51871],{"class":51358},[203,58319,51365],{"class":213},[203,58321,58322,58324,58326],{"class":205,"line":1768},[203,58323,51843],{"class":213},[203,58325,51858],{"class":51358},[203,58327,51365],{"class":213},[203,58329,58330],{"class":205,"line":1782},[203,58331,2489],{"emptyLinePlaceholder":131},[203,58333,58334,58336,58338],{"class":205,"line":1787},[203,58335,51843],{"class":213},[203,58337,50693],{"class":51358},[203,58339,51365],{"class":213},[19,58341,58342],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58344,58345],{},"常量不可以重新赋值",[19,58347,58348],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[194,58350,58352],{"className":50691,"code":58351,"language":50693,"meta":27,"style":27},"\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",[200,58353,58354,58364,58378,58382,58390,58404,58424,58436,58444,58448,58456,58468,58476,58487,58505,58521,58535,58543,58547,58555,58563,58567],{"__ignoreMap":27},[203,58355,58356,58358,58360,58362],{"class":205,"line":206},[203,58357,51355],{"class":213},[203,58359,51359],{"class":51358},[203,58361,51362],{"class":2052},[203,58363,51365],{"class":213},[203,58365,58366,58368,58370,58372,58374,58376],{"class":205,"line":124},[203,58367,1124],{"class":213},[203,58369,50693],{"class":51358},[203,58371,51374],{"class":2052},[203,58373,259],{"class":213},[203,58375,51379],{"class":318},[203,58377,51365],{"class":213},[203,58379,58380],{"class":205,"line":1269},[203,58381,2489],{"emptyLinePlaceholder":131},[203,58383,58384,58386,58388],{"class":205,"line":1284},[203,58385,1124],{"class":213},[203,58387,51392],{"class":51358},[203,58389,51365],{"class":213},[203,58391,58392,58394,58396,58398,58400,58402],{"class":205,"line":1290},[203,58393,52202],{"class":213},[203,58395,51402],{"class":51358},[203,58397,51405],{"class":2052},[203,58399,259],{"class":213},[203,58401,51410],{"class":318},[203,58403,51365],{"class":213},[203,58405,58406,58408,58410,58412,58414,58416,58418,58420,58422],{"class":205,"line":1304},[203,58407,52202],{"class":213},[203,58409,51402],{"class":51358},[203,58411,15010],{"class":2052},[203,58413,259],{"class":213},[203,58415,51449],{"class":318},[203,58417,51429],{"class":2052},[203,58419,259],{"class":213},[203,58421,51456],{"class":318},[203,58423,51365],{"class":213},[203,58425,58426,58428,58430,58432,58434],{"class":205,"line":1310},[203,58427,52202],{"class":213},[203,58429,51465],{"class":51358},[203,58431,51468],{"class":213},[203,58433,51465],{"class":51358},[203,58435,51365],{"class":213},[203,58437,58438,58440,58442],{"class":205,"line":1401},[203,58439,51843],{"class":213},[203,58441,51392],{"class":51358},[203,58443,51365],{"class":213},[203,58445,58446],{"class":205,"line":1407},[203,58447,2489],{"emptyLinePlaceholder":131},[203,58449,58450,58452,58454],{"class":205,"line":1419},[203,58451,1124],{"class":213},[203,58453,51858],{"class":51358},[203,58455,51365],{"class":213},[203,58457,58458,58460,58462,58464,58466],{"class":205,"line":1701},[203,58459,52202],{"class":213},[203,58461,53945],{"class":51358},[203,58463,53951],{"class":213},[203,58465,53945],{"class":51358},[203,58467,51365],{"class":213},[203,58469,58470,58472,58474],{"class":205,"line":1706},[203,58471,52202],{"class":213},[203,58473,51871],{"class":51358},[203,58475,51365],{"class":213},[203,58477,58478,58480,58482,58484],{"class":205,"line":1712},[203,58479,11311],{"class":209},[203,58481,2329],{"class":262},[203,58483,13654],{"class":209},[203,58485,58486],{"class":262}," 10\n",[203,58488,58489,58491,58493,58495,58497,58499,58501,58503],{"class":205,"line":1717},[203,58490,11311],{"class":209},[203,58492,54449],{"class":262},[203,58494,13654],{"class":209},[203,58496,54454],{"class":213},[203,58498,54457],{"class":2052},[203,58500,214],{"class":213},[203,58502,58262],{"class":318},[203,58504,220],{"class":213},[203,58506,58507,58509,58511,58513,58515,58517,58519],{"class":205,"line":1731},[203,58508,58269],{"class":213},[203,58510,57871],{"class":2052},[203,58512,214],{"class":213},[203,58514,57876],{"class":318},[203,58516,12525],{"class":213},[203,58518,54507],{"class":209},[203,58520,54510],{"class":213},[203,58522,58523,58525,58527,58529,58531,58533],{"class":205,"line":1736},[203,58524,58286],{"class":209},[203,58526,2329],{"class":262},[203,58528,13654],{"class":209},[203,58530,58293],{"class":213},[203,58532,57918],{"class":2052},[203,58534,2065],{"class":213},[203,58536,58537,58539,58541],{"class":205,"line":1742},[203,58538,58302],{"class":213},[203,58540,58305],{"class":2052},[203,58542,227],{"class":213},[203,58544,58545],{"class":205,"line":1763},[203,58546,33519],{"class":213},[203,58548,58549,58551,58553],{"class":205,"line":1768},[203,58550,52475],{"class":213},[203,58552,51871],{"class":51358},[203,58554,51365],{"class":213},[203,58556,58557,58559,58561],{"class":205,"line":1782},[203,58558,51843],{"class":213},[203,58560,51858],{"class":51358},[203,58562,51365],{"class":213},[203,58564,58565],{"class":205,"line":1787},[203,58566,2489],{"emptyLinePlaceholder":131},[203,58568,58569,58571,58573],{"class":205,"line":1816},[203,58570,51843],{"class":213},[203,58572,50693],{"class":51358},[203,58574,51365],{"class":213},[19,58576,58577],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[194,58579,58581],{"className":50691,"code":58580,"language":50693,"meta":27,"style":27},"\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",[200,58582,58583,58593,58607,58611,58619,58633,58653,58665,58673,58677,58685,58697,58705,58715,58733,58749,58762,58770,58774,58782,58790,58794],{"__ignoreMap":27},[203,58584,58585,58587,58589,58591],{"class":205,"line":206},[203,58586,51355],{"class":213},[203,58588,51359],{"class":51358},[203,58590,51362],{"class":2052},[203,58592,51365],{"class":213},[203,58594,58595,58597,58599,58601,58603,58605],{"class":205,"line":124},[203,58596,1124],{"class":213},[203,58598,50693],{"class":51358},[203,58600,51374],{"class":2052},[203,58602,259],{"class":213},[203,58604,51379],{"class":318},[203,58606,51365],{"class":213},[203,58608,58609],{"class":205,"line":1269},[203,58610,2489],{"emptyLinePlaceholder":131},[203,58612,58613,58615,58617],{"class":205,"line":1284},[203,58614,1124],{"class":213},[203,58616,51392],{"class":51358},[203,58618,51365],{"class":213},[203,58620,58621,58623,58625,58627,58629,58631],{"class":205,"line":1290},[203,58622,52202],{"class":213},[203,58624,51402],{"class":51358},[203,58626,51405],{"class":2052},[203,58628,259],{"class":213},[203,58630,51410],{"class":318},[203,58632,51365],{"class":213},[203,58634,58635,58637,58639,58641,58643,58645,58647,58649,58651],{"class":205,"line":1304},[203,58636,52202],{"class":213},[203,58638,51402],{"class":51358},[203,58640,15010],{"class":2052},[203,58642,259],{"class":213},[203,58644,51449],{"class":318},[203,58646,51429],{"class":2052},[203,58648,259],{"class":213},[203,58650,51456],{"class":318},[203,58652,51365],{"class":213},[203,58654,58655,58657,58659,58661,58663],{"class":205,"line":1310},[203,58656,52202],{"class":213},[203,58658,51465],{"class":51358},[203,58660,51468],{"class":213},[203,58662,51465],{"class":51358},[203,58664,51365],{"class":213},[203,58666,58667,58669,58671],{"class":205,"line":1401},[203,58668,51843],{"class":213},[203,58670,51392],{"class":51358},[203,58672,51365],{"class":213},[203,58674,58675],{"class":205,"line":1407},[203,58676,2489],{"emptyLinePlaceholder":131},[203,58678,58679,58681,58683],{"class":205,"line":1419},[203,58680,1124],{"class":213},[203,58682,51858],{"class":51358},[203,58684,51365],{"class":213},[203,58686,58687,58689,58691,58693,58695],{"class":205,"line":1701},[203,58688,52202],{"class":213},[203,58690,53945],{"class":51358},[203,58692,53951],{"class":213},[203,58694,53945],{"class":51358},[203,58696,51365],{"class":213},[203,58698,58699,58701,58703],{"class":205,"line":1706},[203,58700,52202],{"class":213},[203,58702,51871],{"class":51358},[203,58704,51365],{"class":213},[203,58706,58707,58709,58711,58713],{"class":205,"line":1712},[203,58708,11311],{"class":209},[203,58710,2329],{"class":262},[203,58712,13654],{"class":209},[203,58714,58486],{"class":262},[203,58716,58717,58719,58721,58723,58725,58727,58729,58731],{"class":205,"line":1717},[203,58718,11311],{"class":209},[203,58720,54449],{"class":262},[203,58722,13654],{"class":209},[203,58724,54454],{"class":213},[203,58726,54457],{"class":2052},[203,58728,214],{"class":213},[203,58730,58262],{"class":318},[203,58732,220],{"class":213},[203,58734,58735,58737,58739,58741,58743,58745,58747],{"class":205,"line":1731},[203,58736,58269],{"class":213},[203,58738,57871],{"class":2052},[203,58740,214],{"class":213},[203,58742,57876],{"class":318},[203,58744,12525],{"class":213},[203,58746,54507],{"class":209},[203,58748,54510],{"class":213},[203,58750,58751,58754,58756,58758,58760],{"class":205,"line":1736},[203,58752,58753],{"class":213},"      num ",[203,58755,259],{"class":209},[203,58757,58293],{"class":213},[203,58759,57918],{"class":2052},[203,58761,2065],{"class":213},[203,58763,58764,58766,58768],{"class":205,"line":1742},[203,58765,58302],{"class":213},[203,58767,58305],{"class":2052},[203,58769,227],{"class":213},[203,58771,58772],{"class":205,"line":1763},[203,58773,33519],{"class":213},[203,58775,58776,58778,58780],{"class":205,"line":1768},[203,58777,52475],{"class":213},[203,58779,51871],{"class":51358},[203,58781,51365],{"class":213},[203,58783,58784,58786,58788],{"class":205,"line":1782},[203,58785,51843],{"class":213},[203,58787,51858],{"class":51358},[203,58789,51365],{"class":213},[203,58791,58792],{"class":205,"line":1787},[203,58793,2489],{"emptyLinePlaceholder":131},[203,58795,58796,58798,58800],{"class":205,"line":1816},[203,58797,51843],{"class":213},[203,58799,50693],{"class":51358},[203,58801,51365],{"class":213},[19,58803,58804],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[174,58806,58808],{"id":58807},"_324-事件监听版本","3.2.4 事件监听版本",[19,58810,58811],{},[25,58812],{"alt":27,"src":58813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,58815,58816],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,58818,58819],{},"这种方式会覆盖前边的事件监听:",[194,58821,58823],{"className":50691,"code":58822,"language":50693,"meta":27,"style":27},"\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",[200,58824,58825,58835,58849,58853,58861,58875,58895,58907,58915,58919,58927,58939,58947,58965,58979,58990,58994,59006,59016,59020,59028,59036,59040],{"__ignoreMap":27},[203,58826,58827,58829,58831,58833],{"class":205,"line":206},[203,58828,51355],{"class":213},[203,58830,51359],{"class":51358},[203,58832,51362],{"class":2052},[203,58834,51365],{"class":213},[203,58836,58837,58839,58841,58843,58845,58847],{"class":205,"line":124},[203,58838,1124],{"class":213},[203,58840,50693],{"class":51358},[203,58842,51374],{"class":2052},[203,58844,259],{"class":213},[203,58846,51379],{"class":318},[203,58848,51365],{"class":213},[203,58850,58851],{"class":205,"line":1269},[203,58852,2489],{"emptyLinePlaceholder":131},[203,58854,58855,58857,58859],{"class":205,"line":1284},[203,58856,1124],{"class":213},[203,58858,51392],{"class":51358},[203,58860,51365],{"class":213},[203,58862,58863,58865,58867,58869,58871,58873],{"class":205,"line":1290},[203,58864,52202],{"class":213},[203,58866,51402],{"class":51358},[203,58868,51405],{"class":2052},[203,58870,259],{"class":213},[203,58872,51410],{"class":318},[203,58874,51365],{"class":213},[203,58876,58877,58879,58881,58883,58885,58887,58889,58891,58893],{"class":205,"line":1304},[203,58878,52202],{"class":213},[203,58880,51402],{"class":51358},[203,58882,15010],{"class":2052},[203,58884,259],{"class":213},[203,58886,51449],{"class":318},[203,58888,51429],{"class":2052},[203,58890,259],{"class":213},[203,58892,51456],{"class":318},[203,58894,51365],{"class":213},[203,58896,58897,58899,58901,58903,58905],{"class":205,"line":1310},[203,58898,52202],{"class":213},[203,58900,51465],{"class":51358},[203,58902,51468],{"class":213},[203,58904,51465],{"class":51358},[203,58906,51365],{"class":213},[203,58908,58909,58911,58913],{"class":205,"line":1401},[203,58910,51843],{"class":213},[203,58912,51392],{"class":51358},[203,58914,51365],{"class":213},[203,58916,58917],{"class":205,"line":1407},[203,58918,2489],{"emptyLinePlaceholder":131},[203,58920,58921,58923,58925],{"class":205,"line":1419},[203,58922,1124],{"class":213},[203,58924,51858],{"class":51358},[203,58926,51365],{"class":213},[203,58928,58929,58931,58933,58935,58937],{"class":205,"line":1701},[203,58930,52202],{"class":213},[203,58932,53945],{"class":51358},[203,58934,53951],{"class":213},[203,58936,53945],{"class":51358},[203,58938,51365],{"class":213},[203,58940,58941,58943,58945],{"class":205,"line":1706},[203,58942,52202],{"class":213},[203,58944,51871],{"class":51358},[203,58946,51365],{"class":213},[203,58948,58949,58951,58953,58955,58957,58959,58961,58963],{"class":205,"line":1712},[203,58950,11311],{"class":209},[203,58952,54449],{"class":262},[203,58954,13654],{"class":209},[203,58956,54454],{"class":213},[203,58958,54457],{"class":2052},[203,58960,214],{"class":213},[203,58962,58262],{"class":318},[203,58964,220],{"class":213},[203,58966,58967,58969,58972,58974,58977],{"class":205,"line":1717},[203,58968,58269],{"class":213},[203,58970,58971],{"class":2052},"onclick",[203,58973,13654],{"class":209},[203,58975,58976],{"class":209}," function",[203,58978,54510],{"class":213},[203,58980,58981,58984,58986,58988],{"class":205,"line":1731},[203,58982,58983],{"class":2052},"      alert",[203,58985,214],{"class":213},[203,58987,686],{"class":262},[203,58989,220],{"class":213},[203,58991,58992],{"class":205,"line":1736},[203,58993,2276],{"class":213},[203,58995,58996,58998,59000,59002,59004],{"class":205,"line":1742},[203,58997,58269],{"class":213},[203,58999,58971],{"class":2052},[203,59001,13654],{"class":209},[203,59003,58976],{"class":209},[203,59005,54510],{"class":213},[203,59007,59008,59010,59012,59014],{"class":205,"line":1763},[203,59009,58983],{"class":2052},[203,59011,214],{"class":213},[203,59013,964],{"class":262},[203,59015,220],{"class":213},[203,59017,59018],{"class":205,"line":1768},[203,59019,2276],{"class":213},[203,59021,59022,59024,59026],{"class":205,"line":1782},[203,59023,52475],{"class":213},[203,59025,51871],{"class":51358},[203,59027,51365],{"class":213},[203,59029,59030,59032,59034],{"class":205,"line":1787},[203,59031,51843],{"class":213},[203,59033,51858],{"class":51358},[203,59035,51365],{"class":213},[203,59037,59038],{"class":205,"line":1816},[203,59039,2489],{"emptyLinePlaceholder":131},[203,59041,59042,59044,59046],{"class":205,"line":1821},[203,59043,51843],{"class":213},[203,59045,50693],{"class":51358},[203,59047,51365],{"class":213},[19,59049,59050],{},"只要点击就输出结果为22,前边11被覆盖了",[194,59052,59054],{"className":50691,"code":59053,"language":50693,"meta":27,"style":27},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[200,59055,59056,59061,59066,59070,59075,59080],{"__ignoreMap":27},[203,59057,59058],{"class":205,"line":206},[203,59059,59060],{"class":213},"  btn.addEventListener('click', function () {\n",[203,59062,59063],{"class":205,"line":124},[203,59064,59065],{"class":213},"      alert(11)\n",[203,59067,59068],{"class":205,"line":1269},[203,59069,33519],{"class":213},[203,59071,59072],{"class":205,"line":1284},[203,59073,59074],{"class":213},"    btn.addEventListener('click', function () {\n",[203,59076,59077],{"class":205,"line":1290},[203,59078,59079],{"class":213},"      alert(22)\n",[203,59081,59082],{"class":205,"line":1304},[203,59083,33519],{"class":213},[19,59085,59086],{},"点击第一次输出11,第二次点击为22",[174,59088,59090],{"id":59089},"_325-事件类型","3.2.5 事件类型",[19,59092,59093],{},[25,59094],{"alt":27,"src":59095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22088,59097,59099],{"id":59098},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59101,59102],{},"补充知识:",[19,59104,59105],{},"轮播图自动播放模块,可以使用",[19,59107,59108],{},"let timerId = setInterval(function () {",[19,59110,59111],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59113,59114],{},"用js方法模拟进行点击事件,click必须加()",[19,59116,59117],{},"next.click()",[19,59119,59120],{},"}, 1000)",[19,59122,59123],{},[25,59124],{"alt":27,"src":59125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[194,59127,59129],{"className":53125,"code":59128,"language":53127,"meta":27,"style":27},"\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",[200,59130,59131,59135,59145,59159,59163,59171,59186,59206,59226,59239,59247,59252,59257,59261,59265,59270,59275,59280,59285,59289,59293,59298,59303,59308,59312,59316,59321,59325,59330,59335,59339,59343,59348,59353,59358,59363,59368,59372,59376,59381,59386,59391,59396,59401,59405,59409,59414,59419,59424,59429,59434,59439,59444,59449,59454,59459,59463,59467,59472,59477,59481,59485,59490,59495,59499,59504,59509,59513,59517,59522,59526,59531,59536,59540,59545,59549,59553,59558,59563,59568,59573,59578,59583,59588,59592,59596,59600,59605,59610,59615,59620,59624,59632,59640,59644,59652,59667,59681,59702,59710,59724,59737,59752,59771,59783,59795,59807,59819,59831,59843,59855,59863,59878,59902,59926,59934,59942,59950,59958,59963,59968,59973,59978,59983,59988,59993,59998,60003,60008,60012,60017,60022,60027,60032,60037,60042,60047,60052,60057,60061,60066,60071,60076,60081,60086,60091,60096,60101,60106,60111,60116,60121,60125,60129,60134,60139,60144,60148,60153,60158,60163,60168,60173,60177,60182,60186,60190,60194,60198,60202,60206,60211,60216,60221,60226,60231,60236,60241,60246,60251,60255,60259,60264,60269,60274,60279,60284,60288,60293,60298,60303,60308,60313,60318,60322,60326,60331,60335,60340,60344,60349,60354,60359,60364,60369,60374,60378,60386,60394,60398],{"__ignoreMap":27},[203,59132,59133],{"class":205,"line":206},[203,59134,2489],{"emptyLinePlaceholder":131},[203,59136,59137,59139,59141,59143],{"class":205,"line":124},[203,59138,51355],{"class":213},[203,59140,51359],{"class":209},[203,59142,51362],{"class":262},[203,59144,51365],{"class":213},[203,59146,59147,59149,59151,59153,59155,59157],{"class":205,"line":1269},[203,59148,1124],{"class":213},[203,59150,50693],{"class":51358},[203,59152,51374],{"class":2052},[203,59154,259],{"class":213},[203,59156,51379],{"class":318},[203,59158,51365],{"class":213},[203,59160,59161],{"class":205,"line":1284},[203,59162,2489],{"emptyLinePlaceholder":131},[203,59164,59165,59167,59169],{"class":205,"line":1290},[203,59166,1124],{"class":213},[203,59168,51392],{"class":51358},[203,59170,51365],{"class":213},[203,59172,59173,59175,59177,59179,59181,59183],{"class":205,"line":1304},[203,59174,52202],{"class":213},[203,59176,51402],{"class":51358},[203,59178,51405],{"class":2052},[203,59180,259],{"class":213},[203,59182,51410],{"class":318},[203,59184,59185],{"class":213}," \u002F>\n",[203,59187,59188,59190,59192,59194,59196,59198,59200,59202,59204],{"class":205,"line":1310},[203,59189,52202],{"class":213},[203,59191,51402],{"class":51358},[203,59193,51421],{"class":2052},[203,59195,259],{"class":213},[203,59197,51426],{"class":318},[203,59199,51429],{"class":2052},[203,59201,259],{"class":213},[203,59203,51434],{"class":318},[203,59205,59185],{"class":213},[203,59207,59208,59210,59212,59214,59216,59218,59220,59222,59224],{"class":205,"line":1401},[203,59209,52202],{"class":213},[203,59211,51402],{"class":51358},[203,59213,15010],{"class":2052},[203,59215,259],{"class":213},[203,59217,51449],{"class":318},[203,59219,51429],{"class":2052},[203,59221,259],{"class":213},[203,59223,51456],{"class":318},[203,59225,59185],{"class":213},[203,59227,59228,59230,59232,59235,59237],{"class":205,"line":1407},[203,59229,52202],{"class":213},[203,59231,51465],{"class":51358},[203,59233,59234],{"class":213},">轮播图点击切换\u003C\u002F",[203,59236,51465],{"class":51358},[203,59238,51365],{"class":213},[203,59240,59241,59243,59245],{"class":205,"line":1419},[203,59242,52202],{"class":213},[203,59244,5216],{"class":51358},[203,59246,51365],{"class":213},[203,59248,59249],{"class":205,"line":1701},[203,59250,59251],{"class":213},"    * {\n",[203,59253,59254],{"class":205,"line":1706},[203,59255,59256],{"class":213},"      box-sizing: border-box;\n",[203,59258,59259],{"class":205,"line":1712},[203,59260,2276],{"class":213},[203,59262,59263],{"class":205,"line":1717},[203,59264,2489],{"emptyLinePlaceholder":131},[203,59266,59267],{"class":205,"line":1731},[203,59268,59269],{"class":213},"    .slider {\n",[203,59271,59272],{"class":205,"line":1736},[203,59273,59274],{"class":213},"      width: 560px;\n",[203,59276,59277],{"class":205,"line":1742},[203,59278,59279],{"class":213},"      height: 400px;\n",[203,59281,59282],{"class":205,"line":1763},[203,59283,59284],{"class":213},"      overflow: hidden;\n",[203,59286,59287],{"class":205,"line":1768},[203,59288,2276],{"class":213},[203,59290,59291],{"class":205,"line":1782},[203,59292,2489],{"emptyLinePlaceholder":131},[203,59294,59295],{"class":205,"line":1787},[203,59296,59297],{"class":213},"    .slider-wrapper {\n",[203,59299,59300],{"class":205,"line":1816},[203,59301,59302],{"class":213},"      width: 100%;\n",[203,59304,59305],{"class":205,"line":1821},[203,59306,59307],{"class":213},"      height: 320px;\n",[203,59309,59310],{"class":205,"line":1838},[203,59311,2276],{"class":213},[203,59313,59314],{"class":205,"line":1843},[203,59315,2489],{"emptyLinePlaceholder":131},[203,59317,59318],{"class":205,"line":1848},[203,59319,59320],{"class":213},"    .slider-wrapper img {\n",[203,59322,59323],{"class":205,"line":1853},[203,59324,59302],{"class":213},[203,59326,59327],{"class":205,"line":1867},[203,59328,59329],{"class":213},"      height: 100%;\n",[203,59331,59332],{"class":205,"line":1872},[203,59333,59334],{"class":213},"      display: block;\n",[203,59336,59337],{"class":205,"line":2666},[203,59338,2276],{"class":213},[203,59340,59341],{"class":205,"line":2680},[203,59342,2489],{"emptyLinePlaceholder":131},[203,59344,59345],{"class":205,"line":2688},[203,59346,59347],{"class":213},"    .slider-footer {\n",[203,59349,59350],{"class":205,"line":2693},[203,59351,59352],{"class":213},"      height: 80px;\n",[203,59354,59355],{"class":205,"line":2699},[203,59356,59357],{"class":213},"      background-color: rgb(100, 67, 68);\n",[203,59359,59360],{"class":205,"line":2705},[203,59361,59362],{"class":213},"      padding: 12px 12px 0 12px;\n",[203,59364,59365],{"class":205,"line":2710},[203,59366,59367],{"class":213},"      position: relative;\n",[203,59369,59370],{"class":205,"line":8038},[203,59371,2276],{"class":213},[203,59373,59374],{"class":205,"line":8062},[203,59375,2489],{"emptyLinePlaceholder":131},[203,59377,59378],{"class":205,"line":8067},[203,59379,59380],{"class":213},"    .slider-footer .toggle {\n",[203,59382,59383],{"class":205,"line":8073},[203,59384,59385],{"class":213},"      position: absolute;\n",[203,59387,59388],{"class":205,"line":8100},[203,59389,59390],{"class":213},"      right: 0;\n",[203,59392,59393],{"class":205,"line":8105},[203,59394,59395],{"class":213},"      top: 12px;\n",[203,59397,59398],{"class":205,"line":8111},[203,59399,59400],{"class":213},"      display: flex;\n",[203,59402,59403],{"class":205,"line":8123},[203,59404,2276],{"class":213},[203,59406,59407],{"class":205,"line":8135},[203,59408,2489],{"emptyLinePlaceholder":131},[203,59410,59411],{"class":205,"line":8147},[203,59412,59413],{"class":213},"    .slider-footer .toggle button {\n",[203,59415,59416],{"class":205,"line":9806},[203,59417,59418],{"class":213},"      margin-right: 12px;\n",[203,59420,59421],{"class":205,"line":9831},[203,59422,59423],{"class":213},"      width: 28px;\n",[203,59425,59426],{"class":205,"line":9854},[203,59427,59428],{"class":213},"      height: 28px;\n",[203,59430,59431],{"class":205,"line":9878},[203,59432,59433],{"class":213},"      appearance: none;\n",[203,59435,59436],{"class":205,"line":9883},[203,59437,59438],{"class":213},"      border: none;\n",[203,59440,59441],{"class":205,"line":9888},[203,59442,59443],{"class":213},"      background: rgba(255, 255, 255, 0.1);\n",[203,59445,59446],{"class":205,"line":9893},[203,59447,59448],{"class":213},"      color: #fff;\n",[203,59450,59451],{"class":205,"line":9902},[203,59452,59453],{"class":213},"      border-radius: 4px;\n",[203,59455,59456],{"class":205,"line":9907},[203,59457,59458],{"class":213},"      cursor: pointer;\n",[203,59460,59461],{"class":205,"line":9913},[203,59462,2276],{"class":213},[203,59464,59465],{"class":205,"line":9934},[203,59466,2489],{"emptyLinePlaceholder":131},[203,59468,59469],{"class":205,"line":9940},[203,59470,59471],{"class":213},"    .slider-footer .toggle button:hover {\n",[203,59473,59474],{"class":205,"line":9954},[203,59475,59476],{"class":213},"      background: rgba(255, 255, 255, 0.2);\n",[203,59478,59479],{"class":205,"line":9960},[203,59480,2276],{"class":213},[203,59482,59483],{"class":205,"line":9987},[203,59484,2489],{"emptyLinePlaceholder":131},[203,59486,59487],{"class":205,"line":9996},[203,59488,59489],{"class":213},"    .slider-footer p {\n",[203,59491,59492],{"class":205,"line":10002},[203,59493,59494],{"class":213},"      margin: 0;\n",[203,59496,59497],{"class":205,"line":10010},[203,59498,59448],{"class":213},[203,59500,59501],{"class":205,"line":10015},[203,59502,59503],{"class":213},"      font-size: 18px;\n",[203,59505,59506],{"class":205,"line":16694},[203,59507,59508],{"class":213},"      margin-bottom: 10px;\n",[203,59510,59511],{"class":205,"line":16700},[203,59512,2276],{"class":213},[203,59514,59515],{"class":205,"line":16723},[203,59516,2489],{"emptyLinePlaceholder":131},[203,59518,59519],{"class":205,"line":16729},[203,59520,59521],{"class":213},"    .slider-indicator {\n",[203,59523,59524],{"class":205,"line":16752},[203,59525,59494],{"class":213},[203,59527,59528],{"class":205,"line":16766},[203,59529,59530],{"class":213},"      padding: 0;\n",[203,59532,59533],{"class":205,"line":16786},[203,59534,59535],{"class":213},"      list-style: none;\n",[203,59537,59538],{"class":205,"line":16792},[203,59539,59400],{"class":213},[203,59541,59542],{"class":205,"line":16803},[203,59543,59544],{"class":213},"      align-items: center;\n",[203,59546,59547],{"class":205,"line":16826},[203,59548,2276],{"class":213},[203,59550,59551],{"class":205,"line":16848},[203,59552,2489],{"emptyLinePlaceholder":131},[203,59554,59555],{"class":205,"line":16853},[203,59556,59557],{"class":213},"    .slider-indicator li {\n",[203,59559,59560],{"class":205,"line":16859},[203,59561,59562],{"class":213},"      width: 8px;\n",[203,59564,59565],{"class":205,"line":16873},[203,59566,59567],{"class":213},"      height: 8px;\n",[203,59569,59570],{"class":205,"line":16886},[203,59571,59572],{"class":213},"      margin: 4px;\n",[203,59574,59575],{"class":205,"line":16891},[203,59576,59577],{"class":213},"      border-radius: 50%;\n",[203,59579,59580],{"class":205,"line":16905},[203,59581,59582],{"class":213},"      background: #fff;\n",[203,59584,59585],{"class":205,"line":16910},[203,59586,59587],{"class":213},"      opacity: 0.4;\n",[203,59589,59590],{"class":205,"line":16916},[203,59591,59458],{"class":213},[203,59593,59594],{"class":205,"line":16921},[203,59595,2276],{"class":213},[203,59597,59598],{"class":205,"line":16935},[203,59599,2489],{"emptyLinePlaceholder":131},[203,59601,59602],{"class":205,"line":16940},[203,59603,59604],{"class":213},"    .slider-indicator li.active {\n",[203,59606,59607],{"class":205,"line":16945},[203,59608,59609],{"class":213},"      width: 12px;\n",[203,59611,59612],{"class":205,"line":16959},[203,59613,59614],{"class":213},"      height: 12px;\n",[203,59616,59617],{"class":205,"line":16971},[203,59618,59619],{"class":213},"      opacity: 1;\n",[203,59621,59622],{"class":205,"line":16976},[203,59623,2276],{"class":213},[203,59625,59626,59628,59630],{"class":205,"line":16989},[203,59627,52475],{"class":213},[203,59629,5216],{"class":51358},[203,59631,51365],{"class":213},[203,59633,59634,59636,59638],{"class":205,"line":16994},[203,59635,51843],{"class":213},[203,59637,51392],{"class":51358},[203,59639,51365],{"class":213},[203,59641,59642],{"class":205,"line":16999},[203,59643,2489],{"emptyLinePlaceholder":131},[203,59645,59646,59648,59650],{"class":205,"line":17004},[203,59647,1124],{"class":213},[203,59649,51858],{"class":51358},[203,59651,51365],{"class":213},[203,59653,59654,59656,59658,59660,59662,59665],{"class":205,"line":17017},[203,59655,52202],{"class":213},[203,59657,51669],{"class":51358},[203,59659,53544],{"class":2052},[203,59661,259],{"class":213},[203,59663,59664],{"class":318},"\"slider\"",[203,59666,51365],{"class":213},[203,59668,59669,59671,59673,59675,59677,59679],{"class":205,"line":17022},[203,59670,51399],{"class":213},[203,59672,51669],{"class":51358},[203,59674,53544],{"class":2052},[203,59676,259],{"class":213},[203,59678,55285],{"class":318},[203,59680,51365],{"class":213},[203,59682,59683,59685,59687,59689,59691,59694,59696,59698,59700],{"class":205,"line":32691},[203,59684,55292],{"class":213},[203,59686,25],{"class":51358},[203,59688,55297],{"class":2052},[203,59690,259],{"class":213},[203,59692,59693],{"class":318},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[203,59695,55305],{"class":2052},[203,59697,259],{"class":213},[203,59699,7742],{"class":318},[203,59701,59185],{"class":213},[203,59703,59704,59706,59708],{"class":205,"line":32697},[203,59705,51834],{"class":213},[203,59707,51669],{"class":51358},[203,59709,51365],{"class":213},[203,59711,59712,59714,59716,59718,59720,59722],{"class":205,"line":32703},[203,59713,51399],{"class":213},[203,59715,51669],{"class":51358},[203,59717,53544],{"class":2052},[203,59719,259],{"class":213},[203,59721,55332],{"class":318},[203,59723,51365],{"class":213},[203,59725,59726,59728,59730,59733,59735],{"class":205,"line":32709},[203,59727,55292],{"class":213},[203,59729,19],{"class":51358},[203,59731,59732],{"class":213},">对人类来说会不会太超前了？\u003C\u002F",[203,59734,19],{"class":51358},[203,59736,51365],{"class":213},[203,59738,59739,59741,59743,59745,59747,59750],{"class":205,"line":32715},[203,59740,55292],{"class":213},[203,59742,1221],{"class":51358},[203,59744,53544],{"class":2052},[203,59746,259],{"class":213},[203,59748,59749],{"class":318},"\"slider-indicator\"",[203,59751,51365],{"class":213},[203,59753,59754,59756,59758,59760,59762,59765,59767,59769],{"class":205,"line":32726},[203,59755,55360],{"class":213},[203,59757,160],{"class":51358},[203,59759,53544],{"class":2052},[203,59761,259],{"class":213},[203,59763,59764],{"class":318},"\"active\"",[203,59766,55372],{"class":213},[203,59768,160],{"class":51358},[203,59770,51365],{"class":213},[203,59772,59773,59775,59777,59779,59781],{"class":205,"line":32732},[203,59774,55360],{"class":213},[203,59776,160],{"class":51358},[203,59778,55372],{"class":213},[203,59780,160],{"class":51358},[203,59782,51365],{"class":213},[203,59784,59785,59787,59789,59791,59793],{"class":205,"line":32752},[203,59786,55360],{"class":213},[203,59788,160],{"class":51358},[203,59790,55372],{"class":213},[203,59792,160],{"class":51358},[203,59794,51365],{"class":213},[203,59796,59797,59799,59801,59803,59805],{"class":205,"line":32758},[203,59798,55360],{"class":213},[203,59800,160],{"class":51358},[203,59802,55372],{"class":213},[203,59804,160],{"class":51358},[203,59806,51365],{"class":213},[203,59808,59809,59811,59813,59815,59817],{"class":205,"line":32769},[203,59810,55360],{"class":213},[203,59812,160],{"class":51358},[203,59814,55372],{"class":213},[203,59816,160],{"class":51358},[203,59818,51365],{"class":213},[203,59820,59821,59823,59825,59827,59829],{"class":205,"line":32775},[203,59822,55360],{"class":213},[203,59824,160],{"class":51358},[203,59826,55372],{"class":213},[203,59828,160],{"class":51358},[203,59830,51365],{"class":213},[203,59832,59833,59835,59837,59839,59841],{"class":205,"line":32781},[203,59834,55360],{"class":213},[203,59836,160],{"class":51358},[203,59838,55372],{"class":213},[203,59840,160],{"class":51358},[203,59842,51365],{"class":213},[203,59844,59845,59847,59849,59851,59853],{"class":205,"line":32787},[203,59846,55360],{"class":213},[203,59848,160],{"class":51358},[203,59850,55372],{"class":213},[203,59852,160],{"class":51358},[203,59854,51365],{"class":213},[203,59856,59857,59859,59861],{"class":205,"line":32793},[203,59858,55465],{"class":213},[203,59860,1221],{"class":51358},[203,59862,51365],{"class":213},[203,59864,59865,59867,59869,59871,59873,59876],{"class":205,"line":32799},[203,59866,55292],{"class":213},[203,59868,51669],{"class":51358},[203,59870,53544],{"class":2052},[203,59872,259],{"class":213},[203,59874,59875],{"class":318},"\"toggle\"",[203,59877,51365],{"class":213},[203,59879,59880,59882,59884,59886,59888,59891,59893,59896,59898,59900],{"class":205,"line":32805},[203,59881,55360],{"class":213},[203,59883,53945],{"class":51358},[203,59885,53544],{"class":2052},[203,59887,259],{"class":213},[203,59889,59890],{"class":318},"\"prev\"",[203,59892,1174],{"class":213},[203,59894,59895],{"class":262},"&lt;",[203,59897,51843],{"class":213},[203,59899,53945],{"class":51358},[203,59901,51365],{"class":213},[203,59903,59904,59906,59908,59910,59912,59915,59917,59920,59922,59924],{"class":205,"line":32811},[203,59905,55360],{"class":213},[203,59907,53945],{"class":51358},[203,59909,53544],{"class":2052},[203,59911,259],{"class":213},[203,59913,59914],{"class":318},"\"next\"",[203,59916,1174],{"class":213},[203,59918,59919],{"class":262},"&gt;",[203,59921,51843],{"class":213},[203,59923,53945],{"class":51358},[203,59925,51365],{"class":213},[203,59927,59928,59930,59932],{"class":205,"line":32831},[203,59929,55465],{"class":213},[203,59931,51669],{"class":51358},[203,59933,51365],{"class":213},[203,59935,59936,59938,59940],{"class":205,"line":32837},[203,59937,51834],{"class":213},[203,59939,51669],{"class":51358},[203,59941,51365],{"class":213},[203,59943,59944,59946,59948],{"class":205,"line":32853},[203,59945,52475],{"class":213},[203,59947,51669],{"class":51358},[203,59949,51365],{"class":213},[203,59951,59952,59954,59956],{"class":205,"line":32859},[203,59953,52202],{"class":213},[203,59955,51871],{"class":51358},[203,59957,51365],{"class":213},[203,59959,59960],{"class":205,"line":32873},[203,59961,59962],{"class":213},"    \u002F\u002F 1. 初始数据\n",[203,59964,59965],{"class":205,"line":32879},[203,59966,59967],{"class":213},"    const data = [\n",[203,59969,59970],{"class":205,"line":32894},[203,59971,59972],{"class":213},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[203,59974,59975],{"class":205,"line":32900},[203,59976,59977],{"class":213},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[203,59979,59980],{"class":205,"line":32909},[203,59981,59982],{"class":213},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[203,59984,59985],{"class":205,"line":32915},[203,59986,59987],{"class":213},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[203,59989,59990],{"class":205,"line":32924},[203,59991,59992],{"class":213},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[203,59994,59995],{"class":205,"line":32930},[203,59996,59997],{"class":213},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[203,59999,60000],{"class":205,"line":32936},[203,60001,60002],{"class":213},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[203,60004,60005],{"class":205,"line":32945},[203,60006,60007],{"class":213},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[203,60009,60010],{"class":205,"line":32951},[203,60011,53167],{"class":213},[203,60013,60014],{"class":205,"line":32962},[203,60015,60016],{"class":213},"    \u002F\u002F 获取元素\n",[203,60018,60019],{"class":205,"line":32968},[203,60020,60021],{"class":213},"    const img = document.querySelector('.slider-wrapper img')\n",[203,60023,60024],{"class":205,"line":32987},[203,60025,60026],{"class":213},"    const p = document.querySelector('.slider-footer p')\n",[203,60028,60029],{"class":205,"line":32993},[203,60030,60031],{"class":213},"    const footer = document.querySelector('.slider-footer')\n",[203,60033,60034],{"class":205,"line":33004},[203,60035,60036],{"class":213},"    \u002F\u002F 1. 右按钮业务\n",[203,60038,60039],{"class":205,"line":33010},[203,60040,60041],{"class":213},"    \u002F\u002F 1.1 获取右侧按钮 \n",[203,60043,60044],{"class":205,"line":33030},[203,60045,60046],{"class":213},"    const next = document.querySelector('.next')\n",[203,60048,60049],{"class":205,"line":33046},[203,60050,60051],{"class":213},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[203,60053,60054],{"class":205,"line":33052},[203,60055,60056],{"class":213},"    \u002F\u002F 1.2 注册点击事件\n",[203,60058,60059],{"class":205,"line":33066},[203,60060,2489],{"emptyLinePlaceholder":131},[203,60062,60063],{"class":205,"line":33072},[203,60064,60065],{"class":213},"    next.addEventListener('click', function () {\n",[203,60067,60068],{"class":205,"line":33078},[203,60069,60070],{"class":213},"      \u002F\u002F console.log(11)\n",[203,60072,60073],{"class":205,"line":33089},[203,60074,60075],{"class":213},"      i++\n",[203,60077,60078],{"class":205,"line":33095},[203,60079,60080],{"class":213},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[203,60082,60083],{"class":205,"line":33101},[203,60084,60085],{"class":213},"      \u002F\u002F if (i >= 8) {\n",[203,60087,60088],{"class":205,"line":33111},[203,60089,60090],{"class":213},"      \u002F\u002F   i = 0\n",[203,60092,60093],{"class":205,"line":33117},[203,60094,60095],{"class":213},"      \u002F\u002F }\n",[203,60097,60098],{"class":205,"line":33128},[203,60099,60100],{"class":213},"      i = i >= data.length ? 0 : i\n",[203,60102,60103],{"class":205,"line":33134},[203,60104,60105],{"class":213},"      \u002F\u002F 1.3 得到对应的对象\n",[203,60107,60108],{"class":205,"line":33144},[203,60109,60110],{"class":213},"      \u002F\u002F console.log(data[i])\n",[203,60112,60113],{"class":205,"line":33149},[203,60114,60115],{"class":213},"      \u002F\u002F 调用函数\n",[203,60117,60118],{"class":205,"line":33155},[203,60119,60120],{"class":213},"      toggle()\n",[203,60122,60123],{"class":205,"line":33204},[203,60124,33519],{"class":213},[203,60126,60127],{"class":205,"line":33251},[203,60128,2489],{"emptyLinePlaceholder":131},[203,60130,60131],{"class":205,"line":33256},[203,60132,60133],{"class":213},"    \u002F\u002F 2. 左侧按钮业务\n",[203,60135,60136],{"class":205,"line":33262},[203,60137,60138],{"class":213},"    \u002F\u002F 2.1 获取左侧按钮 \n",[203,60140,60141],{"class":205,"line":33281},[203,60142,60143],{"class":213},"    const prev = document.querySelector('.prev')\n",[203,60145,60146],{"class":205,"line":33287},[203,60147,60056],{"class":213},[203,60149,60150],{"class":205,"line":33307},[203,60151,60152],{"class":213},"    prev.addEventListener('click', function () {\n",[203,60154,60155],{"class":205,"line":33313},[203,60156,60157],{"class":213},"      i--\n",[203,60159,60160],{"class":205,"line":33319},[203,60161,60162],{"class":213},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[203,60164,60165],{"class":205,"line":33329},[203,60166,60167],{"class":213},"      \u002F\u002F if (i \u003C 0) {\n",[203,60169,60170],{"class":205,"line":33334},[203,60171,60172],{"class":213},"      \u002F\u002F   i = 7\n",[203,60174,60175],{"class":205,"line":33340},[203,60176,60095],{"class":213},[203,60178,60179],{"class":205,"line":33356},[203,60180,60181],{"class":213},"      i = i \u003C 0 ? data.length - 1 : i\n",[203,60183,60184],{"class":205,"line":33401},[203,60185,60105],{"class":213},[203,60187,60188],{"class":205,"line":33407},[203,60189,60110],{"class":213},[203,60191,60192],{"class":205,"line":33413},[203,60193,60115],{"class":213},[203,60195,60196],{"class":205,"line":33419},[203,60197,60120],{"class":213},[203,60199,60200],{"class":205,"line":33430},[203,60201,33519],{"class":213},[203,60203,60204],{"class":205,"line":33436},[203,60205,2489],{"emptyLinePlaceholder":131},[203,60207,60208],{"class":205,"line":33442},[203,60209,60210],{"class":213},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[203,60212,60213],{"class":205,"line":33448},[203,60214,60215],{"class":213},"    function toggle() {\n",[203,60217,60218],{"class":205,"line":33466},[203,60219,60220],{"class":213},"      \u002F\u002F 1.4 渲染对应的数据\n",[203,60222,60223],{"class":205,"line":33480},[203,60224,60225],{"class":213},"      img.src = data[i].url\n",[203,60227,60228],{"class":205,"line":33489},[203,60229,60230],{"class":213},"      p.innerHTML = data[i].title\n",[203,60232,60233],{"class":205,"line":33498},[203,60234,60235],{"class":213},"      footer.style.backgroundColor = data[i].color\n",[203,60237,60238],{"class":205,"line":33507},[203,60239,60240],{"class":213},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[203,60242,60243],{"class":205,"line":33516},[203,60244,60245],{"class":213},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[203,60247,60248],{"class":205,"line":33522},[203,60249,60250],{"class":213},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[203,60252,60253],{"class":205,"line":33528},[203,60254,2276],{"class":213},[203,60256,60257],{"class":205,"line":33536},[203,60258,2489],{"emptyLinePlaceholder":131},[203,60260,60261],{"class":205,"line":33541},[203,60262,60263],{"class":213},"    \u002F\u002F 3. 自动播放模块\n",[203,60265,60266],{"class":205,"line":33547},[203,60267,60268],{"class":213},"    let timerId = setInterval(function () {\n",[203,60270,60271],{"class":205,"line":33558},[203,60272,60273],{"class":213},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[203,60275,60276],{"class":205,"line":33564},[203,60277,60278],{"class":213},"      next.click()\n",[203,60280,60281],{"class":205,"line":33584},[203,60282,60283],{"class":213},"    }, 1000)\n",[203,60285,60286],{"class":205,"line":33590},[203,60287,2489],{"emptyLinePlaceholder":131},[203,60289,60290],{"class":205,"line":33596},[203,60291,60292],{"class":213},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[203,60294,60295],{"class":205,"line":33602},[203,60296,60297],{"class":213},"    const slider = document.querySelector('.slider')\n",[203,60299,60300],{"class":205,"line":33619},[203,60301,60302],{"class":213},"    \u002F\u002F 注册事件\n",[203,60304,60305],{"class":205,"line":33625},[203,60306,60307],{"class":213},"    slider.addEventListener('mouseenter', function () {\n",[203,60309,60310],{"class":205,"line":33631},[203,60311,60312],{"class":213},"      \u002F\u002F 停止定时器\n",[203,60314,60315],{"class":205,"line":33637},[203,60316,60317],{"class":213},"      clearInterval(timerId)\n",[203,60319,60320],{"class":205,"line":33643},[203,60321,33519],{"class":213},[203,60323,60324],{"class":205,"line":33649},[203,60325,2489],{"emptyLinePlaceholder":131},[203,60327,60328],{"class":205,"line":33676},[203,60329,60330],{"class":213},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[203,60332,60333],{"class":205,"line":33700},[203,60334,60302],{"class":213},[203,60336,60337],{"class":205,"line":33706},[203,60338,60339],{"class":213},"    slider.addEventListener('mouseleave', function () {\n",[203,60341,60342],{"class":205,"line":33712},[203,60343,60312],{"class":213},[203,60345,60346],{"class":205,"line":33718},[203,60347,60348],{"class":213},"      if (timerId) clearInterval(timerId)\n",[203,60350,60351],{"class":205,"line":33729},[203,60352,60353],{"class":213},"      \u002F\u002F 开启定时器\n",[203,60355,60356],{"class":205,"line":33740},[203,60357,60358],{"class":213},"      timerId = setInterval(function () {\n",[203,60360,60361],{"class":205,"line":33746},[203,60362,60363],{"class":213},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[203,60365,60366],{"class":205,"line":33763},[203,60367,60368],{"class":213},"        next.click()\n",[203,60370,60371],{"class":205,"line":33786},[203,60372,60373],{"class":213},"      }, 1000)\n",[203,60375,60376],{"class":205,"line":33809},[203,60377,33519],{"class":213},[203,60379,60380,60382,60384],{"class":205,"line":33815},[203,60381,52475],{"class":213},[203,60383,51871],{"class":51358},[203,60385,51365],{"class":213},[203,60387,60388,60390,60392],{"class":205,"line":33820},[203,60389,51843],{"class":213},[203,60391,51858],{"class":51358},[203,60393,51365],{"class":213},[203,60395,60396],{"class":205,"line":33829},[203,60397,2489],{"emptyLinePlaceholder":131},[203,60399,60400,60402,60404],{"class":205,"line":33839},[203,60401,51843],{"class":213},[203,60403,50693],{"class":51358},[203,60405,51365],{"class":213},[22088,60407,60409],{"id":60408},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60411,60412],{},"小米搜索框案例：",[194,60414,60416],{"className":50691,"code":60415,"language":50693,"meta":27,"style":27},"\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",[200,60417,60418,60428,60442,60446,60454,60468,60488,60508,60520,60528,60534,60544,60554,60566,60570,60574,60581,60585,60596,60600,60604,60611,60622,60635,60649,60653,60657,60666,60678,60690,60704,60717,60730,60748,60759,60763,60767,60776,60793,60797,60801,60808,60818,60828,60839,60852,60864,60880,60891,60903,60907,60911,60919,60930,60947,60959,60971,60982,60986,60990,61001,61012,61016,61024,61028,61036,61040,61048,61063,61086,61101,61132,61159,61186,61213,61240,61267,61294,61303,61311,61319,61324,61344,61364,61369,61374,61392,61397,61407,61412,61426,61431,61436,61453,61462,61474,61478,61486,61494,61498],{"__ignoreMap":27},[203,60419,60420,60422,60424,60426],{"class":205,"line":206},[203,60421,51355],{"class":213},[203,60423,51359],{"class":51358},[203,60425,51362],{"class":2052},[203,60427,51365],{"class":213},[203,60429,60430,60432,60434,60436,60438,60440],{"class":205,"line":124},[203,60431,1124],{"class":213},[203,60433,50693],{"class":51358},[203,60435,51374],{"class":2052},[203,60437,259],{"class":213},[203,60439,51379],{"class":318},[203,60441,51365],{"class":213},[203,60443,60444],{"class":205,"line":1269},[203,60445,2489],{"emptyLinePlaceholder":131},[203,60447,60448,60450,60452],{"class":205,"line":1284},[203,60449,1124],{"class":213},[203,60451,51392],{"class":51358},[203,60453,51365],{"class":213},[203,60455,60456,60458,60460,60462,60464,60466],{"class":205,"line":1290},[203,60457,51399],{"class":213},[203,60459,51402],{"class":51358},[203,60461,51405],{"class":2052},[203,60463,259],{"class":213},[203,60465,51410],{"class":318},[203,60467,51365],{"class":213},[203,60469,60470,60472,60474,60476,60478,60480,60482,60484,60486],{"class":205,"line":1304},[203,60471,51399],{"class":213},[203,60473,51402],{"class":51358},[203,60475,51421],{"class":2052},[203,60477,259],{"class":213},[203,60479,51426],{"class":318},[203,60481,51429],{"class":2052},[203,60483,259],{"class":213},[203,60485,51434],{"class":318},[203,60487,51365],{"class":213},[203,60489,60490,60492,60494,60496,60498,60500,60502,60504,60506],{"class":205,"line":1310},[203,60491,51399],{"class":213},[203,60493,51402],{"class":51358},[203,60495,15010],{"class":2052},[203,60497,259],{"class":213},[203,60499,51449],{"class":318},[203,60501,51429],{"class":2052},[203,60503,259],{"class":213},[203,60505,51456],{"class":318},[203,60507,51365],{"class":213},[203,60509,60510,60512,60514,60516,60518],{"class":205,"line":1401},[203,60511,51399],{"class":213},[203,60513,51465],{"class":51358},[203,60515,51468],{"class":213},[203,60517,51465],{"class":51358},[203,60519,51365],{"class":213},[203,60521,60522,60524,60526],{"class":205,"line":1407},[203,60523,51399],{"class":213},[203,60525,5216],{"class":51358},[203,60527,51365],{"class":213},[203,60529,60530,60532],{"class":205,"line":1419},[203,60531,51485],{"class":51358},[203,60533,15662],{"class":213},[203,60535,60536,60538,60540,60542],{"class":205,"line":1701},[203,60537,51492],{"class":262},[203,60539,51495],{"class":213},[203,60541,405],{"class":262},[203,60543,1380],{"class":213},[203,60545,60546,60548,60550,60552],{"class":205,"line":1706},[203,60547,51504],{"class":262},[203,60549,51495],{"class":213},[203,60551,405],{"class":262},[203,60553,1380],{"class":213},[203,60555,60556,60559,60561,60564],{"class":205,"line":1712},[203,60557,60558],{"class":262},"            box-sizing",[203,60560,51495],{"class":213},[203,60562,60563],{"class":262},"border-box",[203,60565,1380],{"class":213},[203,60567,60568],{"class":205,"line":1717},[203,60569,2618],{"class":213},[203,60571,60572],{"class":205,"line":1731},[203,60573,2489],{"emptyLinePlaceholder":131},[203,60575,60576,60579],{"class":205,"line":1736},[203,60577,60578],{"class":51358},"        ul",[203,60580,15662],{"class":213},[203,60582,60583],{"class":205,"line":1742},[203,60584,2489],{"emptyLinePlaceholder":131},[203,60586,60587,60590,60592,60594],{"class":205,"line":1763},[203,60588,60589],{"class":262},"            list-style",[203,60591,51495],{"class":213},[203,60593,54795],{"class":262},[203,60595,1380],{"class":213},[203,60597,60598],{"class":205,"line":1768},[203,60599,2618],{"class":213},[203,60601,60602],{"class":205,"line":1782},[203,60603,2489],{"emptyLinePlaceholder":131},[203,60605,60606,60609],{"class":205,"line":1787},[203,60607,60608],{"class":2052},"        .mi",[203,60610,15662],{"class":213},[203,60612,60613,60616,60618,60620],{"class":205,"line":1816},[203,60614,60615],{"class":262},"            position",[203,60617,51495],{"class":213},[203,60619,54822],{"class":262},[203,60621,1380],{"class":213},[203,60623,60624,60626,60628,60631,60633],{"class":205,"line":1821},[203,60625,51542],{"class":262},[203,60627,51495],{"class":213},[203,60629,60630],{"class":262},"223",[203,60632,51550],{"class":209},[203,60634,1380],{"class":213},[203,60636,60637,60639,60641,60643,60645,60647],{"class":205,"line":1838},[203,60638,51492],{"class":262},[203,60640,51495],{"class":213},[203,60642,525],{"class":262},[203,60644,51550],{"class":209},[203,60646,51614],{"class":262},[203,60648,1380],{"class":213},[203,60650,60651],{"class":205,"line":1843},[203,60652,2618],{"class":213},[203,60654,60655],{"class":205,"line":1848},[203,60656,2489],{"emptyLinePlaceholder":131},[203,60658,60659,60661,60664],{"class":205,"line":1853},[203,60660,60608],{"class":2052},[203,60662,60663],{"class":51358}," input",[203,60665,15662],{"class":213},[203,60667,60668,60670,60672,60674,60676],{"class":205,"line":1867},[203,60669,51542],{"class":262},[203,60671,51495],{"class":213},[203,60673,60630],{"class":262},[203,60675,51550],{"class":209},[203,60677,1380],{"class":213},[203,60679,60680,60682,60684,60686,60688],{"class":205,"line":1872},[203,60681,51557],{"class":262},[203,60683,51495],{"class":213},[203,60685,821],{"class":262},[203,60687,51550],{"class":209},[203,60689,1380],{"class":213},[203,60691,60692,60694,60696,60698,60700,60702],{"class":205,"line":2666},[203,60693,51504],{"class":262},[203,60695,51495],{"class":213},[203,60697,405],{"class":262},[203,60699,2127],{"class":262},[203,60701,51550],{"class":209},[203,60703,1380],{"class":213},[203,60705,60706,60709,60711,60713,60715],{"class":205,"line":2680},[203,60707,60708],{"class":262},"            font-size",[203,60710,51495],{"class":213},[203,60712,763],{"class":262},[203,60714,51550],{"class":209},[203,60716,1380],{"class":213},[203,60718,60719,60722,60724,60726,60728],{"class":205,"line":2688},[203,60720,60721],{"class":262},"            line-height",[203,60723,51495],{"class":213},[203,60725,821],{"class":262},[203,60727,51550],{"class":209},[203,60729,1380],{"class":213},[203,60731,60732,60735,60737,60739,60741,60743,60746],{"class":205,"line":2693},[203,60733,60734],{"class":262},"            border",[203,60736,51495],{"class":213},[203,60738,431],{"class":262},[203,60740,51550],{"class":209},[203,60742,51579],{"class":262},[203,60744,60745],{"class":262}," #e0e0e0",[203,60747,1380],{"class":213},[203,60749,60750,60753,60755,60757],{"class":205,"line":2699},[203,60751,60752],{"class":262},"            outline",[203,60754,51495],{"class":213},[203,60756,54795],{"class":262},[203,60758,1380],{"class":213},[203,60760,60761],{"class":205,"line":2705},[203,60762,2618],{"class":213},[203,60764,60765],{"class":205,"line":2710},[203,60766,2489],{"emptyLinePlaceholder":131},[203,60768,60769,60771,60774],{"class":205,"line":8038},[203,60770,60608],{"class":2052},[203,60772,60773],{"class":2052}," .search",[203,60775,15662],{"class":213},[203,60777,60778,60780,60782,60784,60786,60788,60791],{"class":205,"line":8062},[203,60779,60734],{"class":262},[203,60781,51495],{"class":213},[203,60783,431],{"class":262},[203,60785,51550],{"class":209},[203,60787,51579],{"class":262},[203,60789,60790],{"class":262}," #ff6700",[203,60792,1380],{"class":213},[203,60794,60795],{"class":205,"line":8067},[203,60796,2618],{"class":213},[203,60798,60799],{"class":205,"line":8073},[203,60800,2489],{"emptyLinePlaceholder":131},[203,60802,60803,60806],{"class":205,"line":8100},[203,60804,60805],{"class":2052},"        .result-list",[203,60807,15662],{"class":213},[203,60809,60810,60812,60814,60816],{"class":205,"line":8105},[203,60811,51530],{"class":262},[203,60813,51495],{"class":213},[203,60815,54795],{"class":262},[203,60817,1380],{"class":213},[203,60819,60820,60822,60824,60826],{"class":205,"line":8111},[203,60821,60615],{"class":262},[203,60823,51495],{"class":213},[203,60825,54889],{"class":262},[203,60827,1380],{"class":213},[203,60829,60830,60833,60835,60837],{"class":205,"line":8123},[203,60831,60832],{"class":262},"            left",[203,60834,51495],{"class":213},[203,60836,405],{"class":262},[203,60838,1380],{"class":213},[203,60840,60841,60844,60846,60848,60850],{"class":205,"line":8135},[203,60842,60843],{"class":262},"            top",[203,60845,51495],{"class":213},[203,60847,821],{"class":262},[203,60849,51550],{"class":209},[203,60851,1380],{"class":213},[203,60853,60854,60856,60858,60860,60862],{"class":205,"line":8147},[203,60855,51542],{"class":262},[203,60857,51495],{"class":213},[203,60859,60630],{"class":262},[203,60861,51550],{"class":209},[203,60863,1380],{"class":213},[203,60865,60866,60868,60870,60872,60874,60876,60878],{"class":205,"line":9806},[203,60867,60734],{"class":262},[203,60869,51495],{"class":213},[203,60871,431],{"class":262},[203,60873,51550],{"class":209},[203,60875,51579],{"class":262},[203,60877,60790],{"class":262},[203,60879,1380],{"class":213},[203,60881,60882,60885,60887,60889],{"class":205,"line":9831},[203,60883,60884],{"class":262},"            border-top",[203,60886,51495],{"class":213},[203,60888,405],{"class":262},[203,60890,1380],{"class":213},[203,60892,60893,60896,60898,60901],{"class":205,"line":9854},[203,60894,60895],{"class":262},"            background",[203,60897,51495],{"class":213},[203,60899,60900],{"class":262},"#fff",[203,60902,1380],{"class":213},[203,60904,60905],{"class":205,"line":9878},[203,60906,2618],{"class":213},[203,60908,60909],{"class":205,"line":9883},[203,60910,2489],{"emptyLinePlaceholder":131},[203,60912,60913,60915,60917],{"class":205,"line":9888},[203,60914,60805],{"class":2052},[203,60916,1488],{"class":51358},[203,60918,15662],{"class":213},[203,60920,60921,60923,60925,60928],{"class":205,"line":9893},[203,60922,51530],{"class":262},[203,60924,51495],{"class":213},[203,60926,60927],{"class":262},"block",[203,60929,1380],{"class":213},[203,60931,60932,60934,60936,60938,60940,60943,60945],{"class":205,"line":9902},[203,60933,51504],{"class":262},[203,60935,51495],{"class":213},[203,60937,558],{"class":262},[203,60939,51550],{"class":209},[203,60941,60942],{"class":262}," 15",[203,60944,51550],{"class":209},[203,60946,1380],{"class":213},[203,60948,60949,60951,60953,60955,60957],{"class":205,"line":9907},[203,60950,60708],{"class":262},[203,60952,51495],{"class":213},[203,60954,712],{"class":262},[203,60956,51550],{"class":209},[203,60958,1380],{"class":213},[203,60960,60961,60964,60966,60969],{"class":205,"line":9913},[203,60962,60963],{"class":262},"            color",[203,60965,51495],{"class":213},[203,60967,60968],{"class":262},"#424242",[203,60970,1380],{"class":213},[203,60972,60973,60976,60978,60980],{"class":205,"line":9934},[203,60974,60975],{"class":262},"            text-decoration",[203,60977,51495],{"class":213},[203,60979,54795],{"class":262},[203,60981,1380],{"class":213},[203,60983,60984],{"class":205,"line":9940},[203,60985,2618],{"class":213},[203,60987,60988],{"class":205,"line":9954},[203,60989,2489],{"emptyLinePlaceholder":131},[203,60991,60992,60994,60996,60999],{"class":205,"line":9960},[203,60993,60805],{"class":2052},[203,60995,1488],{"class":51358},[203,60997,60998],{"class":2052},":hover",[203,61000,15662],{"class":213},[203,61002,61003,61005,61007,61010],{"class":205,"line":9987},[203,61004,51698],{"class":262},[203,61006,51495],{"class":213},[203,61008,61009],{"class":262},"#eee",[203,61011,1380],{"class":213},[203,61013,61014],{"class":205,"line":9996},[203,61015,2618],{"class":213},[203,61017,61018,61020,61022],{"class":205,"line":10002},[203,61019,51834],{"class":213},[203,61021,5216],{"class":51358},[203,61023,51365],{"class":213},[203,61025,61026],{"class":205,"line":10010},[203,61027,2489],{"emptyLinePlaceholder":131},[203,61029,61030,61032,61034],{"class":205,"line":10015},[203,61031,51843],{"class":213},[203,61033,51392],{"class":51358},[203,61035,51365],{"class":213},[203,61037,61038],{"class":205,"line":16694},[203,61039,2489],{"emptyLinePlaceholder":131},[203,61041,61042,61044,61046],{"class":205,"line":16700},[203,61043,1124],{"class":213},[203,61045,51858],{"class":51358},[203,61047,51365],{"class":213},[203,61049,61050,61052,61054,61056,61058,61061],{"class":205,"line":16723},[203,61051,51399],{"class":213},[203,61053,51669],{"class":51358},[203,61055,53544],{"class":2052},[203,61057,259],{"class":213},[203,61059,61060],{"class":318},"\"mi\"",[203,61062,51365],{"class":213},[203,61064,61065,61067,61069,61071,61073,61076,61079,61081,61084],{"class":205,"line":16729},[203,61066,55360],{"class":213},[203,61068,53879],{"class":51358},[203,61070,53882],{"class":2052},[203,61072,259],{"class":213},[203,61074,61075],{"class":318},"\"search\"",[203,61077,61078],{"class":2052}," placeholder",[203,61080,259],{"class":213},[203,61082,61083],{"class":318},"\"小米笔记本\"",[203,61085,51365],{"class":213},[203,61087,61088,61090,61092,61094,61096,61099],{"class":205,"line":16752},[203,61089,55360],{"class":213},[203,61091,1221],{"class":51358},[203,61093,53544],{"class":2052},[203,61095,259],{"class":213},[203,61097,61098],{"class":318},"\"result-list\"",[203,61100,51365],{"class":213},[203,61102,61103,61106,61108,61111,61113,61116,61118,61121,61124,61126,61128,61130],{"class":205,"line":16766},[203,61104,61105],{"class":213},"            \u003C",[203,61107,160],{"class":51358},[203,61109,61110],{"class":213},">\u003C",[203,61112,452],{"class":51358},[203,61114,61115],{"class":2052}," href",[203,61117,259],{"class":213},[203,61119,61120],{"class":318},"\"#\"",[203,61122,61123],{"class":213},">全部商品\u003C\u002F",[203,61125,452],{"class":51358},[203,61127,55372],{"class":213},[203,61129,160],{"class":51358},[203,61131,51365],{"class":213},[203,61133,61134,61136,61138,61140,61142,61144,61146,61148,61151,61153,61155,61157],{"class":205,"line":16786},[203,61135,61105],{"class":213},[203,61137,160],{"class":51358},[203,61139,61110],{"class":213},[203,61141,452],{"class":51358},[203,61143,61115],{"class":2052},[203,61145,259],{"class":213},[203,61147,61120],{"class":318},[203,61149,61150],{"class":213},">小米11\u003C\u002F",[203,61152,452],{"class":51358},[203,61154,55372],{"class":213},[203,61156,160],{"class":51358},[203,61158,51365],{"class":213},[203,61160,61161,61163,61165,61167,61169,61171,61173,61175,61178,61180,61182,61184],{"class":205,"line":16792},[203,61162,61105],{"class":213},[203,61164,160],{"class":51358},[203,61166,61110],{"class":213},[203,61168,452],{"class":51358},[203,61170,61115],{"class":2052},[203,61172,259],{"class":213},[203,61174,61120],{"class":318},[203,61176,61177],{"class":213},">小米10S\u003C\u002F",[203,61179,452],{"class":51358},[203,61181,55372],{"class":213},[203,61183,160],{"class":51358},[203,61185,51365],{"class":213},[203,61187,61188,61190,61192,61194,61196,61198,61200,61202,61205,61207,61209,61211],{"class":205,"line":16803},[203,61189,61105],{"class":213},[203,61191,160],{"class":51358},[203,61193,61110],{"class":213},[203,61195,452],{"class":51358},[203,61197,61115],{"class":2052},[203,61199,259],{"class":213},[203,61201,61120],{"class":318},[203,61203,61204],{"class":213},">小米笔记本\u003C\u002F",[203,61206,452],{"class":51358},[203,61208,55372],{"class":213},[203,61210,160],{"class":51358},[203,61212,51365],{"class":213},[203,61214,61215,61217,61219,61221,61223,61225,61227,61229,61232,61234,61236,61238],{"class":205,"line":16826},[203,61216,61105],{"class":213},[203,61218,160],{"class":51358},[203,61220,61110],{"class":213},[203,61222,452],{"class":51358},[203,61224,61115],{"class":2052},[203,61226,259],{"class":213},[203,61228,61120],{"class":318},[203,61230,61231],{"class":213},">小米手机\u003C\u002F",[203,61233,452],{"class":51358},[203,61235,55372],{"class":213},[203,61237,160],{"class":51358},[203,61239,51365],{"class":213},[203,61241,61242,61244,61246,61248,61250,61252,61254,61256,61259,61261,61263,61265],{"class":205,"line":16848},[203,61243,61105],{"class":213},[203,61245,160],{"class":51358},[203,61247,61110],{"class":213},[203,61249,452],{"class":51358},[203,61251,61115],{"class":2052},[203,61253,259],{"class":213},[203,61255,61120],{"class":318},[203,61257,61258],{"class":213},">黑鲨4\u003C\u002F",[203,61260,452],{"class":51358},[203,61262,55372],{"class":213},[203,61264,160],{"class":51358},[203,61266,51365],{"class":213},[203,61268,61269,61271,61273,61275,61277,61279,61281,61283,61286,61288,61290,61292],{"class":205,"line":16853},[203,61270,61105],{"class":213},[203,61272,160],{"class":51358},[203,61274,61110],{"class":213},[203,61276,452],{"class":51358},[203,61278,61115],{"class":2052},[203,61280,259],{"class":213},[203,61282,61120],{"class":318},[203,61284,61285],{"class":213},">空调\u003C\u002F",[203,61287,452],{"class":51358},[203,61289,55372],{"class":213},[203,61291,160],{"class":51358},[203,61293,51365],{"class":213},[203,61295,61296,61299,61301],{"class":205,"line":16859},[203,61297,61298],{"class":213},"        \u003C\u002F",[203,61300,1221],{"class":51358},[203,61302,51365],{"class":213},[203,61304,61305,61307,61309],{"class":205,"line":16873},[203,61306,51834],{"class":213},[203,61308,51669],{"class":51358},[203,61310,51365],{"class":213},[203,61312,61313,61315,61317],{"class":205,"line":16886},[203,61314,51399],{"class":213},[203,61316,51871],{"class":51358},[203,61318,51365],{"class":213},[203,61320,61321],{"class":205,"line":16891},[203,61322,61323],{"class":272},"        \u002F\u002F 1. 获取元素\n",[203,61325,61326,61329,61331,61333,61335,61337,61339,61342],{"class":205,"line":16905},[203,61327,61328],{"class":209},"        const",[203,61330,60663],{"class":262},[203,61332,13654],{"class":209},[203,61334,54454],{"class":213},[203,61336,54457],{"class":2052},[203,61338,214],{"class":213},[203,61340,61341],{"class":318},"'[type=search]'",[203,61343,220],{"class":213},[203,61345,61346,61348,61351,61353,61355,61357,61359,61362],{"class":205,"line":16910},[203,61347,61328],{"class":209},[203,61349,61350],{"class":262}," ul",[203,61352,13654],{"class":209},[203,61354,54454],{"class":213},[203,61356,54457],{"class":2052},[203,61358,214],{"class":213},[203,61360,61361],{"class":318},"'.result-list'",[203,61363,220],{"class":213},[203,61365,61366],{"class":205,"line":16916},[203,61367,61368],{"class":272},"        \u002F\u002F console.log(input)\n",[203,61370,61371],{"class":205,"line":16921},[203,61372,61373],{"class":272},"        \u002F\u002F 2. 监听事件 获得焦点\n",[203,61375,61376,61379,61381,61383,61386,61388,61390],{"class":205,"line":16935},[203,61377,61378],{"class":213},"        input.",[203,61380,57871],{"class":2052},[203,61382,214],{"class":213},[203,61384,61385],{"class":318},"'focus'",[203,61387,12525],{"class":213},[203,61389,54507],{"class":209},[203,61391,54510],{"class":213},[203,61393,61394],{"class":205,"line":16940},[203,61395,61396],{"class":272},"            \u002F\u002F ul显示\n",[203,61398,61399,61402,61404],{"class":205,"line":16945},[203,61400,61401],{"class":213},"            ul.style.display ",[203,61403,259],{"class":209},[203,61405,61406],{"class":318}," 'block'\n",[203,61408,61409],{"class":205,"line":16959},[203,61410,61411],{"class":272},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[203,61413,61414,61417,61419,61421,61424],{"class":205,"line":16971},[203,61415,61416],{"class":213},"            input.classList.",[203,61418,5424],{"class":2052},[203,61420,214],{"class":213},[203,61422,61423],{"class":318},"'search'",[203,61425,220],{"class":213},[203,61427,61428],{"class":205,"line":16976},[203,61429,61430],{"class":213},"        })\n",[203,61432,61433],{"class":205,"line":16989},[203,61434,61435],{"class":272},"        \u002F\u002F 3. 监听事件 失去焦点\n",[203,61437,61438,61440,61442,61444,61447,61449,61451],{"class":205,"line":16994},[203,61439,61378],{"class":213},[203,61441,57871],{"class":2052},[203,61443,214],{"class":213},[203,61445,61446],{"class":318},"'blur'",[203,61448,12525],{"class":213},[203,61450,54507],{"class":209},[203,61452,54510],{"class":213},[203,61454,61455,61457,61459],{"class":205,"line":16999},[203,61456,61401],{"class":213},[203,61458,259],{"class":209},[203,61460,61461],{"class":318}," 'none'\n",[203,61463,61464,61466,61468,61470,61472],{"class":205,"line":17004},[203,61465,61416],{"class":213},[203,61467,57064],{"class":2052},[203,61469,214],{"class":213},[203,61471,61423],{"class":318},[203,61473,220],{"class":213},[203,61475,61476],{"class":205,"line":17017},[203,61477,61430],{"class":213},[203,61479,61480,61482,61484],{"class":205,"line":17022},[203,61481,51834],{"class":213},[203,61483,51871],{"class":51358},[203,61485,51365],{"class":213},[203,61487,61488,61490,61492],{"class":205,"line":32691},[203,61489,51843],{"class":213},[203,61491,51858],{"class":51358},[203,61493,51365],{"class":213},[203,61495,61496],{"class":205,"line":32697},[203,61497,2489],{"emptyLinePlaceholder":131},[203,61499,61500,61502,61504],{"class":205,"line":32703},[203,61501,51843],{"class":213},[203,61503,50693],{"class":51358},[203,61505,51365],{"class":213},[22088,61507,61509],{"id":61508},"_3253-键盘事件","3.2.5.3 键盘事件",[19,61511,61512],{},"评论字数统计案例",[19,61514,61515],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,61517,61518],{},"牢记focus伪类选择器",[51402,61520],{"charSet":61521},"UTF-8",[51402,61523],{"name":61524,"content":61525},"viewport","width=device-width, initial-scale=1.0",[51465,61527,61528],{},"Document",[5216,61530,61531],{},"\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",[53879,61533],{"type":5277},[1221,61535,61536,61539],{},[160,61537,61538],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[160,61540,61541],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[194,61543,61545],{"className":50691,"code":61544,"language":50693,"meta":27,"style":27},"\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",[200,61546,61547,61557,61571,61575,61583,61597,61617,61637,61650,61658,61665,61678,61692,61702,61712,61716,61720,61727,61739,61751,61763,61775,61804,61817,61821,61825,61834,61845,61857,61868,61879,61891,61902,61914,61930,61942,61946,61950,61961,61972,61982,61994,61998,62002,62010,62021,62031,62042,62054,62067,62079,62091,62095,62099,62108,62120,62131,62144,62155,62169,62173,62177,62184,62196,62208,62218,62222,62226,62235,62247,62257,62261,62265,62276,62286,62305,62318,62322,62326,62336,62346,62350,62354,62365,62376,62388,62400,62404,62408,62419,62430,62444,62448,62452,62463,62473,62485,62489,62497,62505,62509,62517,62532,62551,62591,62604,62612,62626,62646,62654,62669,62692,62710,62725,62745,62765,62785,62793,62801,62809,62817,62837,62857,62862,62879,62888,62892,62897,62913,62921,62925,62930,62947,62952,62977,62981,62985,62990,62995,63003,63011,63015],{"__ignoreMap":27},[203,61548,61549,61551,61553,61555],{"class":205,"line":206},[203,61550,51355],{"class":213},[203,61552,51359],{"class":51358},[203,61554,51362],{"class":2052},[203,61556,51365],{"class":213},[203,61558,61559,61561,61563,61565,61567,61569],{"class":205,"line":124},[203,61560,1124],{"class":213},[203,61562,50693],{"class":51358},[203,61564,51374],{"class":2052},[203,61566,259],{"class":213},[203,61568,51379],{"class":318},[203,61570,51365],{"class":213},[203,61572,61573],{"class":205,"line":1269},[203,61574,2489],{"emptyLinePlaceholder":131},[203,61576,61577,61579,61581],{"class":205,"line":1284},[203,61578,1124],{"class":213},[203,61580,51392],{"class":51358},[203,61582,51365],{"class":213},[203,61584,61585,61587,61589,61591,61593,61595],{"class":205,"line":1290},[203,61586,52202],{"class":213},[203,61588,51402],{"class":51358},[203,61590,51405],{"class":2052},[203,61592,259],{"class":213},[203,61594,51410],{"class":318},[203,61596,51365],{"class":213},[203,61598,61599,61601,61603,61605,61607,61609,61611,61613,61615],{"class":205,"line":1304},[203,61600,52202],{"class":213},[203,61602,51402],{"class":51358},[203,61604,51421],{"class":2052},[203,61606,259],{"class":213},[203,61608,51426],{"class":318},[203,61610,51429],{"class":2052},[203,61612,259],{"class":213},[203,61614,51434],{"class":318},[203,61616,51365],{"class":213},[203,61618,61619,61621,61623,61625,61627,61629,61631,61633,61635],{"class":205,"line":1310},[203,61620,52202],{"class":213},[203,61622,51402],{"class":51358},[203,61624,15010],{"class":2052},[203,61626,259],{"class":213},[203,61628,51449],{"class":318},[203,61630,51429],{"class":2052},[203,61632,259],{"class":213},[203,61634,51456],{"class":318},[203,61636,51365],{"class":213},[203,61638,61639,61641,61643,61646,61648],{"class":205,"line":1401},[203,61640,52202],{"class":213},[203,61642,51465],{"class":51358},[203,61644,61645],{"class":213},">评论回车发布\u003C\u002F",[203,61647,51465],{"class":51358},[203,61649,51365],{"class":213},[203,61651,61652,61654,61656],{"class":205,"line":1407},[203,61653,52202],{"class":213},[203,61655,5216],{"class":51358},[203,61657,51365],{"class":213},[203,61659,61660,61663],{"class":205,"line":1419},[203,61661,61662],{"class":2052},"    .wrapper",[203,61664,15662],{"class":213},[203,61666,61667,61670,61672,61674,61676],{"class":205,"line":1701},[203,61668,61669],{"class":262},"      min-width",[203,61671,51495],{"class":213},[203,61673,4076],{"class":262},[203,61675,51550],{"class":209},[203,61677,1380],{"class":213},[203,61679,61680,61683,61685,61688,61690],{"class":205,"line":1706},[203,61681,61682],{"class":262},"      max-width",[203,61684,51495],{"class":213},[203,61686,61687],{"class":262},"800",[203,61689,51550],{"class":209},[203,61691,1380],{"class":213},[203,61693,61694,61696,61698,61700],{"class":205,"line":1712},[203,61695,55067],{"class":262},[203,61697,51495],{"class":213},[203,61699,51535],{"class":262},[203,61701,1380],{"class":213},[203,61703,61704,61706,61708,61710],{"class":205,"line":1717},[203,61705,55078],{"class":262},[203,61707,51495],{"class":213},[203,61709,51638],{"class":262},[203,61711,1380],{"class":213},[203,61713,61714],{"class":205,"line":1731},[203,61715,2276],{"class":213},[203,61717,61718],{"class":205,"line":1736},[203,61719,2489],{"emptyLinePlaceholder":131},[203,61721,61722,61725],{"class":205,"line":1742},[203,61723,61724],{"class":2052},"    .avatar",[203,61726,15662],{"class":213},[203,61728,61729,61731,61733,61735,61737],{"class":205,"line":1763},[203,61730,54829],{"class":262},[203,61732,51495],{"class":213},[203,61734,821],{"class":262},[203,61736,51550],{"class":209},[203,61738,1380],{"class":213},[203,61740,61741,61743,61745,61747,61749],{"class":205,"line":1768},[203,61742,54843],{"class":262},[203,61744,51495],{"class":213},[203,61746,821],{"class":262},[203,61748,51550],{"class":209},[203,61750,1380],{"class":213},[203,61752,61753,61755,61757,61759,61761],{"class":205,"line":1782},[203,61754,55192],{"class":262},[203,61756,51495],{"class":213},[203,61758,870],{"class":262},[203,61760,542],{"class":209},[203,61762,1380],{"class":213},[203,61764,61765,61768,61770,61773],{"class":205,"line":1787},[203,61766,61767],{"class":262},"      overflow",[203,61769,51495],{"class":213},[203,61771,61772],{"class":262},"hidden",[203,61774,1380],{"class":213},[203,61776,61777,61780,61782,61785,61787,61790,61792,61795,61797,61799,61802],{"class":205,"line":1816},[203,61778,61779],{"class":262},"      background",[203,61781,51495],{"class":213},[203,61783,61784],{"class":262},"url",[203,61786,214],{"class":213},[203,61788,61789],{"class":5306},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[203,61791,13804],{"class":213},[203,61793,61794],{"class":262},"no-repeat",[203,61796,17234],{"class":262},[203,61798,25036],{"class":213},[203,61800,61801],{"class":262},"cover",[203,61803,1380],{"class":213},[203,61805,61806,61809,61811,61813,61815],{"class":205,"line":1821},[203,61807,61808],{"class":262},"      margin-right",[203,61810,51495],{"class":213},[203,61812,914],{"class":262},[203,61814,51550],{"class":209},[203,61816,1380],{"class":213},[203,61818,61819],{"class":205,"line":1838},[203,61820,2276],{"class":213},[203,61822,61823],{"class":205,"line":1843},[203,61824,2489],{"emptyLinePlaceholder":131},[203,61826,61827,61829,61832],{"class":205,"line":1848},[203,61828,61662],{"class":2052},[203,61830,61831],{"class":51358}," textarea",[203,61833,15662],{"class":213},[203,61835,61836,61839,61841,61843],{"class":205,"line":1853},[203,61837,61838],{"class":262},"      outline",[203,61840,51495],{"class":213},[203,61842,54795],{"class":262},[203,61844,1380],{"class":213},[203,61846,61847,61850,61852,61855],{"class":205,"line":1867},[203,61848,61849],{"class":262},"      border-color",[203,61851,51495],{"class":213},[203,61853,61854],{"class":262},"transparent",[203,61856,1380],{"class":213},[203,61858,61859,61862,61864,61866],{"class":205,"line":1872},[203,61860,61861],{"class":262},"      resize",[203,61863,51495],{"class":213},[203,61865,54795],{"class":262},[203,61867,1380],{"class":213},[203,61869,61870,61872,61874,61877],{"class":205,"line":2666},[203,61871,61779],{"class":262},[203,61873,51495],{"class":213},[203,61875,61876],{"class":262},"#f5f5f5",[203,61878,1380],{"class":213},[203,61880,61881,61883,61885,61887,61889],{"class":205,"line":2680},[203,61882,55192],{"class":262},[203,61884,51495],{"class":213},[203,61886,507],{"class":262},[203,61888,51550],{"class":209},[203,61890,1380],{"class":213},[203,61892,61893,61896,61898,61900],{"class":205,"line":2688},[203,61894,61895],{"class":262},"      flex",[203,61897,51495],{"class":213},[203,61899,431],{"class":262},[203,61901,1380],{"class":213},[203,61903,61904,61906,61908,61910,61912],{"class":205,"line":2693},[203,61905,54753],{"class":262},[203,61907,51495],{"class":213},[203,61909,660],{"class":262},[203,61911,51550],{"class":209},[203,61913,1380],{"class":213},[203,61915,61916,61919,61921,61923,61926,61928],{"class":205,"line":2699},[203,61917,61918],{"class":262},"      transition",[203,61920,51495],{"class":213},[203,61922,28179],{"class":262},[203,61924,61925],{"class":262}," 0.5",[203,61927,909],{"class":209},[203,61929,1380],{"class":213},[203,61931,61932,61934,61936,61938,61940],{"class":205,"line":2705},[203,61933,54843],{"class":262},[203,61935,51495],{"class":213},[203,61937,1165],{"class":262},[203,61939,51550],{"class":209},[203,61941,1380],{"class":213},[203,61943,61944],{"class":205,"line":2710},[203,61945,2276],{"class":213},[203,61947,61948],{"class":205,"line":8038},[203,61949,2489],{"emptyLinePlaceholder":131},[203,61951,61952,61954,61956,61959],{"class":205,"line":8062},[203,61953,61662],{"class":2052},[203,61955,61831],{"class":51358},[203,61957,61958],{"class":2052},":focus",[203,61960,15662],{"class":213},[203,61962,61963,61965,61967,61970],{"class":205,"line":8067},[203,61964,61849],{"class":262},[203,61966,51495],{"class":213},[203,61968,61969],{"class":262},"#e4e4e4",[203,61971,1380],{"class":213},[203,61973,61974,61976,61978,61980],{"class":205,"line":8073},[203,61975,61779],{"class":262},[203,61977,51495],{"class":213},[203,61979,60900],{"class":262},[203,61981,1380],{"class":213},[203,61983,61984,61986,61988,61990,61992],{"class":205,"line":8100},[203,61985,54843],{"class":262},[203,61987,51495],{"class":213},[203,61989,870],{"class":262},[203,61991,51550],{"class":209},[203,61993,1380],{"class":213},[203,61995,61996],{"class":205,"line":8105},[203,61997,2276],{"class":213},[203,61999,62000],{"class":205,"line":8111},[203,62001,2489],{"emptyLinePlaceholder":131},[203,62003,62004,62006,62008],{"class":205,"line":8123},[203,62005,61662],{"class":2052},[203,62007,57525],{"class":51358},[203,62009,15662],{"class":213},[203,62011,62012,62014,62016,62019],{"class":205,"line":8135},[203,62013,61779],{"class":262},[203,62015,51495],{"class":213},[203,62017,62018],{"class":262},"#00aeec",[203,62020,1380],{"class":213},[203,62022,62023,62025,62027,62029],{"class":205,"line":8147},[203,62024,57474],{"class":262},[203,62026,51495],{"class":213},[203,62028,60900],{"class":262},[203,62030,1380],{"class":213},[203,62032,62033,62036,62038,62040],{"class":205,"line":9806},[203,62034,62035],{"class":262},"      border",[203,62037,51495],{"class":213},[203,62039,54795],{"class":262},[203,62041,1380],{"class":213},[203,62043,62044,62046,62048,62050,62052],{"class":205,"line":9831},[203,62045,55192],{"class":262},[203,62047,51495],{"class":213},[203,62049,507],{"class":262},[203,62051,51550],{"class":209},[203,62053,1380],{"class":213},[203,62055,62056,62059,62061,62063,62065],{"class":205,"line":9854},[203,62057,62058],{"class":262},"      margin-left",[203,62060,51495],{"class":213},[203,62062,660],{"class":262},[203,62064,51550],{"class":209},[203,62066,1380],{"class":213},[203,62068,62069,62071,62073,62075,62077],{"class":205,"line":9878},[203,62070,54829],{"class":262},[203,62072,51495],{"class":213},[203,62074,570],{"class":262},[203,62076,51550],{"class":209},[203,62078,1380],{"class":213},[203,62080,62081,62084,62086,62089],{"class":205,"line":9883},[203,62082,62083],{"class":262},"      cursor",[203,62085,51495],{"class":213},[203,62087,62088],{"class":262},"pointer",[203,62090,1380],{"class":213},[203,62092,62093],{"class":205,"line":9888},[203,62094,2276],{"class":213},[203,62096,62097],{"class":205,"line":9893},[203,62098,2489],{"emptyLinePlaceholder":131},[203,62100,62101,62103,62106],{"class":205,"line":9902},[203,62102,61662],{"class":2052},[203,62104,62105],{"class":2052}," .total",[203,62107,15662],{"class":213},[203,62109,62110,62112,62114,62116,62118],{"class":205,"line":9907},[203,62111,61808],{"class":262},[203,62113,51495],{"class":213},[203,62115,826],{"class":262},[203,62117,51550],{"class":209},[203,62119,1380],{"class":213},[203,62121,62122,62124,62126,62129],{"class":205,"line":9913},[203,62123,57474],{"class":262},[203,62125,51495],{"class":213},[203,62127,62128],{"class":262},"#999",[203,62130,1380],{"class":213},[203,62132,62133,62136,62138,62140,62142],{"class":205,"line":9934},[203,62134,62135],{"class":262},"      margin-top",[203,62137,51495],{"class":213},[203,62139,533],{"class":262},[203,62141,51550],{"class":209},[203,62143,1380],{"class":213},[203,62145,62146,62149,62151,62153],{"class":205,"line":9940},[203,62147,62148],{"class":262},"      opacity",[203,62150,51495],{"class":213},[203,62152,405],{"class":262},[203,62154,1380],{"class":213},[203,62156,62157,62159,62161,62163,62165,62167],{"class":205,"line":9954},[203,62158,61918],{"class":262},[203,62160,51495],{"class":213},[203,62162,28179],{"class":262},[203,62164,61925],{"class":262},[203,62166,909],{"class":209},[203,62168,1380],{"class":213},[203,62170,62171],{"class":205,"line":9960},[203,62172,2276],{"class":213},[203,62174,62175],{"class":205,"line":9987},[203,62176,2489],{"emptyLinePlaceholder":131},[203,62178,62179,62182],{"class":205,"line":9996},[203,62180,62181],{"class":2052},"    .list",[203,62183,15662],{"class":213},[203,62185,62186,62188,62190,62192,62194],{"class":205,"line":10002},[203,62187,61669],{"class":262},[203,62189,51495],{"class":213},[203,62191,4076],{"class":262},[203,62193,51550],{"class":209},[203,62195,1380],{"class":213},[203,62197,62198,62200,62202,62204,62206],{"class":205,"line":10010},[203,62199,61682],{"class":262},[203,62201,51495],{"class":213},[203,62203,61687],{"class":262},[203,62205,51550],{"class":209},[203,62207,1380],{"class":213},[203,62209,62210,62212,62214,62216],{"class":205,"line":10015},[203,62211,55067],{"class":262},[203,62213,51495],{"class":213},[203,62215,51535],{"class":262},[203,62217,1380],{"class":213},[203,62219,62220],{"class":205,"line":16694},[203,62221,2276],{"class":213},[203,62223,62224],{"class":205,"line":16700},[203,62225,2489],{"emptyLinePlaceholder":131},[203,62227,62228,62230,62233],{"class":205,"line":16723},[203,62229,62181],{"class":2052},[203,62231,62232],{"class":2052}," .item",[203,62234,15662],{"class":213},[203,62236,62237,62239,62241,62243,62245],{"class":205,"line":16729},[203,62238,54829],{"class":262},[203,62240,51495],{"class":213},[203,62242,525],{"class":262},[203,62244,542],{"class":209},[203,62246,1380],{"class":213},[203,62248,62249,62251,62253,62255],{"class":205,"line":16752},[203,62250,55067],{"class":262},[203,62252,51495],{"class":213},[203,62254,51535],{"class":262},[203,62256,1380],{"class":213},[203,62258,62259],{"class":205,"line":16766},[203,62260,2276],{"class":213},[203,62262,62263],{"class":205,"line":16786},[203,62264,2489],{"emptyLinePlaceholder":131},[203,62266,62267,62269,62271,62274],{"class":205,"line":16792},[203,62268,62181],{"class":2052},[203,62270,62232],{"class":2052},[203,62272,62273],{"class":2052}," .info",[203,62275,15662],{"class":213},[203,62277,62278,62280,62282,62284],{"class":205,"line":16803},[203,62279,61895],{"class":262},[203,62281,51495],{"class":213},[203,62283,431],{"class":262},[203,62285,1380],{"class":213},[203,62287,62288,62291,62293,62295,62297,62300,62303],{"class":205,"line":16826},[203,62289,62290],{"class":262},"      border-bottom",[203,62292,51495],{"class":213},[203,62294,431],{"class":262},[203,62296,51550],{"class":209},[203,62298,62299],{"class":262}," dashed",[203,62301,62302],{"class":262}," #e4e4e4",[203,62304,1380],{"class":213},[203,62306,62307,62310,62312,62314,62316],{"class":205,"line":16848},[203,62308,62309],{"class":262},"      padding-bottom",[203,62311,51495],{"class":213},[203,62313,660],{"class":262},[203,62315,51550],{"class":209},[203,62317,1380],{"class":213},[203,62319,62320],{"class":205,"line":16853},[203,62321,2276],{"class":213},[203,62323,62324],{"class":205,"line":16859},[203,62325,2489],{"emptyLinePlaceholder":131},[203,62327,62328,62330,62332,62334],{"class":205,"line":16873},[203,62329,62181],{"class":2052},[203,62331,62232],{"class":2052},[203,62333,6915],{"class":51358},[203,62335,15662],{"class":213},[203,62337,62338,62340,62342,62344],{"class":205,"line":16886},[203,62339,54764],{"class":262},[203,62341,51495],{"class":213},[203,62343,405],{"class":262},[203,62345,1380],{"class":213},[203,62347,62348],{"class":205,"line":16891},[203,62349,2276],{"class":213},[203,62351,62352],{"class":205,"line":16905},[203,62353,2489],{"emptyLinePlaceholder":131},[203,62355,62356,62358,62360,62363],{"class":205,"line":16910},[203,62357,62181],{"class":2052},[203,62359,62232],{"class":2052},[203,62361,62362],{"class":2052}," .name",[203,62364,15662],{"class":213},[203,62366,62367,62369,62371,62374],{"class":205,"line":16916},[203,62368,57474],{"class":262},[203,62370,51495],{"class":213},[203,62372,62373],{"class":262},"#FB7299",[203,62375,1380],{"class":213},[203,62377,62378,62380,62382,62384,62386],{"class":205,"line":16921},[203,62379,54980],{"class":262},[203,62381,51495],{"class":213},[203,62383,763],{"class":262},[203,62385,51550],{"class":209},[203,62387,1380],{"class":213},[203,62389,62390,62393,62395,62398],{"class":205,"line":16935},[203,62391,62392],{"class":262},"      font-weight",[203,62394,51495],{"class":213},[203,62396,62397],{"class":262},"bold",[203,62399,1380],{"class":213},[203,62401,62402],{"class":205,"line":16940},[203,62403,2276],{"class":213},[203,62405,62406],{"class":205,"line":16945},[203,62407,2489],{"emptyLinePlaceholder":131},[203,62409,62410,62412,62414,62417],{"class":205,"line":16959},[203,62411,62181],{"class":2052},[203,62413,62232],{"class":2052},[203,62415,62416],{"class":2052}," .text",[203,62418,15662],{"class":213},[203,62420,62421,62423,62425,62428],{"class":205,"line":16971},[203,62422,57474],{"class":262},[203,62424,51495],{"class":213},[203,62426,62427],{"class":262},"#333",[203,62429,1380],{"class":213},[203,62431,62432,62434,62436,62438,62440,62442],{"class":205,"line":16976},[203,62433,54753],{"class":262},[203,62435,51495],{"class":213},[203,62437,660],{"class":262},[203,62439,51550],{"class":209},[203,62441,4182],{"class":262},[203,62443,1380],{"class":213},[203,62445,62446],{"class":205,"line":16989},[203,62447,2276],{"class":213},[203,62449,62450],{"class":205,"line":16994},[203,62451,2489],{"emptyLinePlaceholder":131},[203,62453,62454,62456,62458,62461],{"class":205,"line":16999},[203,62455,62181],{"class":2052},[203,62457,62232],{"class":2052},[203,62459,62460],{"class":2052}," .time",[203,62462,15662],{"class":213},[203,62464,62465,62467,62469,62471],{"class":205,"line":17004},[203,62466,57474],{"class":262},[203,62468,51495],{"class":213},[203,62470,62128],{"class":262},[203,62472,1380],{"class":213},[203,62474,62475,62477,62479,62481,62483],{"class":205,"line":17017},[203,62476,54980],{"class":262},[203,62478,51495],{"class":213},[203,62480,712],{"class":262},[203,62482,51550],{"class":209},[203,62484,1380],{"class":213},[203,62486,62487],{"class":205,"line":17022},[203,62488,2276],{"class":213},[203,62490,62491,62493,62495],{"class":205,"line":32691},[203,62492,52475],{"class":213},[203,62494,5216],{"class":51358},[203,62496,51365],{"class":213},[203,62498,62499,62501,62503],{"class":205,"line":32697},[203,62500,51843],{"class":213},[203,62502,51392],{"class":51358},[203,62504,51365],{"class":213},[203,62506,62507],{"class":205,"line":32703},[203,62508,2489],{"emptyLinePlaceholder":131},[203,62510,62511,62513,62515],{"class":205,"line":32709},[203,62512,1124],{"class":213},[203,62514,51858],{"class":51358},[203,62516,51365],{"class":213},[203,62518,62519,62521,62523,62525,62527,62530],{"class":205,"line":32715},[203,62520,52202],{"class":213},[203,62522,51669],{"class":51358},[203,62524,53544],{"class":2052},[203,62526,259],{"class":213},[203,62528,62529],{"class":318},"\"wrapper\"",[203,62531,51365],{"class":213},[203,62533,62534,62536,62538,62540,62542,62545,62547,62549],{"class":205,"line":32726},[203,62535,51399],{"class":213},[203,62537,655],{"class":51358},[203,62539,53544],{"class":2052},[203,62541,259],{"class":213},[203,62543,62544],{"class":318},"\"avatar\"",[203,62546,55372],{"class":213},[203,62548,655],{"class":51358},[203,62550,51365],{"class":213},[203,62552,62553,62555,62557,62559,62561,62564,62566,62568,62571,62573,62575,62577,62580,62582,62585,62587,62589],{"class":205,"line":32732},[203,62554,51399],{"class":213},[203,62556,54346],{"class":51358},[203,62558,15049],{"class":2052},[203,62560,259],{"class":213},[203,62562,62563],{"class":318},"\"tx\"",[203,62565,61078],{"class":2052},[203,62567,259],{"class":213},[203,62569,62570],{"class":318},"\"发一条友善的评论\"",[203,62572,54369],{"class":2052},[203,62574,259],{"class":213},[203,62576,3790],{"class":318},[203,62578,62579],{"class":2052}," maxlength",[203,62581,259],{"class":213},[203,62583,62584],{"class":318},"\"200\"",[203,62586,55372],{"class":213},[203,62588,54346],{"class":51358},[203,62590,51365],{"class":213},[203,62592,62593,62595,62597,62600,62602],{"class":205,"line":32752},[203,62594,51399],{"class":213},[203,62596,53945],{"class":51358},[203,62598,62599],{"class":213},">发布\u003C\u002F",[203,62601,53945],{"class":51358},[203,62603,51365],{"class":213},[203,62605,62606,62608,62610],{"class":205,"line":32758},[203,62607,52475],{"class":213},[203,62609,51669],{"class":51358},[203,62611,51365],{"class":213},[203,62613,62614,62616,62618,62620,62622,62624],{"class":205,"line":32769},[203,62615,52202],{"class":213},[203,62617,51669],{"class":51358},[203,62619,53544],{"class":2052},[203,62621,259],{"class":213},[203,62623,62529],{"class":318},[203,62625,51365],{"class":213},[203,62627,62628,62630,62632,62634,62636,62639,62642,62644],{"class":205,"line":32775},[203,62629,51399],{"class":213},[203,62631,203],{"class":51358},[203,62633,53544],{"class":2052},[203,62635,259],{"class":213},[203,62637,62638],{"class":318},"\"total\"",[203,62640,62641],{"class":213},">0\u002F200字\u003C\u002F",[203,62643,203],{"class":51358},[203,62645,51365],{"class":213},[203,62647,62648,62650,62652],{"class":205,"line":32781},[203,62649,52475],{"class":213},[203,62651,51669],{"class":51358},[203,62653,51365],{"class":213},[203,62655,62656,62658,62660,62662,62664,62667],{"class":205,"line":32787},[203,62657,52202],{"class":213},[203,62659,51669],{"class":51358},[203,62661,53544],{"class":2052},[203,62663,259],{"class":213},[203,62665,62666],{"class":318},"\"list\"",[203,62668,51365],{"class":213},[203,62670,62671,62673,62675,62677,62679,62682,62685,62687,62690],{"class":205,"line":32793},[203,62672,51399],{"class":213},[203,62674,51669],{"class":51358},[203,62676,53544],{"class":2052},[203,62678,259],{"class":213},[203,62680,62681],{"class":318},"\"item\"",[203,62683,62684],{"class":2052}," style",[203,62686,259],{"class":213},[203,62688,62689],{"class":318},"\"display: none;\"",[203,62691,51365],{"class":213},[203,62693,62694,62696,62698,62700,62702,62704,62706,62708],{"class":205,"line":32799},[203,62695,55292],{"class":213},[203,62697,655],{"class":51358},[203,62699,53544],{"class":2052},[203,62701,259],{"class":213},[203,62703,62544],{"class":318},[203,62705,55372],{"class":213},[203,62707,655],{"class":51358},[203,62709,51365],{"class":213},[203,62711,62712,62714,62716,62718,62720,62723],{"class":205,"line":32805},[203,62713,55292],{"class":213},[203,62715,51669],{"class":51358},[203,62717,53544],{"class":2052},[203,62719,259],{"class":213},[203,62721,62722],{"class":318},"\"info\"",[203,62724,51365],{"class":213},[203,62726,62727,62729,62731,62733,62735,62738,62741,62743],{"class":205,"line":32811},[203,62728,55360],{"class":213},[203,62730,19],{"class":51358},[203,62732,53544],{"class":2052},[203,62734,259],{"class":213},[203,62736,62737],{"class":318},"\"name\"",[203,62739,62740],{"class":213},">清风徐来\u003C\u002F",[203,62742,19],{"class":51358},[203,62744,51365],{"class":213},[203,62746,62747,62749,62751,62753,62755,62758,62761,62763],{"class":205,"line":32831},[203,62748,55360],{"class":213},[203,62750,19],{"class":51358},[203,62752,53544],{"class":2052},[203,62754,259],{"class":213},[203,62756,62757],{"class":318},"\"text\"",[203,62759,62760],{"class":213},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[203,62762,19],{"class":51358},[203,62764,51365],{"class":213},[203,62766,62767,62769,62771,62773,62775,62778,62781,62783],{"class":205,"line":32837},[203,62768,55360],{"class":213},[203,62770,19],{"class":51358},[203,62772,53544],{"class":2052},[203,62774,259],{"class":213},[203,62776,62777],{"class":318},"\"time\"",[203,62779,62780],{"class":213},">2022-10-10 20:29:21\u003C\u002F",[203,62782,19],{"class":51358},[203,62784,51365],{"class":213},[203,62786,62787,62789,62791],{"class":205,"line":32853},[203,62788,55465],{"class":213},[203,62790,51669],{"class":51358},[203,62792,51365],{"class":213},[203,62794,62795,62797,62799],{"class":205,"line":32859},[203,62796,51834],{"class":213},[203,62798,51669],{"class":51358},[203,62800,51365],{"class":213},[203,62802,62803,62805,62807],{"class":205,"line":32873},[203,62804,52475],{"class":213},[203,62806,51669],{"class":51358},[203,62808,51365],{"class":213},[203,62810,62811,62813,62815],{"class":205,"line":32879},[203,62812,52202],{"class":213},[203,62814,51871],{"class":51358},[203,62816,51365],{"class":213},[203,62818,62819,62821,62824,62826,62828,62830,62832,62835],{"class":205,"line":32894},[203,62820,11311],{"class":209},[203,62822,62823],{"class":262}," tx",[203,62825,13654],{"class":209},[203,62827,54454],{"class":213},[203,62829,54457],{"class":2052},[203,62831,214],{"class":213},[203,62833,62834],{"class":318},"'#tx'",[203,62836,220],{"class":213},[203,62838,62839,62841,62844,62846,62848,62850,62852,62855],{"class":205,"line":32900},[203,62840,11311],{"class":209},[203,62842,62843],{"class":262}," total",[203,62845,13654],{"class":209},[203,62847,54454],{"class":213},[203,62849,54457],{"class":2052},[203,62851,214],{"class":213},[203,62853,62854],{"class":318},"'.total'",[203,62856,220],{"class":213},[203,62858,62859],{"class":205,"line":32909},[203,62860,62861],{"class":272},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[203,62863,62864,62867,62869,62871,62873,62875,62877],{"class":205,"line":32915},[203,62865,62866],{"class":213},"    tx.",[203,62868,57871],{"class":2052},[203,62870,214],{"class":213},[203,62872,61385],{"class":318},[203,62874,12525],{"class":213},[203,62876,54507],{"class":209},[203,62878,54510],{"class":213},[203,62880,62881,62884,62886],{"class":205,"line":32924},[203,62882,62883],{"class":213},"      total.style.opacity ",[203,62885,259],{"class":209},[203,62887,55757],{"class":262},[203,62889,62890],{"class":205,"line":32930},[203,62891,33519],{"class":213},[203,62893,62894],{"class":205,"line":32936},[203,62895,62896],{"class":272},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[203,62898,62899,62901,62903,62905,62907,62909,62911],{"class":205,"line":32945},[203,62900,62866],{"class":213},[203,62902,57871],{"class":2052},[203,62904,214],{"class":213},[203,62906,61446],{"class":318},[203,62908,12525],{"class":213},[203,62910,54507],{"class":209},[203,62912,54510],{"class":213},[203,62914,62915,62917,62919],{"class":205,"line":32951},[203,62916,62883],{"class":213},[203,62918,259],{"class":209},[203,62920,47391],{"class":262},[203,62922,62923],{"class":205,"line":32962},[203,62924,33519],{"class":213},[203,62926,62927],{"class":205,"line":32968},[203,62928,62929],{"class":272},"    \u002F\u002F 3. 检测用户输入\n",[203,62931,62932,62934,62936,62938,62941,62943,62945],{"class":205,"line":32987},[203,62933,62866],{"class":213},[203,62935,57871],{"class":2052},[203,62937,214],{"class":213},[203,62939,62940],{"class":318},"'input'",[203,62942,12525],{"class":213},[203,62944,54507],{"class":209},[203,62946,54510],{"class":213},[203,62948,62949],{"class":205,"line":32993},[203,62950,62951],{"class":272},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[203,62953,62954,62957,62959,62962,62965,62967,62970,62972,62974],{"class":205,"line":33004},[203,62955,62956],{"class":213},"      total.innerHTML ",[203,62958,259],{"class":209},[203,62960,62961],{"class":318}," `${",[203,62963,62964],{"class":213},"tx",[203,62966,772],{"class":318},[203,62968,62969],{"class":213},"value",[203,62971,772],{"class":318},[203,62973,52026],{"class":262},[203,62975,62976],{"class":318},"}\u002F200字`\n",[203,62978,62979],{"class":205,"line":33010},[203,62980,33519],{"class":213},[203,62982,62983],{"class":205,"line":33030},[203,62984,2489],{"emptyLinePlaceholder":131},[203,62986,62987],{"class":205,"line":33046},[203,62988,62989],{"class":272},"    \u002F\u002F const str = 'andy'\n",[203,62991,62992],{"class":205,"line":33052},[203,62993,62994],{"class":272},"    \u002F\u002F console.log(str.length)\n",[203,62996,62997,62999,63001],{"class":205,"line":33066},[203,62998,52475],{"class":213},[203,63000,51871],{"class":51358},[203,63002,51365],{"class":213},[203,63004,63005,63007,63009],{"class":205,"line":33072},[203,63006,51843],{"class":213},[203,63008,51858],{"class":51358},[203,63010,51365],{"class":213},[203,63012,63013],{"class":205,"line":33078},[203,63014,2489],{"emptyLinePlaceholder":131},[203,63016,63017,63019,63021],{"class":205,"line":33089},[203,63018,51843],{"class":213},[203,63020,50693],{"class":51358},[203,63022,51365],{"class":213},[22088,63024,63026],{"id":63025},"_3254-change事件","3.2.5.4 change事件",[19,63028,63029],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63031,63032],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63034,63035],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[194,63037,63039],{"className":50691,"code":63038,"language":50693,"meta":27,"style":27},"\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",[200,63040,63041,63051,63065,63069,63077,63091,63111,63123,63131,63135,63143,63157,63165,63183,63201,63213,63217,63225,63233,63237],{"__ignoreMap":27},[203,63042,63043,63045,63047,63049],{"class":205,"line":206},[203,63044,51355],{"class":213},[203,63046,51359],{"class":51358},[203,63048,51362],{"class":2052},[203,63050,51365],{"class":213},[203,63052,63053,63055,63057,63059,63061,63063],{"class":205,"line":124},[203,63054,1124],{"class":213},[203,63056,50693],{"class":51358},[203,63058,51374],{"class":2052},[203,63060,259],{"class":213},[203,63062,51379],{"class":318},[203,63064,51365],{"class":213},[203,63066,63067],{"class":205,"line":1269},[203,63068,2489],{"emptyLinePlaceholder":131},[203,63070,63071,63073,63075],{"class":205,"line":1284},[203,63072,1124],{"class":213},[203,63074,51392],{"class":51358},[203,63076,51365],{"class":213},[203,63078,63079,63081,63083,63085,63087,63089],{"class":205,"line":1290},[203,63080,52202],{"class":213},[203,63082,51402],{"class":51358},[203,63084,51405],{"class":2052},[203,63086,259],{"class":213},[203,63088,51410],{"class":318},[203,63090,51365],{"class":213},[203,63092,63093,63095,63097,63099,63101,63103,63105,63107,63109],{"class":205,"line":1304},[203,63094,52202],{"class":213},[203,63096,51402],{"class":51358},[203,63098,15010],{"class":2052},[203,63100,259],{"class":213},[203,63102,51449],{"class":318},[203,63104,51429],{"class":2052},[203,63106,259],{"class":213},[203,63108,51456],{"class":318},[203,63110,51365],{"class":213},[203,63112,63113,63115,63117,63119,63121],{"class":205,"line":1310},[203,63114,52202],{"class":213},[203,63116,51465],{"class":51358},[203,63118,51468],{"class":213},[203,63120,51465],{"class":51358},[203,63122,51365],{"class":213},[203,63124,63125,63127,63129],{"class":205,"line":1401},[203,63126,51843],{"class":213},[203,63128,51392],{"class":51358},[203,63130,51365],{"class":213},[203,63132,63133],{"class":205,"line":1407},[203,63134,2489],{"emptyLinePlaceholder":131},[203,63136,63137,63139,63141],{"class":205,"line":1419},[203,63138,1124],{"class":213},[203,63140,51858],{"class":51358},[203,63142,51365],{"class":213},[203,63144,63145,63147,63149,63151,63153,63155],{"class":205,"line":1701},[203,63146,52202],{"class":213},[203,63148,53879],{"class":51358},[203,63150,53882],{"class":2052},[203,63152,259],{"class":213},[203,63154,62757],{"class":318},[203,63156,51365],{"class":213},[203,63158,63159,63161,63163],{"class":205,"line":1706},[203,63160,52202],{"class":213},[203,63162,51871],{"class":51358},[203,63164,51365],{"class":213},[203,63166,63167,63169,63171,63173,63175,63177,63179,63181],{"class":205,"line":1712},[203,63168,11311],{"class":209},[203,63170,60663],{"class":262},[203,63172,13654],{"class":209},[203,63174,54454],{"class":213},[203,63176,54457],{"class":2052},[203,63178,214],{"class":213},[203,63180,62940],{"class":318},[203,63182,220],{"class":213},[203,63184,63185,63188,63190,63192,63195,63197,63199],{"class":205,"line":1717},[203,63186,63187],{"class":213},"    input.",[203,63189,57871],{"class":2052},[203,63191,214],{"class":213},[203,63193,63194],{"class":318},"'change'",[203,63196,12525],{"class":213},[203,63198,54507],{"class":209},[203,63200,54510],{"class":213},[203,63202,63203,63205,63207,63209,63211],{"class":205,"line":1731},[203,63204,58302],{"class":213},[203,63206,58305],{"class":2052},[203,63208,214],{"class":213},[203,63210,807],{"class":262},[203,63212,220],{"class":213},[203,63214,63215],{"class":205,"line":1736},[203,63216,33519],{"class":213},[203,63218,63219,63221,63223],{"class":205,"line":1742},[203,63220,52475],{"class":213},[203,63222,51871],{"class":51358},[203,63224,51365],{"class":213},[203,63226,63227,63229,63231],{"class":205,"line":1763},[203,63228,51843],{"class":213},[203,63230,51858],{"class":51358},[203,63232,51365],{"class":213},[203,63234,63235],{"class":205,"line":1768},[203,63236,2489],{"emptyLinePlaceholder":131},[203,63238,63239,63241,63243],{"class":205,"line":1782},[203,63240,51843],{"class":213},[203,63242,50693],{"class":51358},[203,63244,51365],{"class":213},[19,63246,63247],{},"总结：内容发生改变才回去触发",[174,63249,63251],{"id":63250},"_326-事件对象","3.2.6 事件对象",[22088,63253,63255],{"id":63254},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63257,63258],{},[25,63259],{"alt":27,"src":63260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63262,63263],{},[25,63264],{"alt":27,"src":63265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63267,63268],{},"点击一次，就输出了事件对象，它是个对象",[19,63270,63271],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63273,63274],{},[25,63275],{"alt":27,"src":63276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22088,63278,63280],{"id":63279},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63282,63283],{},[25,63284],{"alt":27,"src":63285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63287,63288],{},"实现按特殊字符才是实现打印输出效果：",[194,63290,63292],{"className":53125,"code":63291,"language":53127,"meta":27,"style":27},"\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",[200,63293,63294,63302,63307,63321,63329,63334,63339,63344,63349,63354,63359,63364,63369,63374,63378,63382,63390],{"__ignoreMap":27},[203,63295,63296,63298,63300],{"class":205,"line":206},[203,63297,1124],{"class":213},[203,63299,51858],{"class":51358},[203,63301,51365],{"class":213},[203,63303,63304],{"class":205,"line":124},[203,63305,63306],{"class":272},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[203,63308,63309,63311,63313,63315,63317,63319],{"class":205,"line":1269},[203,63310,52202],{"class":213},[203,63312,53879],{"class":51358},[203,63314,53882],{"class":2052},[203,63316,259],{"class":213},[203,63318,62757],{"class":318},[203,63320,51365],{"class":213},[203,63322,63323,63325,63327],{"class":205,"line":1284},[203,63324,52202],{"class":213},[203,63326,51871],{"class":51358},[203,63328,51365],{"class":213},[203,63330,63331],{"class":205,"line":1290},[203,63332,63333],{"class":213},"    \u002F\u002F const btn = document.querySelector('button')\n",[203,63335,63336],{"class":205,"line":1304},[203,63337,63338],{"class":213},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[203,63340,63341],{"class":205,"line":1310},[203,63342,63343],{"class":213},"    \u002F\u002F   console.log(e);\n",[203,63345,63346],{"class":205,"line":1401},[203,63347,63348],{"class":213},"    \u002F\u002F })\n",[203,63350,63351],{"class":205,"line":1407},[203,63352,63353],{"class":213},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[203,63355,63356],{"class":205,"line":1419},[203,63357,63358],{"class":213},"    const input = document.querySelector('input')\n",[203,63360,63361],{"class":205,"line":1701},[203,63362,63363],{"class":213},"    input.addEventListener('keyup', function (e) {\n",[203,63365,63366],{"class":205,"line":1706},[203,63367,63368],{"class":213},"      if (e.key === 'Enter') {\n",[203,63370,63371],{"class":205,"line":1712},[203,63372,63373],{"class":213},"        console.log('我按下了回车键')\n",[203,63375,63376],{"class":205,"line":1717},[203,63377,52456],{"class":213},[203,63379,63380],{"class":205,"line":1731},[203,63381,33519],{"class":213},[203,63383,63384,63386,63388],{"class":205,"line":1736},[203,63385,52475],{"class":213},[203,63387,51871],{"class":51358},[203,63389,51365],{"class":213},[203,63391,63392,63394,63396],{"class":205,"line":1742},[203,63393,51843],{"class":213},[203,63395,51858],{"class":51358},[203,63397,51365],{"class":213},[22088,63399,63401],{"id":63400},"_3263-trim方法","3.2.6.3 trim方法",[19,63403,63404],{},[25,63405],{"alt":27,"src":63406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63408,63409],{},[25,63410],{"alt":27,"src":63411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63413,63414],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63416,63417],{},"str.trim()",[174,63419,63421],{"id":63420},"_327-环境对象","3.2.7 环境对象",[19,63423,63424],{},[25,63425],{"alt":27,"src":63426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,63428,63429],{},[25,63430],{"alt":27,"src":63431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,63433,63434],{},[25,63435],{"alt":27,"src":63436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,63438,63439],{},"实际函数调用是window.fn()",[19,63441,63442],{},"普通函数里面this指向的是window",[1221,63444,63445,63448,63451],{},[160,63446,63447],{},"在普通函数下，this指向的是window",[160,63449,63450],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[160,63452,63453],{},"箭头函数没有this",[19,63455,63456],{},"粗略记法就是：谁调用，this就指向谁",[19,63458,63459],{},[25,63460],{"alt":27,"src":63461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,63463,63464],{},[25,63465],{"alt":27,"src":63466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,63468,63469],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,63471,63472],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[194,63474,63476],{"className":53125,"code":63475,"language":53127,"meta":27,"style":27},"\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",[200,63477,63478,63486,63498,63506,63511,63516,63521,63526,63530,63538],{"__ignoreMap":27},[203,63479,63480,63482,63484],{"class":205,"line":206},[203,63481,1124],{"class":213},[203,63483,51858],{"class":51358},[203,63485,51365],{"class":213},[203,63487,63488,63490,63492,63494,63496],{"class":205,"line":124},[203,63489,52202],{"class":213},[203,63491,53945],{"class":51358},[203,63493,53951],{"class":213},[203,63495,53945],{"class":51358},[203,63497,51365],{"class":213},[203,63499,63500,63502,63504],{"class":205,"line":1269},[203,63501,52202],{"class":213},[203,63503,51871],{"class":51358},[203,63505,51365],{"class":213},[203,63507,63508],{"class":205,"line":1284},[203,63509,63510],{"class":213},"    const button = document.querySelector('button')\n",[203,63512,63513],{"class":205,"line":1290},[203,63514,63515],{"class":213},"    button.addEventListener('click', function () {\n",[203,63517,63518],{"class":205,"line":1304},[203,63519,63520],{"class":213},"      \u002F\u002F console.log(this);\n",[203,63522,63523],{"class":205,"line":1310},[203,63524,63525],{"class":213},"      this.style.color = 'pink'\n",[203,63527,63528],{"class":205,"line":1401},[203,63529,33519],{"class":213},[203,63531,63532,63534,63536],{"class":205,"line":1407},[203,63533,52475],{"class":213},[203,63535,51871],{"class":51358},[203,63537,51365],{"class":213},[203,63539,63540,63542,63544],{"class":205,"line":1419},[203,63541,51843],{"class":213},[203,63543,51858],{"class":51358},[203,63545,51365],{"class":213},[174,63547,63549],{"id":63548},"_328-回调函数","3.2.8 回调函数",[19,63551,63552],{},[25,63553],{"alt":27,"src":63554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,63556,63557],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,63559,11422],{},[1221,63561,63562,63565,63568],{},[160,63563,63564],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[160,63566,63567],{},"回调函数本质还是函数，只不过把它当成参数使用",[160,63569,63570],{},"使用匿名函数做为回调函数比较常见",[174,63572,63574],{"id":63573},"_329-tab栏切换","3.2.9 tab栏切换",[19,63576,63577],{},[25,63578],{"alt":27,"src":63579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[194,63581,63583],{"className":50691,"code":63582,"language":50693,"meta":27,"style":27},"\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",[200,63584,63585,63595,63609,63613,63621,63635,63655,63675,63688,63696,63702,63712,63722,63726,63730,63737,63750,63763,63775,63791,63795,63799,63806,63818,63830,63842,63852,63862,63866,63870,63879,63891,63902,63914,63918,63922,63930,63940,63950,63960,63964,63968,63978,63992,64004,64008,64012,64024,64035,64052,64062,64066,64070,64085,64096,64106,64110,64114,64121,64136,64140,64144,64152,64162,64166,64170,64179,64189,64193,64201,64209,64213,64221,64236,64251,64264,64272,64306,64333,64360,64387,64414,64422,64430,64445,64482,64517,64552,64587,64622,64630,64638,64646,64651,64656,64676,64681,64710,64715,64720,64738,64743,64748,64753,64775,64780,64796,64800,64805,64810,64831,64836,64865,64869,64874,64878,64886,64894,64898],{"__ignoreMap":27},[203,63586,63587,63589,63591,63593],{"class":205,"line":206},[203,63588,51355],{"class":213},[203,63590,51359],{"class":51358},[203,63592,51362],{"class":2052},[203,63594,51365],{"class":213},[203,63596,63597,63599,63601,63603,63605,63607],{"class":205,"line":124},[203,63598,1124],{"class":213},[203,63600,50693],{"class":51358},[203,63602,51374],{"class":2052},[203,63604,259],{"class":213},[203,63606,51379],{"class":318},[203,63608,51365],{"class":213},[203,63610,63611],{"class":205,"line":1269},[203,63612,2489],{"emptyLinePlaceholder":131},[203,63614,63615,63617,63619],{"class":205,"line":1284},[203,63616,1124],{"class":213},[203,63618,51392],{"class":51358},[203,63620,51365],{"class":213},[203,63622,63623,63625,63627,63629,63631,63633],{"class":205,"line":1290},[203,63624,52202],{"class":213},[203,63626,51402],{"class":51358},[203,63628,51405],{"class":2052},[203,63630,259],{"class":213},[203,63632,51410],{"class":318},[203,63634,59185],{"class":213},[203,63636,63637,63639,63641,63643,63645,63647,63649,63651,63653],{"class":205,"line":1304},[203,63638,52202],{"class":213},[203,63640,51402],{"class":51358},[203,63642,51421],{"class":2052},[203,63644,259],{"class":213},[203,63646,51426],{"class":318},[203,63648,51429],{"class":2052},[203,63650,259],{"class":213},[203,63652,51434],{"class":318},[203,63654,59185],{"class":213},[203,63656,63657,63659,63661,63663,63665,63667,63669,63671,63673],{"class":205,"line":1310},[203,63658,52202],{"class":213},[203,63660,51402],{"class":51358},[203,63662,15010],{"class":2052},[203,63664,259],{"class":213},[203,63666,51449],{"class":318},[203,63668,51429],{"class":2052},[203,63670,259],{"class":213},[203,63672,51456],{"class":318},[203,63674,59185],{"class":213},[203,63676,63677,63679,63681,63684,63686],{"class":205,"line":1401},[203,63678,52202],{"class":213},[203,63680,51465],{"class":51358},[203,63682,63683],{"class":213},">tab栏切换\u003C\u002F",[203,63685,51465],{"class":51358},[203,63687,51365],{"class":213},[203,63689,63690,63692,63694],{"class":205,"line":1407},[203,63691,52202],{"class":213},[203,63693,5216],{"class":51358},[203,63695,51365],{"class":213},[203,63697,63698,63700],{"class":205,"line":1419},[203,63699,6493],{"class":51358},[203,63701,15662],{"class":213},[203,63703,63704,63706,63708,63710],{"class":205,"line":1701},[203,63705,54764],{"class":262},[203,63707,51495],{"class":213},[203,63709,405],{"class":262},[203,63711,1380],{"class":213},[203,63713,63714,63716,63718,63720],{"class":205,"line":1706},[203,63715,54753],{"class":262},[203,63717,51495],{"class":213},[203,63719,405],{"class":262},[203,63721,1380],{"class":213},[203,63723,63724],{"class":205,"line":1712},[203,63725,2276],{"class":213},[203,63727,63728],{"class":205,"line":1717},[203,63729,2489],{"emptyLinePlaceholder":131},[203,63731,63732,63735],{"class":205,"line":1731},[203,63733,63734],{"class":2052},"    .tab",[203,63736,15662],{"class":213},[203,63738,63739,63741,63743,63746,63748],{"class":205,"line":1736},[203,63740,54829],{"class":262},[203,63742,51495],{"class":213},[203,63744,63745],{"class":262},"590",[203,63747,51550],{"class":209},[203,63749,1380],{"class":213},[203,63751,63752,63754,63756,63759,63761],{"class":205,"line":1742},[203,63753,54843],{"class":262},[203,63755,51495],{"class":213},[203,63757,63758],{"class":262},"340",[203,63760,51550],{"class":209},[203,63762,1380],{"class":213},[203,63764,63765,63767,63769,63771,63773],{"class":205,"line":1763},[203,63766,54764],{"class":262},[203,63768,51495],{"class":213},[203,63770,914],{"class":262},[203,63772,51550],{"class":209},[203,63774,1380],{"class":213},[203,63776,63777,63779,63781,63783,63785,63787,63789],{"class":205,"line":1768},[203,63778,62035],{"class":262},[203,63780,51495],{"class":213},[203,63782,431],{"class":262},[203,63784,51550],{"class":209},[203,63786,51579],{"class":262},[203,63788,62302],{"class":262},[203,63790,1380],{"class":213},[203,63792,63793],{"class":205,"line":1782},[203,63794,2276],{"class":213},[203,63796,63797],{"class":205,"line":1787},[203,63798,2489],{"emptyLinePlaceholder":131},[203,63800,63801,63804],{"class":205,"line":1816},[203,63802,63803],{"class":2052},"    .tab-nav",[203,63805,15662],{"class":213},[203,63807,63808,63810,63812,63814,63816],{"class":205,"line":1821},[203,63809,54829],{"class":262},[203,63811,51495],{"class":213},[203,63813,525],{"class":262},[203,63815,542],{"class":209},[203,63817,1380],{"class":213},[203,63819,63820,63822,63824,63826,63828],{"class":205,"line":1838},[203,63821,54843],{"class":262},[203,63823,51495],{"class":213},[203,63825,1121],{"class":262},[203,63827,51550],{"class":209},[203,63829,1380],{"class":213},[203,63831,63832,63834,63836,63838,63840],{"class":205,"line":1843},[203,63833,57417],{"class":262},[203,63835,51495],{"class":213},[203,63837,1121],{"class":262},[203,63839,51550],{"class":209},[203,63841,1380],{"class":213},[203,63843,63844,63846,63848,63850],{"class":205,"line":1848},[203,63845,55067],{"class":262},[203,63847,51495],{"class":213},[203,63849,51535],{"class":262},[203,63851,1380],{"class":213},[203,63853,63854,63856,63858,63860],{"class":205,"line":1853},[203,63855,55078],{"class":262},[203,63857,51495],{"class":213},[203,63859,51726],{"class":262},[203,63861,1380],{"class":213},[203,63863,63864],{"class":205,"line":1867},[203,63865,2276],{"class":213},[203,63867,63868],{"class":205,"line":1872},[203,63869,2489],{"emptyLinePlaceholder":131},[203,63871,63872,63874,63877],{"class":205,"line":2666},[203,63873,63803],{"class":2052},[203,63875,63876],{"class":51358}," h3",[203,63878,15662],{"class":213},[203,63880,63881,63883,63885,63887,63889],{"class":205,"line":2680},[203,63882,54980],{"class":262},[203,63884,51495],{"class":213},[203,63886,1014],{"class":262},[203,63888,51550],{"class":209},[203,63890,1380],{"class":213},[203,63892,63893,63895,63897,63900],{"class":205,"line":2688},[203,63894,62392],{"class":262},[203,63896,51495],{"class":213},[203,63898,63899],{"class":262},"normal",[203,63901,1380],{"class":213},[203,63903,63904,63906,63908,63910,63912],{"class":205,"line":2693},[203,63905,62058],{"class":262},[203,63907,51495],{"class":213},[203,63909,914],{"class":262},[203,63911,51550],{"class":209},[203,63913,1380],{"class":213},[203,63915,63916],{"class":205,"line":2699},[203,63917,2276],{"class":213},[203,63919,63920],{"class":205,"line":2705},[203,63921,2489],{"emptyLinePlaceholder":131},[203,63923,63924,63926,63928],{"class":205,"line":2710},[203,63925,63803],{"class":2052},[203,63927,61350],{"class":51358},[203,63929,15662],{"class":213},[203,63931,63932,63934,63936,63938],{"class":205,"line":8038},[203,63933,54790],{"class":262},[203,63935,51495],{"class":213},[203,63937,54795],{"class":262},[203,63939,1380],{"class":213},[203,63941,63942,63944,63946,63948],{"class":205,"line":8062},[203,63943,55067],{"class":262},[203,63945,51495],{"class":213},[203,63947,51535],{"class":262},[203,63949,1380],{"class":213},[203,63951,63952,63954,63956,63958],{"class":205,"line":8067},[203,63953,55078],{"class":262},[203,63955,51495],{"class":213},[203,63957,51638],{"class":262},[203,63959,1380],{"class":213},[203,63961,63962],{"class":205,"line":8073},[203,63963,2276],{"class":213},[203,63965,63966],{"class":205,"line":8100},[203,63967,2489],{"emptyLinePlaceholder":131},[203,63969,63970,63972,63974,63976],{"class":205,"line":8105},[203,63971,63803],{"class":2052},[203,63973,61350],{"class":51358},[203,63975,55133],{"class":51358},[203,63977,15662],{"class":213},[203,63979,63980,63982,63984,63986,63988,63990],{"class":205,"line":8111},[203,63981,54764],{"class":262},[203,63983,51495],{"class":213},[203,63985,405],{"class":262},[203,63987,9040],{"class":262},[203,63989,51550],{"class":209},[203,63991,1380],{"class":213},[203,63993,63994,63996,63998,64000,64002],{"class":205,"line":8123},[203,63995,54980],{"class":262},[203,63997,51495],{"class":213},[203,63999,763],{"class":262},[203,64001,51550],{"class":209},[203,64003,1380],{"class":213},[203,64005,64006],{"class":205,"line":8135},[203,64007,2276],{"class":213},[203,64009,64010],{"class":205,"line":8147},[203,64011,2489],{"emptyLinePlaceholder":131},[203,64013,64014,64016,64018,64020,64022],{"class":205,"line":9806},[203,64015,63803],{"class":2052},[203,64017,61350],{"class":51358},[203,64019,55133],{"class":51358},[203,64021,1488],{"class":51358},[203,64023,15662],{"class":213},[203,64025,64026,64029,64031,64033],{"class":205,"line":9831},[203,64027,64028],{"class":262},"      text-decoration",[203,64030,51495],{"class":213},[203,64032,54795],{"class":262},[203,64034,1380],{"class":213},[203,64036,64037,64039,64041,64043,64045,64047,64050],{"class":205,"line":9854},[203,64038,62290],{"class":262},[203,64040,51495],{"class":213},[203,64042,291],{"class":262},[203,64044,51550],{"class":209},[203,64046,51579],{"class":262},[203,64048,64049],{"class":262}," transparent",[203,64051,1380],{"class":213},[203,64053,64054,64056,64058,64060],{"class":205,"line":9878},[203,64055,57474],{"class":262},[203,64057,51495],{"class":213},[203,64059,62427],{"class":262},[203,64061,1380],{"class":213},[203,64063,64064],{"class":205,"line":9883},[203,64065,2276],{"class":213},[203,64067,64068],{"class":205,"line":9888},[203,64069,2489],{"emptyLinePlaceholder":131},[203,64071,64072,64074,64076,64078,64080,64083],{"class":205,"line":9893},[203,64073,63803],{"class":2052},[203,64075,61350],{"class":51358},[203,64077,55133],{"class":51358},[203,64079,1488],{"class":51358},[203,64081,64082],{"class":2052},".active",[203,64084,15662],{"class":213},[203,64086,64087,64089,64091,64094],{"class":205,"line":9902},[203,64088,61849],{"class":262},[203,64090,51495],{"class":213},[203,64092,64093],{"class":262},"#e1251b",[203,64095,1380],{"class":213},[203,64097,64098,64100,64102,64104],{"class":205,"line":9907},[203,64099,57474],{"class":262},[203,64101,51495],{"class":213},[203,64103,64093],{"class":262},[203,64105,1380],{"class":213},[203,64107,64108],{"class":205,"line":9913},[203,64109,2276],{"class":213},[203,64111,64112],{"class":205,"line":9934},[203,64113,2489],{"emptyLinePlaceholder":131},[203,64115,64116,64119],{"class":205,"line":9940},[203,64117,64118],{"class":2052},"    .tab-content",[203,64120,15662],{"class":213},[203,64122,64123,64125,64127,64129,64132,64134],{"class":205,"line":9954},[203,64124,54753],{"class":262},[203,64126,51495],{"class":213},[203,64128,405],{"class":262},[203,64130,64131],{"class":262}," 16",[203,64133,51550],{"class":209},[203,64135,1380],{"class":213},[203,64137,64138],{"class":205,"line":9960},[203,64139,2276],{"class":213},[203,64141,64142],{"class":205,"line":9987},[203,64143,2489],{"emptyLinePlaceholder":131},[203,64145,64146,64148,64150],{"class":205,"line":9996},[203,64147,64118],{"class":2052},[203,64149,62232],{"class":2052},[203,64151,15662],{"class":213},[203,64153,64154,64156,64158,64160],{"class":205,"line":10002},[203,64155,55067],{"class":262},[203,64157,51495],{"class":213},[203,64159,54795],{"class":262},[203,64161,1380],{"class":213},[203,64163,64164],{"class":205,"line":10010},[203,64165,2276],{"class":213},[203,64167,64168],{"class":205,"line":10015},[203,64169,2489],{"emptyLinePlaceholder":131},[203,64171,64172,64174,64177],{"class":205,"line":16694},[203,64173,64118],{"class":2052},[203,64175,64176],{"class":2052}," .item.active",[203,64178,15662],{"class":213},[203,64180,64181,64183,64185,64187],{"class":205,"line":16700},[203,64182,55067],{"class":262},[203,64184,51495],{"class":213},[203,64186,60927],{"class":262},[203,64188,1380],{"class":213},[203,64190,64191],{"class":205,"line":16723},[203,64192,2276],{"class":213},[203,64194,64195,64197,64199],{"class":205,"line":16729},[203,64196,52475],{"class":213},[203,64198,5216],{"class":51358},[203,64200,51365],{"class":213},[203,64202,64203,64205,64207],{"class":205,"line":16752},[203,64204,51843],{"class":213},[203,64206,51392],{"class":51358},[203,64208,51365],{"class":213},[203,64210,64211],{"class":205,"line":16766},[203,64212,2489],{"emptyLinePlaceholder":131},[203,64214,64215,64217,64219],{"class":205,"line":16786},[203,64216,1124],{"class":213},[203,64218,51858],{"class":51358},[203,64220,51365],{"class":213},[203,64222,64223,64225,64227,64229,64231,64234],{"class":205,"line":16792},[203,64224,52202],{"class":213},[203,64226,51669],{"class":51358},[203,64228,53544],{"class":2052},[203,64230,259],{"class":213},[203,64232,64233],{"class":318},"\"tab\"",[203,64235,51365],{"class":213},[203,64237,64238,64240,64242,64244,64246,64249],{"class":205,"line":16803},[203,64239,51399],{"class":213},[203,64241,51669],{"class":51358},[203,64243,53544],{"class":2052},[203,64245,259],{"class":213},[203,64247,64248],{"class":318},"\"tab-nav\"",[203,64250,51365],{"class":213},[203,64252,64253,64255,64257,64260,64262],{"class":205,"line":16826},[203,64254,55292],{"class":213},[203,64256,174],{"class":51358},[203,64258,64259],{"class":213},">每日特价\u003C\u002F",[203,64261,174],{"class":51358},[203,64263,51365],{"class":213},[203,64265,64266,64268,64270],{"class":205,"line":16848},[203,64267,55292],{"class":213},[203,64269,1221],{"class":51358},[203,64271,51365],{"class":213},[203,64273,64274,64276,64278,64280,64282,64284,64286,64288,64290,64292,64295,64298,64300,64302,64304],{"class":205,"line":16853},[203,64275,55360],{"class":213},[203,64277,160],{"class":51358},[203,64279,61110],{"class":213},[203,64281,452],{"class":51358},[203,64283,53544],{"class":2052},[203,64285,259],{"class":213},[203,64287,59764],{"class":318},[203,64289,61115],{"class":2052},[203,64291,259],{"class":213},[203,64293,64294],{"class":318},"\"javascript:;\"",[203,64296,64297],{"class":213},">精选\u003C\u002F",[203,64299,452],{"class":51358},[203,64301,55372],{"class":213},[203,64303,160],{"class":51358},[203,64305,51365],{"class":213},[203,64307,64308,64310,64312,64314,64316,64318,64320,64322,64325,64327,64329,64331],{"class":205,"line":16859},[203,64309,55360],{"class":213},[203,64311,160],{"class":51358},[203,64313,61110],{"class":213},[203,64315,452],{"class":51358},[203,64317,61115],{"class":2052},[203,64319,259],{"class":213},[203,64321,64294],{"class":318},[203,64323,64324],{"class":213},">美食\u003C\u002F",[203,64326,452],{"class":51358},[203,64328,55372],{"class":213},[203,64330,160],{"class":51358},[203,64332,51365],{"class":213},[203,64334,64335,64337,64339,64341,64343,64345,64347,64349,64352,64354,64356,64358],{"class":205,"line":16873},[203,64336,55360],{"class":213},[203,64338,160],{"class":51358},[203,64340,61110],{"class":213},[203,64342,452],{"class":51358},[203,64344,61115],{"class":2052},[203,64346,259],{"class":213},[203,64348,64294],{"class":318},[203,64350,64351],{"class":213},">百货\u003C\u002F",[203,64353,452],{"class":51358},[203,64355,55372],{"class":213},[203,64357,160],{"class":51358},[203,64359,51365],{"class":213},[203,64361,64362,64364,64366,64368,64370,64372,64374,64376,64379,64381,64383,64385],{"class":205,"line":16886},[203,64363,55360],{"class":213},[203,64365,160],{"class":51358},[203,64367,61110],{"class":213},[203,64369,452],{"class":51358},[203,64371,61115],{"class":2052},[203,64373,259],{"class":213},[203,64375,64294],{"class":318},[203,64377,64378],{"class":213},">个护\u003C\u002F",[203,64380,452],{"class":51358},[203,64382,55372],{"class":213},[203,64384,160],{"class":51358},[203,64386,51365],{"class":213},[203,64388,64389,64391,64393,64395,64397,64399,64401,64403,64406,64408,64410,64412],{"class":205,"line":16891},[203,64390,55360],{"class":213},[203,64392,160],{"class":51358},[203,64394,61110],{"class":213},[203,64396,452],{"class":51358},[203,64398,61115],{"class":2052},[203,64400,259],{"class":213},[203,64402,64294],{"class":318},[203,64404,64405],{"class":213},">预告\u003C\u002F",[203,64407,452],{"class":51358},[203,64409,55372],{"class":213},[203,64411,160],{"class":51358},[203,64413,51365],{"class":213},[203,64415,64416,64418,64420],{"class":205,"line":16905},[203,64417,55465],{"class":213},[203,64419,1221],{"class":51358},[203,64421,51365],{"class":213},[203,64423,64424,64426,64428],{"class":205,"line":16910},[203,64425,51834],{"class":213},[203,64427,51669],{"class":51358},[203,64429,51365],{"class":213},[203,64431,64432,64434,64436,64438,64440,64443],{"class":205,"line":16916},[203,64433,51399],{"class":213},[203,64435,51669],{"class":51358},[203,64437,53544],{"class":2052},[203,64439,259],{"class":213},[203,64441,64442],{"class":318},"\"tab-content\"",[203,64444,51365],{"class":213},[203,64446,64447,64449,64451,64453,64455,64458,64460,64462,64464,64466,64469,64471,64473,64475,64478,64480],{"class":205,"line":16921},[203,64448,55292],{"class":213},[203,64450,51669],{"class":51358},[203,64452,53544],{"class":2052},[203,64454,259],{"class":213},[203,64456,64457],{"class":318},"\"item active\"",[203,64459,61110],{"class":213},[203,64461,25],{"class":51358},[203,64463,55297],{"class":2052},[203,64465,259],{"class":213},[203,64467,64468],{"class":318},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[203,64470,55305],{"class":2052},[203,64472,259],{"class":213},[203,64474,7742],{"class":318},[203,64476,64477],{"class":213}," \u002F>\u003C\u002F",[203,64479,51669],{"class":51358},[203,64481,51365],{"class":213},[203,64483,64484,64486,64488,64490,64492,64494,64496,64498,64500,64502,64505,64507,64509,64511,64513,64515],{"class":205,"line":16935},[203,64485,55292],{"class":213},[203,64487,51669],{"class":51358},[203,64489,53544],{"class":2052},[203,64491,259],{"class":213},[203,64493,62681],{"class":318},[203,64495,61110],{"class":213},[203,64497,25],{"class":51358},[203,64499,55297],{"class":2052},[203,64501,259],{"class":213},[203,64503,64504],{"class":318},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[203,64506,55305],{"class":2052},[203,64508,259],{"class":213},[203,64510,7742],{"class":318},[203,64512,64477],{"class":213},[203,64514,51669],{"class":51358},[203,64516,51365],{"class":213},[203,64518,64519,64521,64523,64525,64527,64529,64531,64533,64535,64537,64540,64542,64544,64546,64548,64550],{"class":205,"line":16940},[203,64520,55292],{"class":213},[203,64522,51669],{"class":51358},[203,64524,53544],{"class":2052},[203,64526,259],{"class":213},[203,64528,62681],{"class":318},[203,64530,61110],{"class":213},[203,64532,25],{"class":51358},[203,64534,55297],{"class":2052},[203,64536,259],{"class":213},[203,64538,64539],{"class":318},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[203,64541,55305],{"class":2052},[203,64543,259],{"class":213},[203,64545,7742],{"class":318},[203,64547,64477],{"class":213},[203,64549,51669],{"class":51358},[203,64551,51365],{"class":213},[203,64553,64554,64556,64558,64560,64562,64564,64566,64568,64570,64572,64575,64577,64579,64581,64583,64585],{"class":205,"line":16945},[203,64555,55292],{"class":213},[203,64557,51669],{"class":51358},[203,64559,53544],{"class":2052},[203,64561,259],{"class":213},[203,64563,62681],{"class":318},[203,64565,61110],{"class":213},[203,64567,25],{"class":51358},[203,64569,55297],{"class":2052},[203,64571,259],{"class":213},[203,64573,64574],{"class":318},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[203,64576,55305],{"class":2052},[203,64578,259],{"class":213},[203,64580,7742],{"class":318},[203,64582,64477],{"class":213},[203,64584,51669],{"class":51358},[203,64586,51365],{"class":213},[203,64588,64589,64591,64593,64595,64597,64599,64601,64603,64605,64607,64610,64612,64614,64616,64618,64620],{"class":205,"line":16959},[203,64590,55292],{"class":213},[203,64592,51669],{"class":51358},[203,64594,53544],{"class":2052},[203,64596,259],{"class":213},[203,64598,62681],{"class":318},[203,64600,61110],{"class":213},[203,64602,25],{"class":51358},[203,64604,55297],{"class":2052},[203,64606,259],{"class":213},[203,64608,64609],{"class":318},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[203,64611,55305],{"class":2052},[203,64613,259],{"class":213},[203,64615,7742],{"class":318},[203,64617,64477],{"class":213},[203,64619,51669],{"class":51358},[203,64621,51365],{"class":213},[203,64623,64624,64626,64628],{"class":205,"line":16971},[203,64625,51834],{"class":213},[203,64627,51669],{"class":51358},[203,64629,51365],{"class":213},[203,64631,64632,64634,64636],{"class":205,"line":16976},[203,64633,52475],{"class":213},[203,64635,51669],{"class":51358},[203,64637,51365],{"class":213},[203,64639,64640,64642,64644],{"class":205,"line":16989},[203,64641,52202],{"class":213},[203,64643,51871],{"class":51358},[203,64645,51365],{"class":213},[203,64647,64648],{"class":205,"line":16994},[203,64649,64650],{"class":272},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[203,64652,64653],{"class":205,"line":16999},[203,64654,64655],{"class":272},"    \u002F\u002F 1.1 获取 a 元素 \n",[203,64657,64658,64660,64663,64665,64667,64669,64671,64674],{"class":205,"line":17004},[203,64659,11311],{"class":209},[203,64661,64662],{"class":262}," as",[203,64664,13654],{"class":209},[203,64666,54454],{"class":213},[203,64668,55739],{"class":2052},[203,64670,214],{"class":213},[203,64672,64673],{"class":318},"'.tab-nav a'",[203,64675,220],{"class":213},[203,64677,64678],{"class":205,"line":17017},[203,64679,64680],{"class":272},"    \u002F\u002F console.log(as) \n",[203,64682,64683,64685,64687,64689,64691,64693,64695,64697,64699,64702,64704,64706,64708],{"class":205,"line":17022},[203,64684,3290],{"class":209},[203,64686,1747],{"class":213},[203,64688,51905],{"class":209},[203,64690,9528],{"class":213},[203,64692,259],{"class":209},[203,64694,4182],{"class":262},[203,64696,9535],{"class":213},[203,64698,1124],{"class":209},[203,64700,64701],{"class":213}," as.",[203,64703,52026],{"class":262},[203,64705,3303],{"class":213},[203,64707,2381],{"class":209},[203,64709,12532],{"class":213},[203,64711,64712],{"class":205,"line":32691},[203,64713,64714],{"class":272},"      \u002F\u002F console.log(as[i])\n",[203,64716,64717],{"class":205,"line":32697},[203,64718,64719],{"class":272},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[203,64721,64722,64725,64727,64729,64732,64734,64736],{"class":205,"line":32703},[203,64723,64724],{"class":213},"      as[i].",[203,64726,57871],{"class":2052},[203,64728,214],{"class":213},[203,64730,64731],{"class":318},"'mouseenter'",[203,64733,12525],{"class":213},[203,64735,54507],{"class":209},[203,64737,54510],{"class":213},[203,64739,64740],{"class":205,"line":32709},[203,64741,64742],{"class":272},"        \u002F\u002F console.log('鼠标经过')\n",[203,64744,64745],{"class":205,"line":32715},[203,64746,64747],{"class":272},"        \u002F\u002F 排他思想  \n",[203,64749,64750],{"class":205,"line":32726},[203,64751,64752],{"class":272},"        \u002F\u002F 干掉别人 移除类active\n",[203,64754,64755,64757,64759,64761,64764,64766,64768,64770,64773],{"class":205,"line":32732},[203,64756,51983],{"class":213},[203,64758,54457],{"class":2052},[203,64760,214],{"class":213},[203,64762,64763],{"class":318},"'.tab-nav .active'",[203,64765,57061],{"class":213},[203,64767,57064],{"class":2052},[203,64769,214],{"class":213},[203,64771,64772],{"class":318},"'active'",[203,64774,220],{"class":213},[203,64776,64777],{"class":205,"line":32752},[203,64778,64779],{"class":272},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[203,64781,64782,64785,64788,64790,64792,64794],{"class":205,"line":32758},[203,64783,64784],{"class":262},"        this",[203,64786,64787],{"class":213},".classList.",[203,64789,5424],{"class":2052},[203,64791,214],{"class":213},[203,64793,64772],{"class":318},[203,64795,220],{"class":213},[203,64797,64798],{"class":205,"line":32769},[203,64799,2489],{"emptyLinePlaceholder":131},[203,64801,64802],{"class":205,"line":32775},[203,64803,64804],{"class":272},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[203,64806,64807],{"class":205,"line":32781},[203,64808,64809],{"class":272},"        \u002F\u002F 干掉别人\n",[203,64811,64812,64814,64816,64818,64821,64823,64825,64827,64829],{"class":205,"line":32787},[203,64813,51983],{"class":213},[203,64815,54457],{"class":2052},[203,64817,214],{"class":213},[203,64819,64820],{"class":318},"'.tab-content .active'",[203,64822,57061],{"class":213},[203,64824,57064],{"class":2052},[203,64826,214],{"class":213},[203,64828,64772],{"class":318},[203,64830,220],{"class":213},[203,64832,64833],{"class":205,"line":32793},[203,64834,64835],{"class":272},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[203,64837,64838,64840,64842,64844,64847,64849,64851,64853,64855,64857,64859,64861,64863],{"class":205,"line":32799},[203,64839,51983],{"class":213},[203,64841,54457],{"class":2052},[203,64843,214],{"class":213},[203,64845,64846],{"class":318},"`.tab-content .item:nth-child(${",[203,64848,655],{"class":213},[203,64850,45624],{"class":209},[203,64852,25176],{"class":262},[203,64854,57090],{"class":318},[203,64856,57061],{"class":213},[203,64858,5424],{"class":2052},[203,64860,214],{"class":213},[203,64862,64772],{"class":318},[203,64864,220],{"class":213},[203,64866,64867],{"class":205,"line":32805},[203,64868,2489],{"emptyLinePlaceholder":131},[203,64870,64871],{"class":205,"line":32811},[203,64872,64873],{"class":213},"      })\n",[203,64875,64876],{"class":205,"line":32831},[203,64877,2276],{"class":213},[203,64879,64880,64882,64884],{"class":205,"line":32837},[203,64881,52475],{"class":213},[203,64883,51871],{"class":51358},[203,64885,51365],{"class":213},[203,64887,64888,64890,64892],{"class":205,"line":32853},[203,64889,51843],{"class":213},[203,64891,51858],{"class":51358},[203,64893,51365],{"class":213},[203,64895,64896],{"class":205,"line":32859},[203,64897,2489],{"emptyLinePlaceholder":131},[203,64899,64900,64902,64904],{"class":205,"line":32873},[203,64901,51843],{"class":213},[203,64903,50693],{"class":51358},[203,64905,51365],{"class":213},[19,64907,64908],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,64910,64911],{},"在监听事件中，this指向的就是他的调用者",[19,64913,64914],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,64916,53778],{},[19,64918,64919],{},"(function () {",[19,64921,64922],{},"const list = document.querySelector('.xtx-elevator-list')",[19,64924,64925],{},"list.addEventListener('click', function (e) {",[19,64927,64928],{},"if (e.target.tagName === 'A') {",[19,64930,64931],{},"\u002F\u002F 排他思想",[19,64933,64934],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,64936,64937],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,64939,64940],{},"\u002F\u002F console.log(old);",[19,64942,64943],{},"\u002F\u002F 判断",[19,64945,64946],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,64948,64949],{},"if (old) old.classList.remove('active')",[19,64951,64952],{},"e.target.classList.add('active')",[19,64954,1160],{},[19,64956,52522],{},[19,64958,64959],{},"})();",[174,64961,64963],{"id":64962},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[194,64965,64967],{"className":50691,"code":64966,"language":50693,"meta":27,"style":27},"\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",[200,64968,64969,64979,64983,64991,64995,65009,65023,65035,65043,65049,65059,65069,65073,65077,65084,65096,65107,65124,65137,65151,65161,65165,65169,65176,65187,65205,65215,65227,65231,65235,65242,65259,65270,65282,65286,65290,65297,65309,65313,65321,65329,65333,65341,65349,65357,65372,65416,65424,65437,65450,65463,65471,65479,65487,65515,65523,65535,65548,65561,65569,65577,65585,65611,65619,65632,65644,65657,65665,65673,65681,65707,65715,65728,65740,65753,65761,65769,65777,65782,65802,65807,65827,65832,65849,65854,65862,65867,65896,65909,65913,65917,65922,65926,65954,65959,65976,65981,65986,65991,65996,66022,66026,66030,66038,66046,66050],{"__ignoreMap":27},[203,64970,64971,64973,64975,64977],{"class":205,"line":206},[203,64972,51355],{"class":213},[203,64974,51359],{"class":51358},[203,64976,51362],{"class":2052},[203,64978,51365],{"class":213},[203,64980,64981],{"class":205,"line":124},[203,64982,2489],{"emptyLinePlaceholder":131},[203,64984,64985,64987,64989],{"class":205,"line":1269},[203,64986,1124],{"class":213},[203,64988,50693],{"class":51358},[203,64990,51365],{"class":213},[203,64992,64993],{"class":205,"line":1284},[203,64994,2489],{"emptyLinePlaceholder":131},[203,64996,64997,64999,65001,65003,65005,65007],{"class":205,"line":1290},[203,64998,1124],{"class":213},[203,65000,51392],{"class":51358},[203,65002,51374],{"class":2052},[203,65004,259],{"class":213},[203,65006,51379],{"class":318},[203,65008,51365],{"class":213},[203,65010,65011,65013,65015,65017,65019,65021],{"class":205,"line":1304},[203,65012,52202],{"class":213},[203,65014,51402],{"class":51358},[203,65016,51405],{"class":2052},[203,65018,259],{"class":213},[203,65020,51410],{"class":318},[203,65022,51365],{"class":213},[203,65024,65025,65027,65029,65031,65033],{"class":205,"line":1310},[203,65026,52202],{"class":213},[203,65028,51465],{"class":51358},[203,65030,55372],{"class":213},[203,65032,51465],{"class":51358},[203,65034,51365],{"class":213},[203,65036,65037,65039,65041],{"class":205,"line":1401},[203,65038,52202],{"class":213},[203,65040,5216],{"class":51358},[203,65042,51365],{"class":213},[203,65044,65045,65047],{"class":205,"line":1407},[203,65046,6493],{"class":51358},[203,65048,15662],{"class":213},[203,65050,65051,65053,65055,65057],{"class":205,"line":1419},[203,65052,54764],{"class":262},[203,65054,51495],{"class":213},[203,65056,405],{"class":262},[203,65058,1380],{"class":213},[203,65060,65061,65063,65065,65067],{"class":205,"line":1701},[203,65062,54753],{"class":262},[203,65064,51495],{"class":213},[203,65066,405],{"class":262},[203,65068,1380],{"class":213},[203,65070,65071],{"class":205,"line":1706},[203,65072,2276],{"class":213},[203,65074,65075],{"class":205,"line":1712},[203,65076,2489],{"emptyLinePlaceholder":131},[203,65078,65079,65082],{"class":205,"line":1717},[203,65080,65081],{"class":51358},"    table",[203,65083,15662],{"class":213},[203,65085,65086,65089,65091,65094],{"class":205,"line":1731},[203,65087,65088],{"class":262},"      border-collapse",[203,65090,51495],{"class":213},[203,65092,65093],{"class":262},"collapse",[203,65095,1380],{"class":213},[203,65097,65098,65101,65103,65105],{"class":205,"line":1736},[203,65099,65100],{"class":262},"      border-spacing",[203,65102,51495],{"class":213},[203,65104,405],{"class":262},[203,65106,1380],{"class":213},[203,65108,65109,65111,65113,65115,65117,65119,65122],{"class":205,"line":1742},[203,65110,62035],{"class":262},[203,65112,51495],{"class":213},[203,65114,431],{"class":262},[203,65116,51550],{"class":209},[203,65118,51579],{"class":262},[203,65120,65121],{"class":262}," #c0c0c0",[203,65123,1380],{"class":213},[203,65125,65126,65128,65130,65133,65135],{"class":205,"line":1763},[203,65127,54829],{"class":262},[203,65129,51495],{"class":213},[203,65131,65132],{"class":262},"500",[203,65134,51550],{"class":209},[203,65136,1380],{"class":213},[203,65138,65139,65141,65143,65145,65147,65149],{"class":205,"line":1768},[203,65140,54764],{"class":262},[203,65142,51495],{"class":213},[203,65144,525],{"class":262},[203,65146,51550],{"class":209},[203,65148,51614],{"class":262},[203,65150,1380],{"class":213},[203,65152,65153,65155,65157,65159],{"class":205,"line":1782},[203,65154,57344],{"class":262},[203,65156,51495],{"class":213},[203,65158,51650],{"class":262},[203,65160,1380],{"class":213},[203,65162,65163],{"class":205,"line":1787},[203,65164,2276],{"class":213},[203,65166,65167],{"class":205,"line":1816},[203,65168,2489],{"emptyLinePlaceholder":131},[203,65170,65171,65174],{"class":205,"line":1821},[203,65172,65173],{"class":51358},"    th",[203,65175,15662],{"class":213},[203,65177,65178,65180,65182,65185],{"class":205,"line":1838},[203,65179,54942],{"class":262},[203,65181,51495],{"class":213},[203,65183,65184],{"class":262},"#09c",[203,65186,1380],{"class":213},[203,65188,65189,65192,65194,65196,65198,65200,65203],{"class":205,"line":1843},[203,65190,65191],{"class":262},"      font",[203,65193,51495],{"class":213},[203,65195,62397],{"class":262},[203,65197,64131],{"class":262},[203,65199,51550],{"class":209},[203,65201,65202],{"class":318}," \"微软雅黑\"",[203,65204,1380],{"class":213},[203,65206,65207,65209,65211,65213],{"class":205,"line":1848},[203,65208,57474],{"class":262},[203,65210,51495],{"class":213},[203,65212,60900],{"class":262},[203,65214,1380],{"class":213},[203,65216,65217,65219,65221,65223,65225],{"class":205,"line":1853},[203,65218,54843],{"class":262},[203,65220,51495],{"class":213},[203,65222,1014],{"class":262},[203,65224,51550],{"class":209},[203,65226,1380],{"class":213},[203,65228,65229],{"class":205,"line":1867},[203,65230,2276],{"class":213},[203,65232,65233],{"class":205,"line":1872},[203,65234,2489],{"emptyLinePlaceholder":131},[203,65236,65237,65240],{"class":205,"line":2666},[203,65238,65239],{"class":51358},"    td",[203,65241,15662],{"class":213},[203,65243,65244,65246,65248,65250,65252,65254,65257],{"class":205,"line":2680},[203,65245,62035],{"class":262},[203,65247,51495],{"class":213},[203,65249,431],{"class":262},[203,65251,51550],{"class":209},[203,65253,51579],{"class":262},[203,65255,65256],{"class":262}," #d0d0d0",[203,65258,1380],{"class":213},[203,65260,65261,65263,65265,65268],{"class":205,"line":2688},[203,65262,57474],{"class":262},[203,65264,51495],{"class":213},[203,65266,65267],{"class":262},"#404060",[203,65269,1380],{"class":213},[203,65271,65272,65274,65276,65278,65280],{"class":205,"line":2693},[203,65273,54753],{"class":262},[203,65275,51495],{"class":213},[203,65277,660],{"class":262},[203,65279,51550],{"class":209},[203,65281,1380],{"class":213},[203,65283,65284],{"class":205,"line":2699},[203,65285,2276],{"class":213},[203,65287,65288],{"class":205,"line":2705},[203,65289,2489],{"emptyLinePlaceholder":131},[203,65291,65292,65295],{"class":205,"line":2710},[203,65293,65294],{"class":2052},"    .allCheck",[203,65296,15662],{"class":213},[203,65298,65299,65301,65303,65305,65307],{"class":205,"line":8038},[203,65300,54829],{"class":262},[203,65302,51495],{"class":213},[203,65304,826],{"class":262},[203,65306,51550],{"class":209},[203,65308,1380],{"class":213},[203,65310,65311],{"class":205,"line":8062},[203,65312,2276],{"class":213},[203,65314,65315,65317,65319],{"class":205,"line":8067},[203,65316,52475],{"class":213},[203,65318,5216],{"class":51358},[203,65320,51365],{"class":213},[203,65322,65323,65325,65327],{"class":205,"line":8073},[203,65324,51843],{"class":213},[203,65326,51392],{"class":51358},[203,65328,51365],{"class":213},[203,65330,65331],{"class":205,"line":8100},[203,65332,2489],{"emptyLinePlaceholder":131},[203,65334,65335,65337,65339],{"class":205,"line":8105},[203,65336,1124],{"class":213},[203,65338,51858],{"class":51358},[203,65340,51365],{"class":213},[203,65342,65343,65345,65347],{"class":205,"line":8111},[203,65344,52202],{"class":213},[203,65346,351],{"class":51358},[203,65348,51365],{"class":213},[203,65350,65351,65353,65355],{"class":205,"line":8123},[203,65352,51399],{"class":213},[203,65354,357],{"class":51358},[203,65356,51365],{"class":213},[203,65358,65359,65361,65363,65365,65367,65370],{"class":205,"line":8135},[203,65360,55292],{"class":213},[203,65362,360],{"class":51358},[203,65364,53544],{"class":2052},[203,65366,259],{"class":213},[203,65368,65369],{"class":318},"\"allCheck\"",[203,65371,51365],{"class":213},[203,65373,65374,65376,65378,65380,65382,65384,65386,65388,65390,65392,65394,65397,65400,65402,65404,65406,65409,65412,65414],{"class":205,"line":8147},[203,65375,55360],{"class":213},[203,65377,53879],{"class":51358},[203,65379,53882],{"class":2052},[203,65381,259],{"class":213},[203,65383,53887],{"class":318},[203,65385,15010],{"class":2052},[203,65387,259],{"class":213},[203,65389,7742],{"class":318},[203,65391,15049],{"class":2052},[203,65393,259],{"class":213},[203,65395,65396],{"class":318},"\"checkAll\"",[203,65398,65399],{"class":213},"> \u003C",[203,65401,203],{"class":51358},[203,65403,53544],{"class":2052},[203,65405,259],{"class":213},[203,65407,65408],{"class":318},"\"all\"",[203,65410,65411],{"class":213},">全选\u003C\u002F",[203,65413,203],{"class":51358},[203,65415,51365],{"class":213},[203,65417,65418,65420,65422],{"class":205,"line":9806},[203,65419,55465],{"class":213},[203,65421,360],{"class":51358},[203,65423,51365],{"class":213},[203,65425,65426,65428,65430,65433,65435],{"class":205,"line":9831},[203,65427,55292],{"class":213},[203,65429,360],{"class":51358},[203,65431,65432],{"class":213},">商品\u003C\u002F",[203,65434,360],{"class":51358},[203,65436,51365],{"class":213},[203,65438,65439,65441,65443,65446,65448],{"class":205,"line":9854},[203,65440,55292],{"class":213},[203,65442,360],{"class":51358},[203,65444,65445],{"class":213},">商家\u003C\u002F",[203,65447,360],{"class":51358},[203,65449,51365],{"class":213},[203,65451,65452,65454,65456,65459,65461],{"class":205,"line":9878},[203,65453,55292],{"class":213},[203,65455,360],{"class":51358},[203,65457,65458],{"class":213},">价格\u003C\u002F",[203,65460,360],{"class":51358},[203,65462,51365],{"class":213},[203,65464,65465,65467,65469],{"class":205,"line":9883},[203,65466,51834],{"class":213},[203,65468,357],{"class":51358},[203,65470,51365],{"class":213},[203,65472,65473,65475,65477],{"class":205,"line":9888},[203,65474,51399],{"class":213},[203,65476,357],{"class":51358},[203,65478,51365],{"class":213},[203,65480,65481,65483,65485],{"class":205,"line":9893},[203,65482,55292],{"class":213},[203,65484,403],{"class":51358},[203,65486,51365],{"class":213},[203,65488,65489,65491,65493,65495,65497,65499,65501,65503,65506,65508,65510,65513],{"class":205,"line":9902},[203,65490,55360],{"class":213},[203,65492,53879],{"class":51358},[203,65494,53882],{"class":2052},[203,65496,259],{"class":213},[203,65498,53887],{"class":318},[203,65500,15010],{"class":2052},[203,65502,259],{"class":213},[203,65504,65505],{"class":318},"\"check\"",[203,65507,53544],{"class":2052},[203,65509,259],{"class":213},[203,65511,65512],{"class":318},"\"ck\"",[203,65514,51365],{"class":213},[203,65516,65517,65519,65521],{"class":205,"line":9907},[203,65518,55465],{"class":213},[203,65520,403],{"class":51358},[203,65522,51365],{"class":213},[203,65524,65525,65527,65529,65531,65533],{"class":205,"line":9913},[203,65526,55292],{"class":213},[203,65528,403],{"class":51358},[203,65530,61231],{"class":213},[203,65532,403],{"class":51358},[203,65534,51365],{"class":213},[203,65536,65537,65539,65541,65544,65546],{"class":205,"line":9934},[203,65538,55292],{"class":213},[203,65540,403],{"class":51358},[203,65542,65543],{"class":213},">小米\u003C\u002F",[203,65545,403],{"class":51358},[203,65547,51365],{"class":213},[203,65549,65550,65552,65554,65557,65559],{"class":205,"line":9940},[203,65551,55292],{"class":213},[203,65553,403],{"class":51358},[203,65555,65556],{"class":213},">￥1999\u003C\u002F",[203,65558,403],{"class":51358},[203,65560,51365],{"class":213},[203,65562,65563,65565,65567],{"class":205,"line":9954},[203,65564,51834],{"class":213},[203,65566,357],{"class":51358},[203,65568,51365],{"class":213},[203,65570,65571,65573,65575],{"class":205,"line":9960},[203,65572,51399],{"class":213},[203,65574,357],{"class":51358},[203,65576,51365],{"class":213},[203,65578,65579,65581,65583],{"class":205,"line":9987},[203,65580,55292],{"class":213},[203,65582,403],{"class":51358},[203,65584,51365],{"class":213},[203,65586,65587,65589,65591,65593,65595,65597,65599,65601,65603,65605,65607,65609],{"class":205,"line":9996},[203,65588,55360],{"class":213},[203,65590,53879],{"class":51358},[203,65592,53882],{"class":2052},[203,65594,259],{"class":213},[203,65596,53887],{"class":318},[203,65598,15010],{"class":2052},[203,65600,259],{"class":213},[203,65602,65505],{"class":318},[203,65604,53544],{"class":2052},[203,65606,259],{"class":213},[203,65608,65512],{"class":318},[203,65610,51365],{"class":213},[203,65612,65613,65615,65617],{"class":205,"line":10002},[203,65614,55465],{"class":213},[203,65616,403],{"class":51358},[203,65618,51365],{"class":213},[203,65620,65621,65623,65625,65628,65630],{"class":205,"line":10010},[203,65622,55292],{"class":213},[203,65624,403],{"class":51358},[203,65626,65627],{"class":213},">小米净水器\u003C\u002F",[203,65629,403],{"class":51358},[203,65631,51365],{"class":213},[203,65633,65634,65636,65638,65640,65642],{"class":205,"line":10015},[203,65635,55292],{"class":213},[203,65637,403],{"class":51358},[203,65639,65543],{"class":213},[203,65641,403],{"class":51358},[203,65643,51365],{"class":213},[203,65645,65646,65648,65650,65653,65655],{"class":205,"line":16694},[203,65647,55292],{"class":213},[203,65649,403],{"class":51358},[203,65651,65652],{"class":213},">￥4999\u003C\u002F",[203,65654,403],{"class":51358},[203,65656,51365],{"class":213},[203,65658,65659,65661,65663],{"class":205,"line":16700},[203,65660,51834],{"class":213},[203,65662,357],{"class":51358},[203,65664,51365],{"class":213},[203,65666,65667,65669,65671],{"class":205,"line":16723},[203,65668,51399],{"class":213},[203,65670,357],{"class":51358},[203,65672,51365],{"class":213},[203,65674,65675,65677,65679],{"class":205,"line":16729},[203,65676,55292],{"class":213},[203,65678,403],{"class":51358},[203,65680,51365],{"class":213},[203,65682,65683,65685,65687,65689,65691,65693,65695,65697,65699,65701,65703,65705],{"class":205,"line":16752},[203,65684,55360],{"class":213},[203,65686,53879],{"class":51358},[203,65688,53882],{"class":2052},[203,65690,259],{"class":213},[203,65692,53887],{"class":318},[203,65694,15010],{"class":2052},[203,65696,259],{"class":213},[203,65698,65505],{"class":318},[203,65700,53544],{"class":2052},[203,65702,259],{"class":213},[203,65704,65512],{"class":318},[203,65706,51365],{"class":213},[203,65708,65709,65711,65713],{"class":205,"line":16766},[203,65710,55465],{"class":213},[203,65712,403],{"class":51358},[203,65714,51365],{"class":213},[203,65716,65717,65719,65721,65724,65726],{"class":205,"line":16786},[203,65718,55292],{"class":213},[203,65720,403],{"class":51358},[203,65722,65723],{"class":213},">小米电视\u003C\u002F",[203,65725,403],{"class":51358},[203,65727,51365],{"class":213},[203,65729,65730,65732,65734,65736,65738],{"class":205,"line":16792},[203,65731,55292],{"class":213},[203,65733,403],{"class":51358},[203,65735,65543],{"class":213},[203,65737,403],{"class":51358},[203,65739,51365],{"class":213},[203,65741,65742,65744,65746,65749,65751],{"class":205,"line":16803},[203,65743,55292],{"class":213},[203,65745,403],{"class":51358},[203,65747,65748],{"class":213},">￥5999\u003C\u002F",[203,65750,403],{"class":51358},[203,65752,51365],{"class":213},[203,65754,65755,65757,65759],{"class":205,"line":16826},[203,65756,51834],{"class":213},[203,65758,357],{"class":51358},[203,65760,51365],{"class":213},[203,65762,65763,65765,65767],{"class":205,"line":16848},[203,65764,52475],{"class":213},[203,65766,351],{"class":51358},[203,65768,51365],{"class":213},[203,65770,65771,65773,65775],{"class":205,"line":16853},[203,65772,52202],{"class":213},[203,65774,51871],{"class":51358},[203,65776,51365],{"class":213},[203,65778,65779],{"class":205,"line":16859},[203,65780,65781],{"class":272},"    \u002F\u002F 1. 获取大复选框\n",[203,65783,65784,65786,65789,65791,65793,65795,65797,65800],{"class":205,"line":16873},[203,65785,11311],{"class":209},[203,65787,65788],{"class":262}," checkAll",[203,65790,13654],{"class":209},[203,65792,54454],{"class":213},[203,65794,54457],{"class":2052},[203,65796,214],{"class":213},[203,65798,65799],{"class":318},"'#checkAll'",[203,65801,220],{"class":213},[203,65803,65804],{"class":205,"line":16886},[203,65805,65806],{"class":272},"    \u002F\u002F 2. 获取所有的小复选框\n",[203,65808,65809,65811,65814,65816,65818,65820,65822,65825],{"class":205,"line":16891},[203,65810,11311],{"class":209},[203,65812,65813],{"class":262}," cks",[203,65815,13654],{"class":209},[203,65817,54454],{"class":213},[203,65819,55739],{"class":2052},[203,65821,214],{"class":213},[203,65823,65824],{"class":318},"'.ck'",[203,65826,220],{"class":213},[203,65828,65829],{"class":205,"line":16905},[203,65830,65831],{"class":272},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[203,65833,65834,65837,65839,65841,65843,65845,65847],{"class":205,"line":16910},[203,65835,65836],{"class":213},"    checkAll.",[203,65838,57871],{"class":2052},[203,65840,214],{"class":213},[203,65842,57876],{"class":318},[203,65844,12525],{"class":213},[203,65846,54507],{"class":209},[203,65848,54510],{"class":213},[203,65850,65851],{"class":205,"line":16916},[203,65852,65853],{"class":272},"      \u002F\u002F 得到当前大复选框的选中状态\n",[203,65855,65856,65859],{"class":205,"line":16921},[203,65857,65858],{"class":272},"      \u002F\u002F console.log(checkAll.checked)",[203,65860,65861],{"class":272},"  \u002F\u002F 得到 是 true 或者是 false\n",[203,65863,65864],{"class":205,"line":16935},[203,65865,65866],{"class":272},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[203,65868,65869,65871,65873,65875,65877,65879,65881,65883,65885,65888,65890,65892,65894],{"class":205,"line":16940},[203,65870,52342],{"class":209},[203,65872,1747],{"class":213},[203,65874,51905],{"class":209},[203,65876,9528],{"class":213},[203,65878,259],{"class":209},[203,65880,4182],{"class":262},[203,65882,9535],{"class":213},[203,65884,1124],{"class":209},[203,65886,65887],{"class":213}," cks.",[203,65889,52026],{"class":262},[203,65891,3303],{"class":213},[203,65893,2381],{"class":209},[203,65895,12532],{"class":213},[203,65897,65898,65901,65903,65906],{"class":205,"line":16945},[203,65899,65900],{"class":213},"        cks[i].checked ",[203,65902,259],{"class":209},[203,65904,65905],{"class":262}," this",[203,65907,65908],{"class":213},".checked\n",[203,65910,65911],{"class":205,"line":16959},[203,65912,52456],{"class":213},[203,65914,65915],{"class":205,"line":16971},[203,65916,33519],{"class":213},[203,65918,65919],{"class":205,"line":16976},[203,65920,65921],{"class":272},"    \u002F\u002F 5. 小复选框控制大复选框\n",[203,65923,65924],{"class":205,"line":16989},[203,65925,2489],{"emptyLinePlaceholder":131},[203,65927,65928,65930,65932,65934,65936,65938,65940,65942,65944,65946,65948,65950,65952],{"class":205,"line":16994},[203,65929,3290],{"class":209},[203,65931,1747],{"class":213},[203,65933,51905],{"class":209},[203,65935,9528],{"class":213},[203,65937,259],{"class":209},[203,65939,4182],{"class":262},[203,65941,9535],{"class":213},[203,65943,1124],{"class":209},[203,65945,65887],{"class":213},[203,65947,52026],{"class":262},[203,65949,3303],{"class":213},[203,65951,2381],{"class":209},[203,65953,12532],{"class":213},[203,65955,65956],{"class":205,"line":16999},[203,65957,65958],{"class":272},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[203,65960,65961,65964,65966,65968,65970,65972,65974],{"class":205,"line":17004},[203,65962,65963],{"class":213},"      cks[i].",[203,65965,57871],{"class":2052},[203,65967,214],{"class":213},[203,65969,57876],{"class":318},[203,65971,12525],{"class":213},[203,65973,54507],{"class":209},[203,65975,54510],{"class":213},[203,65977,65978],{"class":205,"line":17017},[203,65979,65980],{"class":272},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[203,65982,65983],{"class":205,"line":17022},[203,65984,65985],{"class":272},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[203,65987,65988],{"class":205,"line":32691},[203,65989,65990],{"class":272},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[203,65992,65993],{"class":205,"line":32697},[203,65994,65995],{"class":272},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[203,65997,65998,66001,66003,66005,66007,66009,66012,66014,66016,66018,66020],{"class":205,"line":32703},[203,65999,66000],{"class":213},"        checkAll.checked ",[203,66002,259],{"class":209},[203,66004,54454],{"class":213},[203,66006,55739],{"class":2052},[203,66008,214],{"class":213},[203,66010,66011],{"class":318},"'.ck:checked'",[203,66013,30884],{"class":213},[203,66015,52026],{"class":262},[203,66017,57964],{"class":209},[203,66019,65887],{"class":213},[203,66021,55889],{"class":262},[203,66023,66024],{"class":205,"line":32709},[203,66025,64873],{"class":213},[203,66027,66028],{"class":205,"line":32715},[203,66029,2276],{"class":213},[203,66031,66032,66034,66036],{"class":205,"line":32726},[203,66033,52475],{"class":213},[203,66035,51871],{"class":51358},[203,66037,51365],{"class":213},[203,66039,66040,66042,66044],{"class":205,"line":32732},[203,66041,51843],{"class":213},[203,66043,51858],{"class":51358},[203,66045,51365],{"class":213},[203,66047,66048],{"class":205,"line":32752},[203,66049,2489],{"emptyLinePlaceholder":131},[203,66051,66052,66054,66056],{"class":205,"line":32758},[203,66053,51843],{"class":213},[203,66055,50693],{"class":51358},[203,66057,51365],{"class":213},[19,66059,66060],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66062,66063],{},"用好之间比较得到的布尔值！！！",[19,66065,66066,66067,66070,66071,1747,66074,798,66076,66079],{},"在 JS 里访问的时候，",[200,66068,66069],{},"checkbox.checked"," 是一个 ",[363,66072,66073],{},"布尔值",[200,66075,1452],{},[200,66077,66078],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66081,66082,66083,66086,66087],{},"HTML 的 ",[200,66084,66085],{},"checked=\"checked\""," 只是 ",[363,66088,66089,66090,66093],{},"初始值；JS 的 ",[200,66091,66092],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66095,66096],{},"：checked是一个伪类选择器",[19,66098,66099],{},[25,66100],{"alt":27,"src":66101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66103,66104,66107],{},[66105,66106],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66109,66110],{},[25,66111],{"alt":27,"src":66112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66114,66116],{"id":66115},"_33-dom事件进阶","3.3 DOM事件进阶",[174,66118,66120],{"id":66119},"_331-事件流","3.3.1 事件流",[19,66122,66123],{},[25,66124],{"alt":27,"src":66125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22088,66127,66129],{"id":66128},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66131,66132],{},[25,66133],{"alt":27,"src":66134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[194,66136,66138],{"className":50691,"code":66137,"language":50693,"meta":27,"style":27},"\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",[200,66139,66140,66150,66164,66168,66176,66190,66210,66222,66230,66237,66249,66261,66271,66275,66279,66286,66298,66310,66320,66324,66332,66340,66344,66352,66367,66386,66394,66402,66422,66442,66458,66469,66477,66494,66505,66513,66530,66541,66549,66557,66565,66569],{"__ignoreMap":27},[203,66141,66142,66144,66146,66148],{"class":205,"line":206},[203,66143,51355],{"class":213},[203,66145,51359],{"class":51358},[203,66147,51362],{"class":2052},[203,66149,51365],{"class":213},[203,66151,66152,66154,66156,66158,66160,66162],{"class":205,"line":124},[203,66153,1124],{"class":213},[203,66155,50693],{"class":51358},[203,66157,51374],{"class":2052},[203,66159,259],{"class":213},[203,66161,51379],{"class":318},[203,66163,51365],{"class":213},[203,66165,66166],{"class":205,"line":1269},[203,66167,2489],{"emptyLinePlaceholder":131},[203,66169,66170,66172,66174],{"class":205,"line":1284},[203,66171,1124],{"class":213},[203,66173,51392],{"class":51358},[203,66175,51365],{"class":213},[203,66177,66178,66180,66182,66184,66186,66188],{"class":205,"line":1290},[203,66179,52202],{"class":213},[203,66181,51402],{"class":51358},[203,66183,51405],{"class":2052},[203,66185,259],{"class":213},[203,66187,51410],{"class":318},[203,66189,51365],{"class":213},[203,66191,66192,66194,66196,66198,66200,66202,66204,66206,66208],{"class":205,"line":1304},[203,66193,52202],{"class":213},[203,66195,51402],{"class":51358},[203,66197,15010],{"class":2052},[203,66199,259],{"class":213},[203,66201,51449],{"class":318},[203,66203,51429],{"class":2052},[203,66205,259],{"class":213},[203,66207,51456],{"class":318},[203,66209,51365],{"class":213},[203,66211,66212,66214,66216,66218,66220],{"class":205,"line":1310},[203,66213,52202],{"class":213},[203,66215,51465],{"class":51358},[203,66217,51468],{"class":213},[203,66219,51465],{"class":51358},[203,66221,51365],{"class":213},[203,66223,66224,66226,66228],{"class":205,"line":1401},[203,66225,52202],{"class":213},[203,66227,5216],{"class":51358},[203,66229,51365],{"class":213},[203,66231,66232,66235],{"class":205,"line":1407},[203,66233,66234],{"class":2052},"    .father",[203,66236,15662],{"class":213},[203,66238,66239,66241,66243,66245,66247],{"class":205,"line":1419},[203,66240,54829],{"class":262},[203,66242,51495],{"class":213},[203,66244,65132],{"class":262},[203,66246,51550],{"class":209},[203,66248,1380],{"class":213},[203,66250,66251,66253,66255,66257,66259],{"class":205,"line":1701},[203,66252,54843],{"class":262},[203,66254,51495],{"class":213},[203,66256,65132],{"class":262},[203,66258,51550],{"class":209},[203,66260,1380],{"class":213},[203,66262,66263,66265,66267,66269],{"class":205,"line":1706},[203,66264,54942],{"class":262},[203,66266,51495],{"class":213},[203,66268,51703],{"class":262},[203,66270,1380],{"class":213},[203,66272,66273],{"class":205,"line":1712},[203,66274,2276],{"class":213},[203,66276,66277],{"class":205,"line":1717},[203,66278,2489],{"emptyLinePlaceholder":131},[203,66280,66281,66284],{"class":205,"line":1731},[203,66282,66283],{"class":2052},"    .son",[203,66285,15662],{"class":213},[203,66287,66288,66290,66292,66294,66296],{"class":205,"line":1736},[203,66289,54829],{"class":262},[203,66291,51495],{"class":213},[203,66293,1811],{"class":262},[203,66295,51550],{"class":209},[203,66297,1380],{"class":213},[203,66299,66300,66302,66304,66306,66308],{"class":205,"line":1742},[203,66301,54843],{"class":262},[203,66303,51495],{"class":213},[203,66305,1811],{"class":262},[203,66307,51550],{"class":209},[203,66309,1380],{"class":213},[203,66311,66312,66314,66316,66318],{"class":205,"line":1763},[203,66313,54942],{"class":262},[203,66315,51495],{"class":213},[203,66317,54947],{"class":262},[203,66319,1380],{"class":213},[203,66321,66322],{"class":205,"line":1768},[203,66323,2276],{"class":213},[203,66325,66326,66328,66330],{"class":205,"line":1782},[203,66327,52475],{"class":213},[203,66329,5216],{"class":51358},[203,66331,51365],{"class":213},[203,66333,66334,66336,66338],{"class":205,"line":1787},[203,66335,51843],{"class":213},[203,66337,51392],{"class":51358},[203,66339,51365],{"class":213},[203,66341,66342],{"class":205,"line":1816},[203,66343,2489],{"emptyLinePlaceholder":131},[203,66345,66346,66348,66350],{"class":205,"line":1821},[203,66347,1124],{"class":213},[203,66349,51858],{"class":51358},[203,66351,51365],{"class":213},[203,66353,66354,66356,66358,66360,66362,66365],{"class":205,"line":1838},[203,66355,52202],{"class":213},[203,66357,51669],{"class":51358},[203,66359,53544],{"class":2052},[203,66361,259],{"class":213},[203,66363,66364],{"class":318},"\"father\"",[203,66366,51365],{"class":213},[203,66368,66369,66371,66373,66375,66377,66380,66382,66384],{"class":205,"line":1843},[203,66370,51399],{"class":213},[203,66372,51669],{"class":51358},[203,66374,53544],{"class":2052},[203,66376,259],{"class":213},[203,66378,66379],{"class":318},"\"son\"",[203,66381,55372],{"class":213},[203,66383,51669],{"class":51358},[203,66385,51365],{"class":213},[203,66387,66388,66390,66392],{"class":205,"line":1848},[203,66389,52475],{"class":213},[203,66391,51669],{"class":51358},[203,66393,51365],{"class":213},[203,66395,66396,66398,66400],{"class":205,"line":1853},[203,66397,52202],{"class":213},[203,66399,51871],{"class":51358},[203,66401,51365],{"class":213},[203,66403,66404,66406,66409,66411,66413,66415,66417,66420],{"class":205,"line":1867},[203,66405,11311],{"class":209},[203,66407,66408],{"class":262}," fa",[203,66410,13654],{"class":209},[203,66412,54454],{"class":213},[203,66414,54457],{"class":2052},[203,66416,214],{"class":213},[203,66418,66419],{"class":318},"'.father'",[203,66421,220],{"class":213},[203,66423,66424,66426,66429,66431,66433,66435,66437,66440],{"class":205,"line":1872},[203,66425,11311],{"class":209},[203,66427,66428],{"class":262}," son",[203,66430,13654],{"class":209},[203,66432,54454],{"class":213},[203,66434,54457],{"class":2052},[203,66436,214],{"class":213},[203,66438,66439],{"class":318},"'.son'",[203,66441,220],{"class":213},[203,66443,66444,66446,66448,66450,66452,66454,66456],{"class":205,"line":2666},[203,66445,52465],{"class":213},[203,66447,57871],{"class":2052},[203,66449,214],{"class":213},[203,66451,57876],{"class":318},[203,66453,12525],{"class":213},[203,66455,54507],{"class":209},[203,66457,54510],{"class":213},[203,66459,66460,66462,66464,66467],{"class":205,"line":2680},[203,66461,58983],{"class":2052},[203,66463,214],{"class":213},[203,66465,66466],{"class":318},"'woshiu1'",[203,66468,220],{"class":213},[203,66470,66471,66473,66475],{"class":205,"line":2688},[203,66472,54593],{"class":213},[203,66474,1452],{"class":262},[203,66476,220],{"class":213},[203,66478,66479,66482,66484,66486,66488,66490,66492],{"class":205,"line":2693},[203,66480,66481],{"class":213},"    fa.",[203,66483,57871],{"class":2052},[203,66485,214],{"class":213},[203,66487,57876],{"class":318},[203,66489,12525],{"class":213},[203,66491,54507],{"class":209},[203,66493,54510],{"class":213},[203,66495,66496,66498,66500,66503],{"class":205,"line":2699},[203,66497,58983],{"class":2052},[203,66499,214],{"class":213},[203,66501,66502],{"class":318},"'1'",[203,66504,220],{"class":213},[203,66506,66507,66509,66511],{"class":205,"line":2705},[203,66508,54593],{"class":213},[203,66510,1452],{"class":262},[203,66512,220],{"class":213},[203,66514,66515,66518,66520,66522,66524,66526,66528],{"class":205,"line":2710},[203,66516,66517],{"class":213},"    son.",[203,66519,57871],{"class":2052},[203,66521,214],{"class":213},[203,66523,57876],{"class":318},[203,66525,12525],{"class":213},[203,66527,54507],{"class":209},[203,66529,54510],{"class":213},[203,66531,66532,66534,66536,66539],{"class":205,"line":8038},[203,66533,58983],{"class":2052},[203,66535,214],{"class":213},[203,66537,66538],{"class":318},"'2'",[203,66540,220],{"class":213},[203,66542,66543,66545,66547],{"class":205,"line":8062},[203,66544,54593],{"class":213},[203,66546,1452],{"class":262},[203,66548,220],{"class":213},[203,66550,66551,66553,66555],{"class":205,"line":8067},[203,66552,52475],{"class":213},[203,66554,51871],{"class":51358},[203,66556,51365],{"class":213},[203,66558,66559,66561,66563],{"class":205,"line":8073},[203,66560,51843],{"class":213},[203,66562,51858],{"class":51358},[203,66564,51365],{"class":213},[203,66566,66567],{"class":205,"line":8100},[203,66568,2489],{"emptyLinePlaceholder":131},[203,66570,66571,66573,66575],{"class":205,"line":8105},[203,66572,51843],{"class":213},[203,66574,50693],{"class":51358},[203,66576,51365],{"class":213},[19,66578,66579],{},[25,66580],{"alt":27,"src":66581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,66583,66584],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22088,66586,66588],{"id":66587},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,66590,66591],{},[25,66592],{"alt":27,"src":66593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,66595,66596],{},"反着来",[19,66598,66599],{},"注意是同名事件，比如都是‘click’",[22088,66601,66603],{"id":66602},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,66605,66606],{},[25,66607],{"alt":27,"src":66608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22088,66610,66612],{"id":66611},"_3314-解绑事件","3.3.1.4 解绑事件",[19,66614,66615],{},[25,66616],{"alt":27,"src":66617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,66619,66620],{},[25,66621],{"alt":27,"src":66622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22088,66624,66626],{"id":66625},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[157,66628,66629],{},[160,66630,66631],{},"事件类型的区别",[19,66633,66634],{},[25,66635],{"alt":27,"src":66636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,66638,66639],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[157,66641,66642],{"start":124},[160,66643,66644],{},"注册事件的区别",[19,66646,66647],{},[25,66648],{"alt":27,"src":66649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22088,66651,66653],{"id":66652},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,66655,66656],{},[25,66657],{"alt":27,"src":66658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,66660,66661],{},[25,66662],{"alt":27,"src":66663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[194,66665,66667],{"className":53125,"code":66666,"language":53127,"meta":27,"style":27},"\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",[200,66668,66669,66677,66694,66717,66725,66730,66735,66740,66744,66752,66760],{"__ignoreMap":27},[203,66670,66671,66673,66675],{"class":205,"line":206},[203,66672,1124],{"class":213},[203,66674,51858],{"class":51358},[203,66676,51365],{"class":213},[203,66678,66679,66681,66684,66687,66689,66692],{"class":205,"line":124},[203,66680,52202],{"class":213},[203,66682,66683],{"class":51358},"form",[203,66685,66686],{"class":2052}," action",[203,66688,259],{"class":213},[203,66690,66691],{"class":318},"\"http:\u002F\u002Fwww.itcast.cn\"",[203,66693,51365],{"class":213},[203,66695,66696,66698,66700,66702,66704,66707,66710,66712,66715],{"class":205,"line":1269},[203,66697,51399],{"class":213},[203,66699,53879],{"class":51358},[203,66701,53882],{"class":2052},[203,66703,259],{"class":213},[203,66705,66706],{"class":318},"\"submit\"",[203,66708,66709],{"class":2052}," value",[203,66711,259],{"class":213},[203,66713,66714],{"class":318},"\"免费注册\"",[203,66716,51365],{"class":213},[203,66718,66719,66721,66723],{"class":205,"line":1284},[203,66720,51399],{"class":213},[203,66722,51871],{"class":51358},[203,66724,51365],{"class":213},[203,66726,66727],{"class":205,"line":1290},[203,66728,66729],{"class":213},"      const form = document.querySelector('form')\n",[203,66731,66732],{"class":205,"line":1304},[203,66733,66734],{"class":213},"      form.addEventListener('submit', function (e) {\n",[203,66736,66737],{"class":205,"line":1310},[203,66738,66739],{"class":213},"        e.preventDefault()\n",[203,66741,66742],{"class":205,"line":1401},[203,66743,64873],{"class":213},[203,66745,66746,66748,66750],{"class":205,"line":1407},[203,66747,51834],{"class":213},[203,66749,51871],{"class":51358},[203,66751,51365],{"class":213},[203,66753,66754,66756,66758],{"class":205,"line":1419},[203,66755,52475],{"class":213},[203,66757,66683],{"class":51358},[203,66759,51365],{"class":213},[203,66761,66762,66764,66766],{"class":205,"line":1701},[203,66763,51843],{"class":213},[203,66765,51858],{"class":51358},[203,66767,51365],{"class":213},[19,66769,66770],{},"点击不在跳转！！！",[174,66772,66774],{"id":66773},"_332-事件委托","3.3.2 事件委托",[19,66776,66777],{},[25,66778],{"alt":27,"src":66779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[194,66781,66783],{"className":50691,"code":66782,"language":50693,"meta":27,"style":27},"\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",[200,66784,66785,66795,66809,66813,66821,66835,66855,66867,66875,66879,66887,66895,66907,66919,66931,66943,66955,66968,66976,66984,66989,67008,67029,67034,67039,67044,67049,67058,67062,67072,67076,67081,67086,67100,67110,67114,67118,67126,67134,67138],{"__ignoreMap":27},[203,66786,66787,66789,66791,66793],{"class":205,"line":206},[203,66788,51355],{"class":213},[203,66790,51359],{"class":51358},[203,66792,51362],{"class":2052},[203,66794,51365],{"class":213},[203,66796,66797,66799,66801,66803,66805,66807],{"class":205,"line":124},[203,66798,1124],{"class":213},[203,66800,50693],{"class":51358},[203,66802,51374],{"class":2052},[203,66804,259],{"class":213},[203,66806,51379],{"class":318},[203,66808,51365],{"class":213},[203,66810,66811],{"class":205,"line":1269},[203,66812,2489],{"emptyLinePlaceholder":131},[203,66814,66815,66817,66819],{"class":205,"line":1284},[203,66816,1124],{"class":213},[203,66818,51392],{"class":51358},[203,66820,51365],{"class":213},[203,66822,66823,66825,66827,66829,66831,66833],{"class":205,"line":1290},[203,66824,52202],{"class":213},[203,66826,51402],{"class":51358},[203,66828,51405],{"class":2052},[203,66830,259],{"class":213},[203,66832,51410],{"class":318},[203,66834,51365],{"class":213},[203,66836,66837,66839,66841,66843,66845,66847,66849,66851,66853],{"class":205,"line":1304},[203,66838,52202],{"class":213},[203,66840,51402],{"class":51358},[203,66842,15010],{"class":2052},[203,66844,259],{"class":213},[203,66846,51449],{"class":318},[203,66848,51429],{"class":2052},[203,66850,259],{"class":213},[203,66852,51456],{"class":318},[203,66854,51365],{"class":213},[203,66856,66857,66859,66861,66863,66865],{"class":205,"line":1310},[203,66858,52202],{"class":213},[203,66860,51465],{"class":51358},[203,66862,51468],{"class":213},[203,66864,51465],{"class":51358},[203,66866,51365],{"class":213},[203,66868,66869,66871,66873],{"class":205,"line":1401},[203,66870,51843],{"class":213},[203,66872,51392],{"class":51358},[203,66874,51365],{"class":213},[203,66876,66877],{"class":205,"line":1407},[203,66878,2489],{"emptyLinePlaceholder":131},[203,66880,66881,66883,66885],{"class":205,"line":1419},[203,66882,1124],{"class":213},[203,66884,51858],{"class":51358},[203,66886,51365],{"class":213},[203,66888,66889,66891,66893],{"class":205,"line":1701},[203,66890,52202],{"class":213},[203,66892,1221],{"class":51358},[203,66894,51365],{"class":213},[203,66896,66897,66899,66901,66903,66905],{"class":205,"line":1706},[203,66898,51399],{"class":213},[203,66900,160],{"class":51358},[203,66902,54024],{"class":213},[203,66904,160],{"class":51358},[203,66906,51365],{"class":213},[203,66908,66909,66911,66913,66915,66917],{"class":205,"line":1712},[203,66910,51399],{"class":213},[203,66912,160],{"class":51358},[203,66914,54043],{"class":213},[203,66916,160],{"class":51358},[203,66918,51365],{"class":213},[203,66920,66921,66923,66925,66927,66929],{"class":205,"line":1717},[203,66922,51399],{"class":213},[203,66924,160],{"class":51358},[203,66926,54062],{"class":213},[203,66928,160],{"class":51358},[203,66930,51365],{"class":213},[203,66932,66933,66935,66937,66939,66941],{"class":205,"line":1731},[203,66934,51399],{"class":213},[203,66936,160],{"class":51358},[203,66938,54081],{"class":213},[203,66940,160],{"class":51358},[203,66942,51365],{"class":213},[203,66944,66945,66947,66949,66951,66953],{"class":205,"line":1736},[203,66946,51399],{"class":213},[203,66948,160],{"class":51358},[203,66950,54100],{"class":213},[203,66952,160],{"class":51358},[203,66954,51365],{"class":213},[203,66956,66957,66959,66961,66964,66966],{"class":205,"line":1742},[203,66958,51399],{"class":213},[203,66960,19],{"class":51358},[203,66962,66963],{"class":213},">我不需要变色\u003C\u002F",[203,66965,19],{"class":51358},[203,66967,51365],{"class":213},[203,66969,66970,66972,66974],{"class":205,"line":1763},[203,66971,52475],{"class":213},[203,66973,1221],{"class":51358},[203,66975,51365],{"class":213},[203,66977,66978,66980,66982],{"class":205,"line":1768},[203,66979,52202],{"class":213},[203,66981,51871],{"class":51358},[203,66983,51365],{"class":213},[203,66985,66986],{"class":205,"line":1782},[203,66987,66988],{"class":272},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[203,66990,66991,66993,66995,66997,66999,67001,67003,67006],{"class":205,"line":1787},[203,66992,11311],{"class":209},[203,66994,61350],{"class":262},[203,66996,13654],{"class":209},[203,66998,54454],{"class":213},[203,67000,54457],{"class":2052},[203,67002,214],{"class":213},[203,67004,67005],{"class":318},"'ul'",[203,67007,220],{"class":213},[203,67009,67010,67013,67015,67017,67019,67021,67023,67025,67027],{"class":205,"line":1816},[203,67011,67012],{"class":213},"    ul.",[203,67014,57871],{"class":2052},[203,67016,214],{"class":213},[203,67018,57876],{"class":318},[203,67020,12525],{"class":213},[203,67022,54507],{"class":209},[203,67024,1747],{"class":213},[203,67026,288],{"class":5306},[203,67028,12532],{"class":213},[203,67030,67031],{"class":205,"line":1821},[203,67032,67033],{"class":272},"      \u002F\u002F alert(1)\n",[203,67035,67036],{"class":205,"line":1838},[203,67037,67038],{"class":272},"      \u002F\u002F e.target就是我们点击的对象\n",[203,67040,67041],{"class":205,"line":1843},[203,67042,67043],{"class":272},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[203,67045,67046],{"class":205,"line":1848},[203,67047,67048],{"class":272},"      \u002F\u002F e.target.style.color = 'red'\n",[203,67050,67051,67053,67055],{"class":205,"line":1853},[203,67052,58302],{"class":213},[203,67054,58305],{"class":2052},[203,67056,67057],{"class":213},"(e)\n",[203,67059,67060],{"class":205,"line":1867},[203,67061,2489],{"emptyLinePlaceholder":131},[203,67063,67064,67066,67069],{"class":205,"line":1872},[203,67065,58302],{"class":213},[203,67067,67068],{"class":2052},"dir",[203,67070,67071],{"class":213},"(e.target)\n",[203,67073,67074],{"class":205,"line":2666},[203,67075,2489],{"emptyLinePlaceholder":131},[203,67077,67078],{"class":205,"line":2680},[203,67079,67080],{"class":272},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[203,67082,67083],{"class":205,"line":2688},[203,67084,67085],{"class":272},"      \u002F\u002F 通过tagName来进行判断\n",[203,67087,67088,67090,67093,67095,67098],{"class":205,"line":2693},[203,67089,54538],{"class":209},[203,67091,67092],{"class":213}," (e.target.tagName ",[203,67094,54544],{"class":209},[203,67096,67097],{"class":318}," 'LI'",[203,67099,12532],{"class":213},[203,67101,67102,67105,67107],{"class":205,"line":2699},[203,67103,67104],{"class":213},"        e.target.style.color ",[203,67106,259],{"class":209},[203,67108,67109],{"class":318}," 'red'\n",[203,67111,67112],{"class":205,"line":2705},[203,67113,52456],{"class":213},[203,67115,67116],{"class":205,"line":2710},[203,67117,33519],{"class":213},[203,67119,67120,67122,67124],{"class":205,"line":8038},[203,67121,52475],{"class":213},[203,67123,51871],{"class":51358},[203,67125,51365],{"class":213},[203,67127,67128,67130,67132],{"class":205,"line":8062},[203,67129,51843],{"class":213},[203,67131,51858],{"class":51358},[203,67133,51365],{"class":213},[203,67135,67136],{"class":205,"line":8067},[203,67137,2489],{"emptyLinePlaceholder":131},[203,67139,67140,67142,67144],{"class":205,"line":8073},[203,67141,51843],{"class":213},[203,67143,50693],{"class":51358},[203,67145,51365],{"class":213},[19,67147,67148],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67150,67151],{},"if(e.target.ragName==='P') {}",[19,67153,67154],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67156,67157],{},"通过事件委托的方式实现tab栏切换改造：",[19,67159,67160],{},"一定要记住自定义属性！！！！！！",[19,67162,67163],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67165,67166],{},"id是自定义的属性名",[19,67168,67169],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[194,67171,67173],{"className":50691,"code":67172,"language":50693,"meta":27,"style":27},"\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",[200,67174,67175,67185,67199,67203,67211,67225,67245,67265,67277,67285,67291,67301,67311,67315,67319,67325,67337,67349,67361,67377,67381,67385,67391,67403,67415,67427,67437,67447,67451,67455,67463,67475,67485,67497,67501,67505,67513,67523,67533,67543,67547,67551,67561,67575,67587,67591,67595,67607,67617,67633,67643,67647,67651,67665,67675,67685,67689,67693,67699,67713,67717,67721,67729,67739,67743,67747,67756,67766,67770,67778,67786,67790,67798,67812,67826,67838,67846,67885,67917,67949,67981,68013,68021,68029,68043,68077,68111,68145,68179,68213,68221,68229,68237,68242,68247,68266,68271,68291,68299,68304,68317,68338,68351,68355,68360,68365,68378,68398,68426,68430,68434,68438,68446,68454,68458],{"__ignoreMap":27},[203,67176,67177,67179,67181,67183],{"class":205,"line":206},[203,67178,51355],{"class":213},[203,67180,51359],{"class":51358},[203,67182,51362],{"class":2052},[203,67184,51365],{"class":213},[203,67186,67187,67189,67191,67193,67195,67197],{"class":205,"line":124},[203,67188,1124],{"class":213},[203,67190,50693],{"class":51358},[203,67192,51374],{"class":2052},[203,67194,259],{"class":213},[203,67196,51379],{"class":318},[203,67198,51365],{"class":213},[203,67200,67201],{"class":205,"line":1269},[203,67202,2489],{"emptyLinePlaceholder":131},[203,67204,67205,67207,67209],{"class":205,"line":1284},[203,67206,1124],{"class":213},[203,67208,51392],{"class":51358},[203,67210,51365],{"class":213},[203,67212,67213,67215,67217,67219,67221,67223],{"class":205,"line":1290},[203,67214,52202],{"class":213},[203,67216,51402],{"class":51358},[203,67218,51405],{"class":2052},[203,67220,259],{"class":213},[203,67222,51410],{"class":318},[203,67224,59185],{"class":213},[203,67226,67227,67229,67231,67233,67235,67237,67239,67241,67243],{"class":205,"line":1304},[203,67228,52202],{"class":213},[203,67230,51402],{"class":51358},[203,67232,51421],{"class":2052},[203,67234,259],{"class":213},[203,67236,51426],{"class":318},[203,67238,51429],{"class":2052},[203,67240,259],{"class":213},[203,67242,51434],{"class":318},[203,67244,59185],{"class":213},[203,67246,67247,67249,67251,67253,67255,67257,67259,67261,67263],{"class":205,"line":1310},[203,67248,52202],{"class":213},[203,67250,51402],{"class":51358},[203,67252,15010],{"class":2052},[203,67254,259],{"class":213},[203,67256,51449],{"class":318},[203,67258,51429],{"class":2052},[203,67260,259],{"class":213},[203,67262,51456],{"class":318},[203,67264,59185],{"class":213},[203,67266,67267,67269,67271,67273,67275],{"class":205,"line":1401},[203,67268,52202],{"class":213},[203,67270,51465],{"class":51358},[203,67272,63683],{"class":213},[203,67274,51465],{"class":51358},[203,67276,51365],{"class":213},[203,67278,67279,67281,67283],{"class":205,"line":1407},[203,67280,52202],{"class":213},[203,67282,5216],{"class":51358},[203,67284,51365],{"class":213},[203,67286,67287,67289],{"class":205,"line":1419},[203,67288,6493],{"class":51358},[203,67290,15662],{"class":213},[203,67292,67293,67295,67297,67299],{"class":205,"line":1701},[203,67294,54764],{"class":262},[203,67296,51495],{"class":213},[203,67298,405],{"class":262},[203,67300,1380],{"class":213},[203,67302,67303,67305,67307,67309],{"class":205,"line":1706},[203,67304,54753],{"class":262},[203,67306,51495],{"class":213},[203,67308,405],{"class":262},[203,67310,1380],{"class":213},[203,67312,67313],{"class":205,"line":1712},[203,67314,2276],{"class":213},[203,67316,67317],{"class":205,"line":1717},[203,67318,2489],{"emptyLinePlaceholder":131},[203,67320,67321,67323],{"class":205,"line":1731},[203,67322,63734],{"class":2052},[203,67324,15662],{"class":213},[203,67326,67327,67329,67331,67333,67335],{"class":205,"line":1736},[203,67328,54829],{"class":262},[203,67330,51495],{"class":213},[203,67332,63745],{"class":262},[203,67334,51550],{"class":209},[203,67336,1380],{"class":213},[203,67338,67339,67341,67343,67345,67347],{"class":205,"line":1742},[203,67340,54843],{"class":262},[203,67342,51495],{"class":213},[203,67344,63758],{"class":262},[203,67346,51550],{"class":209},[203,67348,1380],{"class":213},[203,67350,67351,67353,67355,67357,67359],{"class":205,"line":1763},[203,67352,54764],{"class":262},[203,67354,51495],{"class":213},[203,67356,914],{"class":262},[203,67358,51550],{"class":209},[203,67360,1380],{"class":213},[203,67362,67363,67365,67367,67369,67371,67373,67375],{"class":205,"line":1768},[203,67364,62035],{"class":262},[203,67366,51495],{"class":213},[203,67368,431],{"class":262},[203,67370,51550],{"class":209},[203,67372,51579],{"class":262},[203,67374,62302],{"class":262},[203,67376,1380],{"class":213},[203,67378,67379],{"class":205,"line":1782},[203,67380,2276],{"class":213},[203,67382,67383],{"class":205,"line":1787},[203,67384,2489],{"emptyLinePlaceholder":131},[203,67386,67387,67389],{"class":205,"line":1816},[203,67388,63803],{"class":2052},[203,67390,15662],{"class":213},[203,67392,67393,67395,67397,67399,67401],{"class":205,"line":1821},[203,67394,54829],{"class":262},[203,67396,51495],{"class":213},[203,67398,525],{"class":262},[203,67400,542],{"class":209},[203,67402,1380],{"class":213},[203,67404,67405,67407,67409,67411,67413],{"class":205,"line":1838},[203,67406,54843],{"class":262},[203,67408,51495],{"class":213},[203,67410,1121],{"class":262},[203,67412,51550],{"class":209},[203,67414,1380],{"class":213},[203,67416,67417,67419,67421,67423,67425],{"class":205,"line":1843},[203,67418,57417],{"class":262},[203,67420,51495],{"class":213},[203,67422,1121],{"class":262},[203,67424,51550],{"class":209},[203,67426,1380],{"class":213},[203,67428,67429,67431,67433,67435],{"class":205,"line":1848},[203,67430,55067],{"class":262},[203,67432,51495],{"class":213},[203,67434,51535],{"class":262},[203,67436,1380],{"class":213},[203,67438,67439,67441,67443,67445],{"class":205,"line":1853},[203,67440,55078],{"class":262},[203,67442,51495],{"class":213},[203,67444,51726],{"class":262},[203,67446,1380],{"class":213},[203,67448,67449],{"class":205,"line":1867},[203,67450,2276],{"class":213},[203,67452,67453],{"class":205,"line":1872},[203,67454,2489],{"emptyLinePlaceholder":131},[203,67456,67457,67459,67461],{"class":205,"line":2666},[203,67458,63803],{"class":2052},[203,67460,63876],{"class":51358},[203,67462,15662],{"class":213},[203,67464,67465,67467,67469,67471,67473],{"class":205,"line":2680},[203,67466,54980],{"class":262},[203,67468,51495],{"class":213},[203,67470,1014],{"class":262},[203,67472,51550],{"class":209},[203,67474,1380],{"class":213},[203,67476,67477,67479,67481,67483],{"class":205,"line":2688},[203,67478,62392],{"class":262},[203,67480,51495],{"class":213},[203,67482,63899],{"class":262},[203,67484,1380],{"class":213},[203,67486,67487,67489,67491,67493,67495],{"class":205,"line":2693},[203,67488,62058],{"class":262},[203,67490,51495],{"class":213},[203,67492,914],{"class":262},[203,67494,51550],{"class":209},[203,67496,1380],{"class":213},[203,67498,67499],{"class":205,"line":2699},[203,67500,2276],{"class":213},[203,67502,67503],{"class":205,"line":2705},[203,67504,2489],{"emptyLinePlaceholder":131},[203,67506,67507,67509,67511],{"class":205,"line":2710},[203,67508,63803],{"class":2052},[203,67510,61350],{"class":51358},[203,67512,15662],{"class":213},[203,67514,67515,67517,67519,67521],{"class":205,"line":8038},[203,67516,54790],{"class":262},[203,67518,51495],{"class":213},[203,67520,54795],{"class":262},[203,67522,1380],{"class":213},[203,67524,67525,67527,67529,67531],{"class":205,"line":8062},[203,67526,55067],{"class":262},[203,67528,51495],{"class":213},[203,67530,51535],{"class":262},[203,67532,1380],{"class":213},[203,67534,67535,67537,67539,67541],{"class":205,"line":8067},[203,67536,55078],{"class":262},[203,67538,51495],{"class":213},[203,67540,51638],{"class":262},[203,67542,1380],{"class":213},[203,67544,67545],{"class":205,"line":8073},[203,67546,2276],{"class":213},[203,67548,67549],{"class":205,"line":8100},[203,67550,2489],{"emptyLinePlaceholder":131},[203,67552,67553,67555,67557,67559],{"class":205,"line":8105},[203,67554,63803],{"class":2052},[203,67556,61350],{"class":51358},[203,67558,55133],{"class":51358},[203,67560,15662],{"class":213},[203,67562,67563,67565,67567,67569,67571,67573],{"class":205,"line":8111},[203,67564,54764],{"class":262},[203,67566,51495],{"class":213},[203,67568,405],{"class":262},[203,67570,9040],{"class":262},[203,67572,51550],{"class":209},[203,67574,1380],{"class":213},[203,67576,67577,67579,67581,67583,67585],{"class":205,"line":8123},[203,67578,54980],{"class":262},[203,67580,51495],{"class":213},[203,67582,763],{"class":262},[203,67584,51550],{"class":209},[203,67586,1380],{"class":213},[203,67588,67589],{"class":205,"line":8135},[203,67590,2276],{"class":213},[203,67592,67593],{"class":205,"line":8147},[203,67594,2489],{"emptyLinePlaceholder":131},[203,67596,67597,67599,67601,67603,67605],{"class":205,"line":9806},[203,67598,63803],{"class":2052},[203,67600,61350],{"class":51358},[203,67602,55133],{"class":51358},[203,67604,1488],{"class":51358},[203,67606,15662],{"class":213},[203,67608,67609,67611,67613,67615],{"class":205,"line":9831},[203,67610,64028],{"class":262},[203,67612,51495],{"class":213},[203,67614,54795],{"class":262},[203,67616,1380],{"class":213},[203,67618,67619,67621,67623,67625,67627,67629,67631],{"class":205,"line":9854},[203,67620,62290],{"class":262},[203,67622,51495],{"class":213},[203,67624,291],{"class":262},[203,67626,51550],{"class":209},[203,67628,51579],{"class":262},[203,67630,64049],{"class":262},[203,67632,1380],{"class":213},[203,67634,67635,67637,67639,67641],{"class":205,"line":9878},[203,67636,57474],{"class":262},[203,67638,51495],{"class":213},[203,67640,62427],{"class":262},[203,67642,1380],{"class":213},[203,67644,67645],{"class":205,"line":9883},[203,67646,2276],{"class":213},[203,67648,67649],{"class":205,"line":9888},[203,67650,2489],{"emptyLinePlaceholder":131},[203,67652,67653,67655,67657,67659,67661,67663],{"class":205,"line":9893},[203,67654,63803],{"class":2052},[203,67656,61350],{"class":51358},[203,67658,55133],{"class":51358},[203,67660,1488],{"class":51358},[203,67662,64082],{"class":2052},[203,67664,15662],{"class":213},[203,67666,67667,67669,67671,67673],{"class":205,"line":9902},[203,67668,61849],{"class":262},[203,67670,51495],{"class":213},[203,67672,64093],{"class":262},[203,67674,1380],{"class":213},[203,67676,67677,67679,67681,67683],{"class":205,"line":9907},[203,67678,57474],{"class":262},[203,67680,51495],{"class":213},[203,67682,64093],{"class":262},[203,67684,1380],{"class":213},[203,67686,67687],{"class":205,"line":9913},[203,67688,2276],{"class":213},[203,67690,67691],{"class":205,"line":9934},[203,67692,2489],{"emptyLinePlaceholder":131},[203,67694,67695,67697],{"class":205,"line":9940},[203,67696,64118],{"class":2052},[203,67698,15662],{"class":213},[203,67700,67701,67703,67705,67707,67709,67711],{"class":205,"line":9954},[203,67702,54753],{"class":262},[203,67704,51495],{"class":213},[203,67706,405],{"class":262},[203,67708,64131],{"class":262},[203,67710,51550],{"class":209},[203,67712,1380],{"class":213},[203,67714,67715],{"class":205,"line":9960},[203,67716,2276],{"class":213},[203,67718,67719],{"class":205,"line":9987},[203,67720,2489],{"emptyLinePlaceholder":131},[203,67722,67723,67725,67727],{"class":205,"line":9996},[203,67724,64118],{"class":2052},[203,67726,62232],{"class":2052},[203,67728,15662],{"class":213},[203,67730,67731,67733,67735,67737],{"class":205,"line":10002},[203,67732,55067],{"class":262},[203,67734,51495],{"class":213},[203,67736,54795],{"class":262},[203,67738,1380],{"class":213},[203,67740,67741],{"class":205,"line":10010},[203,67742,2276],{"class":213},[203,67744,67745],{"class":205,"line":10015},[203,67746,2489],{"emptyLinePlaceholder":131},[203,67748,67749,67751,67754],{"class":205,"line":16694},[203,67750,64118],{"class":2052},[203,67752,67753],{"class":2052}," .active",[203,67755,15662],{"class":213},[203,67757,67758,67760,67762,67764],{"class":205,"line":16700},[203,67759,55067],{"class":262},[203,67761,51495],{"class":213},[203,67763,60927],{"class":262},[203,67765,1380],{"class":213},[203,67767,67768],{"class":205,"line":16723},[203,67769,2276],{"class":213},[203,67771,67772,67774,67776],{"class":205,"line":16729},[203,67773,52475],{"class":213},[203,67775,5216],{"class":51358},[203,67777,51365],{"class":213},[203,67779,67780,67782,67784],{"class":205,"line":16752},[203,67781,51843],{"class":213},[203,67783,51392],{"class":51358},[203,67785,51365],{"class":213},[203,67787,67788],{"class":205,"line":16766},[203,67789,2489],{"emptyLinePlaceholder":131},[203,67791,67792,67794,67796],{"class":205,"line":16786},[203,67793,1124],{"class":213},[203,67795,51858],{"class":51358},[203,67797,51365],{"class":213},[203,67799,67800,67802,67804,67806,67808,67810],{"class":205,"line":16792},[203,67801,52202],{"class":213},[203,67803,51669],{"class":51358},[203,67805,53544],{"class":2052},[203,67807,259],{"class":213},[203,67809,64233],{"class":318},[203,67811,51365],{"class":213},[203,67813,67814,67816,67818,67820,67822,67824],{"class":205,"line":16803},[203,67815,51399],{"class":213},[203,67817,51669],{"class":51358},[203,67819,53544],{"class":2052},[203,67821,259],{"class":213},[203,67823,64248],{"class":318},[203,67825,51365],{"class":213},[203,67827,67828,67830,67832,67834,67836],{"class":205,"line":16826},[203,67829,55292],{"class":213},[203,67831,174],{"class":51358},[203,67833,64259],{"class":213},[203,67835,174],{"class":51358},[203,67837,51365],{"class":213},[203,67839,67840,67842,67844],{"class":205,"line":16848},[203,67841,55292],{"class":213},[203,67843,1221],{"class":51358},[203,67845,51365],{"class":213},[203,67847,67848,67850,67852,67854,67856,67858,67860,67862,67864,67866,67868,67870,67872,67875,67877,67879,67881,67883],{"class":205,"line":16853},[203,67849,55360],{"class":213},[203,67851,160],{"class":51358},[203,67853,61110],{"class":213},[203,67855,452],{"class":51358},[203,67857,53544],{"class":2052},[203,67859,259],{"class":213},[203,67861,59764],{"class":318},[203,67863,61115],{"class":2052},[203,67865,259],{"class":213},[203,67867,64294],{"class":318},[203,67869,54009],{"class":2052},[203,67871,259],{"class":213},[203,67873,67874],{"class":318},"\"0\"",[203,67876,64297],{"class":213},[203,67878,452],{"class":51358},[203,67880,55372],{"class":213},[203,67882,160],{"class":51358},[203,67884,51365],{"class":213},[203,67886,67887,67889,67891,67893,67895,67897,67899,67901,67903,67905,67907,67909,67911,67913,67915],{"class":205,"line":16859},[203,67888,55360],{"class":213},[203,67890,160],{"class":51358},[203,67892,61110],{"class":213},[203,67894,452],{"class":51358},[203,67896,61115],{"class":2052},[203,67898,259],{"class":213},[203,67900,64294],{"class":318},[203,67902,54009],{"class":2052},[203,67904,259],{"class":213},[203,67906,3767],{"class":318},[203,67908,64324],{"class":213},[203,67910,452],{"class":51358},[203,67912,55372],{"class":213},[203,67914,160],{"class":51358},[203,67916,51365],{"class":213},[203,67918,67919,67921,67923,67925,67927,67929,67931,67933,67935,67937,67939,67941,67943,67945,67947],{"class":205,"line":16873},[203,67920,55360],{"class":213},[203,67922,160],{"class":51358},[203,67924,61110],{"class":213},[203,67926,452],{"class":51358},[203,67928,61115],{"class":2052},[203,67930,259],{"class":213},[203,67932,64294],{"class":318},[203,67934,54009],{"class":2052},[203,67936,259],{"class":213},[203,67938,3790],{"class":318},[203,67940,64351],{"class":213},[203,67942,452],{"class":51358},[203,67944,55372],{"class":213},[203,67946,160],{"class":51358},[203,67948,51365],{"class":213},[203,67950,67951,67953,67955,67957,67959,67961,67963,67965,67967,67969,67971,67973,67975,67977,67979],{"class":205,"line":16886},[203,67952,55360],{"class":213},[203,67954,160],{"class":51358},[203,67956,61110],{"class":213},[203,67958,452],{"class":51358},[203,67960,61115],{"class":2052},[203,67962,259],{"class":213},[203,67964,64294],{"class":318},[203,67966,54009],{"class":2052},[203,67968,259],{"class":213},[203,67970,3803],{"class":318},[203,67972,64378],{"class":213},[203,67974,452],{"class":51358},[203,67976,55372],{"class":213},[203,67978,160],{"class":51358},[203,67980,51365],{"class":213},[203,67982,67983,67985,67987,67989,67991,67993,67995,67997,67999,68001,68003,68005,68007,68009,68011],{"class":205,"line":16891},[203,67984,55360],{"class":213},[203,67986,160],{"class":51358},[203,67988,61110],{"class":213},[203,67990,452],{"class":51358},[203,67992,61115],{"class":2052},[203,67994,259],{"class":213},[203,67996,64294],{"class":318},[203,67998,54009],{"class":2052},[203,68000,259],{"class":213},[203,68002,3816],{"class":318},[203,68004,64405],{"class":213},[203,68006,452],{"class":51358},[203,68008,55372],{"class":213},[203,68010,160],{"class":51358},[203,68012,51365],{"class":213},[203,68014,68015,68017,68019],{"class":205,"line":16905},[203,68016,55465],{"class":213},[203,68018,1221],{"class":51358},[203,68020,51365],{"class":213},[203,68022,68023,68025,68027],{"class":205,"line":16910},[203,68024,51834],{"class":213},[203,68026,51669],{"class":51358},[203,68028,51365],{"class":213},[203,68030,68031,68033,68035,68037,68039,68041],{"class":205,"line":16916},[203,68032,51399],{"class":213},[203,68034,51669],{"class":51358},[203,68036,53544],{"class":2052},[203,68038,259],{"class":213},[203,68040,64442],{"class":318},[203,68042,51365],{"class":213},[203,68044,68045,68047,68049,68051,68053,68055,68057,68059,68061,68063,68065,68067,68069,68071,68073,68075],{"class":205,"line":16921},[203,68046,55292],{"class":213},[203,68048,51669],{"class":51358},[203,68050,53544],{"class":2052},[203,68052,259],{"class":213},[203,68054,64457],{"class":318},[203,68056,61110],{"class":213},[203,68058,25],{"class":51358},[203,68060,55297],{"class":2052},[203,68062,259],{"class":213},[203,68064,64468],{"class":318},[203,68066,55305],{"class":2052},[203,68068,259],{"class":213},[203,68070,7742],{"class":318},[203,68072,64477],{"class":213},[203,68074,51669],{"class":51358},[203,68076,51365],{"class":213},[203,68078,68079,68081,68083,68085,68087,68089,68091,68093,68095,68097,68099,68101,68103,68105,68107,68109],{"class":205,"line":16935},[203,68080,55292],{"class":213},[203,68082,51669],{"class":51358},[203,68084,53544],{"class":2052},[203,68086,259],{"class":213},[203,68088,62681],{"class":318},[203,68090,61110],{"class":213},[203,68092,25],{"class":51358},[203,68094,55297],{"class":2052},[203,68096,259],{"class":213},[203,68098,64504],{"class":318},[203,68100,55305],{"class":2052},[203,68102,259],{"class":213},[203,68104,7742],{"class":318},[203,68106,64477],{"class":213},[203,68108,51669],{"class":51358},[203,68110,51365],{"class":213},[203,68112,68113,68115,68117,68119,68121,68123,68125,68127,68129,68131,68133,68135,68137,68139,68141,68143],{"class":205,"line":16940},[203,68114,55292],{"class":213},[203,68116,51669],{"class":51358},[203,68118,53544],{"class":2052},[203,68120,259],{"class":213},[203,68122,62681],{"class":318},[203,68124,61110],{"class":213},[203,68126,25],{"class":51358},[203,68128,55297],{"class":2052},[203,68130,259],{"class":213},[203,68132,64539],{"class":318},[203,68134,55305],{"class":2052},[203,68136,259],{"class":213},[203,68138,7742],{"class":318},[203,68140,64477],{"class":213},[203,68142,51669],{"class":51358},[203,68144,51365],{"class":213},[203,68146,68147,68149,68151,68153,68155,68157,68159,68161,68163,68165,68167,68169,68171,68173,68175,68177],{"class":205,"line":16945},[203,68148,55292],{"class":213},[203,68150,51669],{"class":51358},[203,68152,53544],{"class":2052},[203,68154,259],{"class":213},[203,68156,62681],{"class":318},[203,68158,61110],{"class":213},[203,68160,25],{"class":51358},[203,68162,55297],{"class":2052},[203,68164,259],{"class":213},[203,68166,64574],{"class":318},[203,68168,55305],{"class":2052},[203,68170,259],{"class":213},[203,68172,7742],{"class":318},[203,68174,64477],{"class":213},[203,68176,51669],{"class":51358},[203,68178,51365],{"class":213},[203,68180,68181,68183,68185,68187,68189,68191,68193,68195,68197,68199,68201,68203,68205,68207,68209,68211],{"class":205,"line":16959},[203,68182,55292],{"class":213},[203,68184,51669],{"class":51358},[203,68186,53544],{"class":2052},[203,68188,259],{"class":213},[203,68190,62681],{"class":318},[203,68192,61110],{"class":213},[203,68194,25],{"class":51358},[203,68196,55297],{"class":2052},[203,68198,259],{"class":213},[203,68200,64609],{"class":318},[203,68202,55305],{"class":2052},[203,68204,259],{"class":213},[203,68206,7742],{"class":318},[203,68208,64477],{"class":213},[203,68210,51669],{"class":51358},[203,68212,51365],{"class":213},[203,68214,68215,68217,68219],{"class":205,"line":16971},[203,68216,51834],{"class":213},[203,68218,51669],{"class":51358},[203,68220,51365],{"class":213},[203,68222,68223,68225,68227],{"class":205,"line":16976},[203,68224,52475],{"class":213},[203,68226,51669],{"class":51358},[203,68228,51365],{"class":213},[203,68230,68231,68233,68235],{"class":205,"line":16989},[203,68232,52202],{"class":213},[203,68234,51871],{"class":51358},[203,68236,51365],{"class":213},[203,68238,68239],{"class":205,"line":16994},[203,68240,68241],{"class":272},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[203,68243,68244],{"class":205,"line":16999},[203,68245,68246],{"class":272},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[203,68248,68249,68251,68253,68255,68257,68259,68261,68264],{"class":205,"line":17004},[203,68250,11311],{"class":209},[203,68252,61350],{"class":262},[203,68254,13654],{"class":209},[203,68256,54454],{"class":213},[203,68258,54457],{"class":2052},[203,68260,214],{"class":213},[203,68262,68263],{"class":318},"'.tab-nav ul'",[203,68265,220],{"class":213},[203,68267,68268],{"class":205,"line":17017},[203,68269,68270],{"class":272},"    \u002F\u002F 2.添加事件\n",[203,68272,68273,68275,68277,68279,68281,68283,68285,68287,68289],{"class":205,"line":17022},[203,68274,67012],{"class":213},[203,68276,57871],{"class":2052},[203,68278,214],{"class":213},[203,68280,57876],{"class":318},[203,68282,12525],{"class":213},[203,68284,54507],{"class":209},[203,68286,1747],{"class":213},[203,68288,288],{"class":5306},[203,68290,12532],{"class":213},[203,68292,68293,68295,68297],{"class":205,"line":32691},[203,68294,58302],{"class":213},[203,68296,67068],{"class":2052},[203,68298,67071],{"class":213},[203,68300,68301],{"class":205,"line":32697},[203,68302,68303],{"class":272},"      \u002F\u002Fe.targer是我们点击的对象\n",[203,68305,68306,68308,68310,68312,68315],{"class":205,"line":32703},[203,68307,54538],{"class":209},[203,68309,67092],{"class":213},[203,68311,54544],{"class":209},[203,68313,68314],{"class":318}," 'A'",[203,68316,12532],{"class":213},[203,68318,68319,68321,68323,68325,68328,68330,68332,68334,68336],{"class":205,"line":32709},[203,68320,51983],{"class":213},[203,68322,54457],{"class":2052},[203,68324,214],{"class":213},[203,68326,68327],{"class":318},"'.active'",[203,68329,57061],{"class":213},[203,68331,57064],{"class":2052},[203,68333,214],{"class":213},[203,68335,64772],{"class":318},[203,68337,220],{"class":213},[203,68339,68340,68343,68345,68347,68349],{"class":205,"line":32715},[203,68341,68342],{"class":213},"        e.target.classList.",[203,68344,5424],{"class":2052},[203,68346,214],{"class":213},[203,68348,64772],{"class":318},[203,68350,220],{"class":213},[203,68352,68353],{"class":205,"line":32726},[203,68354,2489],{"emptyLinePlaceholder":131},[203,68356,68357],{"class":205,"line":32732},[203,68358,68359],{"class":272},"        \u002F\u002F 下面大盒子模块\n",[203,68361,68362],{"class":205,"line":32752},[203,68363,68364],{"class":272},"        \u002F\u002F console.log(e.target.dataset.id)\n",[203,68366,68367,68369,68371,68373,68375],{"class":205,"line":32758},[203,68368,61328],{"class":209},[203,68370,3121],{"class":262},[203,68372,13654],{"class":209},[203,68374,45624],{"class":209},[203,68376,68377],{"class":213},"e.target.dataset.id\n",[203,68379,68380,68382,68384,68386,68388,68390,68392,68394,68396],{"class":205,"line":32769},[203,68381,51983],{"class":213},[203,68383,54457],{"class":2052},[203,68385,214],{"class":213},[203,68387,64820],{"class":318},[203,68389,57061],{"class":213},[203,68391,57064],{"class":2052},[203,68393,214],{"class":213},[203,68395,64772],{"class":318},[203,68397,220],{"class":213},[203,68399,68400,68402,68404,68406,68408,68410,68412,68414,68416,68418,68420,68422,68424],{"class":205,"line":32775},[203,68401,51983],{"class":213},[203,68403,54457],{"class":2052},[203,68405,214],{"class":213},[203,68407,64846],{"class":318},[203,68409,655],{"class":213},[203,68411,45624],{"class":209},[203,68413,25176],{"class":262},[203,68415,57090],{"class":318},[203,68417,57061],{"class":213},[203,68419,5424],{"class":2052},[203,68421,214],{"class":213},[203,68423,64772],{"class":318},[203,68425,220],{"class":213},[203,68427,68428],{"class":205,"line":32781},[203,68429,2489],{"emptyLinePlaceholder":131},[203,68431,68432],{"class":205,"line":32787},[203,68433,52456],{"class":213},[203,68435,68436],{"class":205,"line":32793},[203,68437,33519],{"class":213},[203,68439,68440,68442,68444],{"class":205,"line":32799},[203,68441,52475],{"class":213},[203,68443,51871],{"class":51358},[203,68445,51365],{"class":213},[203,68447,68448,68450,68452],{"class":205,"line":32805},[203,68449,51843],{"class":213},[203,68451,51858],{"class":51358},[203,68453,51365],{"class":213},[203,68455,68456],{"class":205,"line":32811},[203,68457,2489],{"emptyLinePlaceholder":131},[203,68459,68460,68462,68464],{"class":205,"line":32831},[203,68461,51843],{"class":213},[203,68463,50693],{"class":51358},[203,68465,51365],{"class":213},[174,68467,68469],{"id":68468},"_333-页面加载事件","3.3.3 页面加载事件",[157,68471,68472],{},[160,68473,68474],{},"load",[19,68476,68477],{},[25,68478],{"alt":27,"src":68479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,68481,68482],{},"window代表整个窗口，比document还要大",[19,68484,68485],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,68487,68488],{},"img.addEventListener('load', function () {",[19,68490,68491],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,68493,52522],{},[157,68495,68496],{"start":124},[160,68497,68498],{},"DOMContentLoaded",[19,68500,68501],{},[25,68502],{"alt":27,"src":68503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,68505,68506],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[174,68508,68510],{"id":68509},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,68512,68513],{},[25,68514],{"alt":27,"src":68515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,68517,68518],{},[25,68519],{"alt":27,"src":68520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,68522,68523],{},[25,68524],{"alt":27,"src":68525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,68527,68528],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,68530,68531],{},"获得的是数字型数据，不带单位",[19,68533,68534],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,68536,68537],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,68539,68540],{},"它是通过document.documentElement来获取",[19,68542,68543],{},[25,68544],{"alt":27,"src":68545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,68547,68548],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[174,68550,68552],{"id":68551},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,68554,68555],{},[25,68556],{"alt":27,"src":68557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,68559,68560],{},[25,68561],{"alt":27,"src":68562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[174,68564,68566],{"id":68565},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,68568,68569],{},[25,68570],{"alt":27,"src":68571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,68573,68574],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,68576,68577],{},[25,68578],{"alt":27,"src":68579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,68581,68582],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,68584,68585],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,68587,68588],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,68590,68591],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,68593,68594],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,68596,68597],{},[25,68598],{"alt":27,"src":68599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,68601,68602],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,68604,68605],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,68607,68608],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,68610,68611],{},"e.pageX-box.getBoundingClientRect()",[174,68613,68615],{"id":68614},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,68617,68618],{},[25,68619],{"alt":27,"src":68620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,68622,68623],{},"这个是相对于视口来说的，它是个方法，不是属性值",[174,68625,68627],{"id":68626},"_338-总结","3.3.8 总结",[19,68629,68630],{},[25,68631],{"alt":27,"src":68632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,68634,68635],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,68637,68638],{},"修改盒子的宽高只能通过width和height来实现",[174,68640,68642],{"id":68641},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[194,68644,68646],{"className":50691,"code":68645,"language":50693,"meta":27,"style":27},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[200,68647,68648,68653,68658,68663,68668],{"__ignoreMap":27},[203,68649,68650],{"class":205,"line":206},[203,68651,68652],{"class":213},"\u002F* 页面滑动 *\u002F\n",[203,68654,68655],{"class":205,"line":124},[203,68656,68657],{"class":213},"html {\n",[203,68659,68660],{"class":205,"line":1269},[203,68661,68662],{"class":213},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[203,68664,68665],{"class":205,"line":1284},[203,68666,68667],{"class":213},"  scroll-behavior: smooth;\n",[203,68669,68670],{"class":205,"line":1290},[203,68671,1654],{"class":213},[19,68673,68674],{},"默认是auto",[174,68676,68678],{"id":68677},"_3310-日期对象","3.3.10 日期对象",[22088,68680,68682],{"id":68681},"_33101-实例化","3.3.10.1 实例化",[19,68684,68685],{},[25,68686],{"alt":27,"src":68687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22088,68689,68691],{"id":68690},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,68693,68694],{},[25,68695],{"alt":27,"src":68696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,68698,68699],{},"月份+1",[19,68701,68702],{},"老外认为第一天为0，星期天",[19,68704,68705],{},"方法使用的时候必须要跟括号",[19,68707,68708],{},"快速获得日期",[19,68710,68711],{},"\u002F\u002F 得到年月日",[19,68713,68714],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,68716,68717],{},"\u002F\u002F 得到当地日期",[19,68719,68720],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,68722,68723],{},"\u002F\u002F 得到当地时间",[19,68725,68726],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,68728,68729],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,68731,68732],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51871,68734,68735],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[19,68737,68738],{},"学会去封装函数！",[22088,68740,68742],{"id":68741},"_33103-时间戳","3.3.10.3 时间戳",[19,68744,68745],{},[25,68746],{"alt":27,"src":68747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,68749,68750],{},[25,68751],{"alt":27,"src":68752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,68754,68755],{},"三种方法记住一个就可以",[174,68757,68759],{"id":68758},"_3311-节点操作","3.3.11 节点操作",[22088,68761,68763],{"id":68762},"_33111-dom节点","3.3.11.1 DOM节点",[19,68765,68766],{},[25,68767],{"alt":27,"src":68768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,68770,68771],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22088,68773,68775],{"id":68774},"_33112-查找节点","3.3.11.2 查找节点",[19,68777,68778],{},"前边的document.querySelector()是获取的元素",[19,68780,68781],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,68783,68784],{},[25,68785],{"alt":27,"src":68786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[157,68788,68789],{},[160,68790,68791],{},"父节点",[19,68793,68794],{},[25,68795],{"alt":27,"src":68796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[157,68798,68799],{"start":124},[160,68800,68801],{},"子节点",[19,68803,68804],{},[25,68805],{"alt":27,"src":68806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,68808,68809],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,68811,68812],{},"children获得的是伪数组，是亲儿子",[157,68814,68815],{"start":1269},[160,68816,68817],{},"兄弟节点",[19,68819,68820],{},[25,68821],{"alt":27,"src":68822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22088,68824,68826],{"id":68825},"_33113-增加节点","3.3.11.3 增加节点",[19,68828,68829],{},[25,68830],{"alt":27,"src":68831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,68833,68834],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,68836,68837],{},[25,68838],{"alt":27,"src":68839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,68841,68842],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,68844,68845],{},"下面是写法的部分展示，就按照下边的格式来写",[19,68847,68848],{},"例：",[51871,68850,68851],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[19,68853,68854],{},[25,68855],{"alt":27,"src":68856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,68858,68859],{},"false只克隆标签，里边的内容不会克隆过来",[194,68861,68863],{"className":50691,"code":68862,"language":50693,"meta":27,"style":27},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[200,68864,68865],{"__ignoreMap":27},[203,68866,68867],{"class":205,"line":206},[203,68868,68862],{"class":213},[22088,68870,68872],{"id":68871},"_33114-删除节点","3.3.11.4 删除节点",[19,68874,68875],{},[25,68876],{"alt":27,"src":68877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,68879,68880],{},"父亲删儿子",[19,68882,68883],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[174,68885,68887],{"id":68886},"_3312-m端事件","3.3.12 M端事件",[19,68889,68890],{},"M端就是移动端",[19,68892,68893],{},[25,68894],{"alt":27,"src":68895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[174,68897,68899],{"id":68898},"_3313-插件","3.3.13 插件",[19,68901,68902],{},"要熟悉官网！！！",[19,68904,68905],{},[452,68906,68907],{"href":68907,"rel":68908},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23956],[19,68910,68911],{},[452,68912,68913],{"href":68913,"rel":68914},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23956],[174,68916,68918],{"id":68917},"_3314-学生信息表","3.3.14 学生信息表",[157,68920,68921,68924,68927,68930,68933,68936,68939,68942],{},[160,68922,68923],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[160,68925,68926],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[160,68928,68929],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[160,68931,68932],{},"用好表单元素自带的属性，value,name等",[160,68934,68935],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[160,68937,68938],{},"不要忘记事件对象",[160,68940,68941],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[160,68943,68944],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,68946,68947],{},"结构：",[194,68949,68951],{"className":50691,"code":68950,"language":50693,"meta":27,"style":27},"\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",[200,68952,68953,68963,68977,68981,68989,69003,69023,69044,69057,69081,69089,69093,69101,69114,69135,69163,69191,69196,69218,69238,69257,69265,69293,69315,69335,69355,69375,69395,69415,69423,69443,69451,69455,69468,69476,69484,69492,69505,69518,69531,69544,69557,69570,69583,69591,69599,69607,69612,69617,69622,69627,69632,69637,69642,69647,69652,69657,69662,69667,69672,69680,69688,69696,69700,69720,69739,69759,69779,69799,69819,69823,69828,69848,69853,69863,69868,69873,69893,69915,69920,69930,69934,69938,69943,69948,69977,69991,70006,70010,70014,70018,70023,70034,70047,70052,70057,70062,70067,70072,70076,70081,70086,70095,70100,70105,70117,70122,70129,70133,70138,70148,70153,70163,70168,70196,70217,70227,70247,70265,70282,70299,70316,70333,70337,70347,70352,70357,70362,70373,70377,70381,70385,70390,70395,70416,70428,70433,70438,70443,70457,70462,70469,70473,70477,70485,70489,70497,70501],{"__ignoreMap":27},[203,68954,68955,68957,68959,68961],{"class":205,"line":206},[203,68956,51355],{"class":213},[203,68958,51359],{"class":51358},[203,68960,51362],{"class":2052},[203,68962,51365],{"class":213},[203,68964,68965,68967,68969,68971,68973,68975],{"class":205,"line":124},[203,68966,1124],{"class":213},[203,68968,50693],{"class":51358},[203,68970,51374],{"class":2052},[203,68972,259],{"class":213},[203,68974,51379],{"class":318},[203,68976,51365],{"class":213},[203,68978,68979],{"class":205,"line":1269},[203,68980,2489],{"emptyLinePlaceholder":131},[203,68982,68983,68985,68987],{"class":205,"line":1284},[203,68984,1124],{"class":213},[203,68986,51392],{"class":51358},[203,68988,51365],{"class":213},[203,68990,68991,68993,68995,68997,68999,69001],{"class":205,"line":1290},[203,68992,52202],{"class":213},[203,68994,51402],{"class":51358},[203,68996,51405],{"class":2052},[203,68998,259],{"class":213},[203,69000,51410],{"class":318},[203,69002,59185],{"class":213},[203,69004,69005,69007,69009,69011,69013,69015,69017,69019,69021],{"class":205,"line":1304},[203,69006,52202],{"class":213},[203,69008,51402],{"class":51358},[203,69010,15010],{"class":2052},[203,69012,259],{"class":213},[203,69014,51449],{"class":318},[203,69016,51429],{"class":2052},[203,69018,259],{"class":213},[203,69020,51456],{"class":318},[203,69022,59185],{"class":213},[203,69024,69025,69027,69029,69031,69033,69035,69037,69039,69042],{"class":205,"line":1310},[203,69026,52202],{"class":213},[203,69028,51402],{"class":51358},[203,69030,51421],{"class":2052},[203,69032,259],{"class":213},[203,69034,51426],{"class":318},[203,69036,51429],{"class":2052},[203,69038,259],{"class":213},[203,69040,69041],{"class":318},"\"ie=edge\"",[203,69043,59185],{"class":213},[203,69045,69046,69048,69050,69053,69055],{"class":205,"line":1401},[203,69047,52202],{"class":213},[203,69049,51465],{"class":51358},[203,69051,69052],{"class":213},">学生信息管理\u003C\u002F",[203,69054,51465],{"class":51358},[203,69056,51365],{"class":213},[203,69058,69059,69061,69064,69067,69069,69072,69074,69076,69079],{"class":205,"line":1407},[203,69060,52202],{"class":213},[203,69062,69063],{"class":51358},"link",[203,69065,69066],{"class":2052}," rel",[203,69068,259],{"class":213},[203,69070,69071],{"class":318},"\"stylesheet\"",[203,69073,61115],{"class":2052},[203,69075,259],{"class":213},[203,69077,69078],{"class":318},"\"css\u002Findex.css\"",[203,69080,59185],{"class":213},[203,69082,69083,69085,69087],{"class":205,"line":1419},[203,69084,51843],{"class":213},[203,69086,51392],{"class":51358},[203,69088,51365],{"class":213},[203,69090,69091],{"class":205,"line":1701},[203,69092,2489],{"emptyLinePlaceholder":131},[203,69094,69095,69097,69099],{"class":205,"line":1706},[203,69096,1124],{"class":213},[203,69098,51858],{"class":51358},[203,69100,51365],{"class":213},[203,69102,69103,69105,69107,69110,69112],{"class":205,"line":1712},[203,69104,52202],{"class":213},[203,69106,10],{"class":51358},[203,69108,69109],{"class":213},">新增学员\u003C\u002F",[203,69111,10],{"class":51358},[203,69113,51365],{"class":213},[203,69115,69116,69118,69120,69122,69124,69126,69129,69131,69133],{"class":205,"line":1717},[203,69117,52202],{"class":213},[203,69119,66683],{"class":51358},[203,69121,53544],{"class":2052},[203,69123,259],{"class":213},[203,69125,62722],{"class":318},[203,69127,69128],{"class":2052}," autocomplete",[203,69130,259],{"class":213},[203,69132,31834],{"class":318},[203,69134,51365],{"class":213},[203,69136,69137,69140,69142,69144,69146,69148,69150,69152,69155,69157,69159,69161],{"class":205,"line":1731},[203,69138,69139],{"class":213},"    姓名：\u003C",[203,69141,53879],{"class":51358},[203,69143,53882],{"class":2052},[203,69145,259],{"class":213},[203,69147,62757],{"class":318},[203,69149,53544],{"class":2052},[203,69151,259],{"class":213},[203,69153,69154],{"class":318},"\"uname\"",[203,69156,15010],{"class":2052},[203,69158,259],{"class":213},[203,69160,69154],{"class":318},[203,69162,59185],{"class":213},[203,69164,69165,69168,69170,69172,69174,69176,69178,69180,69183,69185,69187,69189],{"class":205,"line":1736},[203,69166,69167],{"class":213},"    年龄：\u003C",[203,69169,53879],{"class":51358},[203,69171,53882],{"class":2052},[203,69173,259],{"class":213},[203,69175,62757],{"class":318},[203,69177,53544],{"class":2052},[203,69179,259],{"class":213},[203,69181,69182],{"class":318},"\"age\"",[203,69184,15010],{"class":2052},[203,69186,259],{"class":213},[203,69188,69182],{"class":318},[203,69190,59185],{"class":213},[203,69192,69193],{"class":205,"line":1742},[203,69194,69195],{"class":213},"    性别:\n",[203,69197,69198,69200,69203,69205,69207,69210,69212,69214,69216],{"class":205,"line":1763},[203,69199,51399],{"class":213},[203,69201,69202],{"class":51358},"select",[203,69204,15010],{"class":2052},[203,69206,259],{"class":213},[203,69208,69209],{"class":318},"\"gender\"",[203,69211,53544],{"class":2052},[203,69213,259],{"class":213},[203,69215,69209],{"class":318},[203,69217,51365],{"class":213},[203,69219,69220,69222,69225,69227,69229,69231,69234,69236],{"class":205,"line":1768},[203,69221,55292],{"class":213},[203,69223,69224],{"class":51358},"option",[203,69226,66709],{"class":2052},[203,69228,259],{"class":213},[203,69230,10051],{"class":318},[203,69232,69233],{"class":213},">男\u003C\u002F",[203,69235,69224],{"class":51358},[203,69237,51365],{"class":213},[203,69239,69240,69242,69244,69246,69248,69250,69253,69255],{"class":205,"line":1782},[203,69241,55292],{"class":213},[203,69243,69224],{"class":51358},[203,69245,66709],{"class":2052},[203,69247,259],{"class":213},[203,69249,10120],{"class":318},[203,69251,69252],{"class":213},">女\u003C\u002F",[203,69254,69224],{"class":51358},[203,69256,51365],{"class":213},[203,69258,69259,69261,69263],{"class":205,"line":1787},[203,69260,51834],{"class":213},[203,69262,69202],{"class":51358},[203,69264,51365],{"class":213},[203,69266,69267,69270,69272,69274,69276,69278,69280,69282,69285,69287,69289,69291],{"class":205,"line":1816},[203,69268,69269],{"class":213},"    薪资：\u003C",[203,69271,53879],{"class":51358},[203,69273,53882],{"class":2052},[203,69275,259],{"class":213},[203,69277,62757],{"class":318},[203,69279,53544],{"class":2052},[203,69281,259],{"class":213},[203,69283,69284],{"class":318},"\"salary\"",[203,69286,15010],{"class":2052},[203,69288,259],{"class":213},[203,69290,69284],{"class":318},[203,69292,59185],{"class":213},[203,69294,69295,69298,69300,69302,69304,69307,69309,69311,69313],{"class":205,"line":1821},[203,69296,69297],{"class":213},"    就业城市：\u003C",[203,69299,69202],{"class":51358},[203,69301,15010],{"class":2052},[203,69303,259],{"class":213},[203,69305,69306],{"class":318},"\"city\"",[203,69308,53544],{"class":2052},[203,69310,259],{"class":213},[203,69312,69306],{"class":318},[203,69314,51365],{"class":213},[203,69316,69317,69319,69321,69323,69325,69328,69331,69333],{"class":205,"line":1838},[203,69318,55292],{"class":213},[203,69320,69224],{"class":51358},[203,69322,66709],{"class":2052},[203,69324,259],{"class":213},[203,69326,69327],{"class":318},"\"北京\"",[203,69329,69330],{"class":213},">北京\u003C\u002F",[203,69332,69224],{"class":51358},[203,69334,51365],{"class":213},[203,69336,69337,69339,69341,69343,69345,69348,69351,69353],{"class":205,"line":1843},[203,69338,55292],{"class":213},[203,69340,69224],{"class":51358},[203,69342,66709],{"class":2052},[203,69344,259],{"class":213},[203,69346,69347],{"class":318},"\"上海\"",[203,69349,69350],{"class":213},">上海\u003C\u002F",[203,69352,69224],{"class":51358},[203,69354,51365],{"class":213},[203,69356,69357,69359,69361,69363,69365,69368,69371,69373],{"class":205,"line":1848},[203,69358,55292],{"class":213},[203,69360,69224],{"class":51358},[203,69362,66709],{"class":2052},[203,69364,259],{"class":213},[203,69366,69367],{"class":318},"\"广州\"",[203,69369,69370],{"class":213},">广州\u003C\u002F",[203,69372,69224],{"class":51358},[203,69374,51365],{"class":213},[203,69376,69377,69379,69381,69383,69385,69388,69391,69393],{"class":205,"line":1853},[203,69378,55292],{"class":213},[203,69380,69224],{"class":51358},[203,69382,66709],{"class":2052},[203,69384,259],{"class":213},[203,69386,69387],{"class":318},"\"深圳\"",[203,69389,69390],{"class":213},">深圳\u003C\u002F",[203,69392,69224],{"class":51358},[203,69394,51365],{"class":213},[203,69396,69397,69399,69401,69403,69405,69408,69411,69413],{"class":205,"line":1867},[203,69398,55292],{"class":213},[203,69400,69224],{"class":51358},[203,69402,66709],{"class":2052},[203,69404,259],{"class":213},[203,69406,69407],{"class":318},"\"曹县\"",[203,69409,69410],{"class":213},">曹县\u003C\u002F",[203,69412,69224],{"class":51358},[203,69414,51365],{"class":213},[203,69416,69417,69419,69421],{"class":205,"line":1872},[203,69418,51834],{"class":213},[203,69420,69202],{"class":51358},[203,69422,51365],{"class":213},[203,69424,69425,69427,69429,69431,69433,69436,69439,69441],{"class":205,"line":2666},[203,69426,51399],{"class":213},[203,69428,53945],{"class":51358},[203,69430,53544],{"class":2052},[203,69432,259],{"class":213},[203,69434,69435],{"class":318},"\"add\"",[203,69437,69438],{"class":213},">录入\u003C\u002F",[203,69440,53945],{"class":51358},[203,69442,51365],{"class":213},[203,69444,69445,69447,69449],{"class":205,"line":2680},[203,69446,52475],{"class":213},[203,69448,66683],{"class":51358},[203,69450,51365],{"class":213},[203,69452,69453],{"class":205,"line":2688},[203,69454,2489],{"emptyLinePlaceholder":131},[203,69456,69457,69459,69461,69464,69466],{"class":205,"line":2693},[203,69458,52202],{"class":213},[203,69460,10],{"class":51358},[203,69462,69463],{"class":213},">就业榜\u003C\u002F",[203,69465,10],{"class":51358},[203,69467,51365],{"class":213},[203,69469,69470,69472,69474],{"class":205,"line":2699},[203,69471,52202],{"class":213},[203,69473,351],{"class":51358},[203,69475,51365],{"class":213},[203,69477,69478,69480,69482],{"class":205,"line":2705},[203,69479,51399],{"class":213},[203,69481,354],{"class":51358},[203,69483,51365],{"class":213},[203,69485,69486,69488,69490],{"class":205,"line":2710},[203,69487,55292],{"class":213},[203,69489,357],{"class":51358},[203,69491,51365],{"class":213},[203,69493,69494,69496,69498,69501,69503],{"class":205,"line":8038},[203,69495,55360],{"class":213},[203,69497,360],{"class":51358},[203,69499,69500],{"class":213},">序号\u003C\u002F",[203,69502,360],{"class":51358},[203,69504,51365],{"class":213},[203,69506,69507,69509,69511,69514,69516],{"class":205,"line":8062},[203,69508,55360],{"class":213},[203,69510,360],{"class":51358},[203,69512,69513],{"class":213},">姓名\u003C\u002F",[203,69515,360],{"class":51358},[203,69517,51365],{"class":213},[203,69519,69520,69522,69524,69527,69529],{"class":205,"line":8067},[203,69521,55360],{"class":213},[203,69523,360],{"class":51358},[203,69525,69526],{"class":213},">年龄\u003C\u002F",[203,69528,360],{"class":51358},[203,69530,51365],{"class":213},[203,69532,69533,69535,69537,69540,69542],{"class":205,"line":8073},[203,69534,55360],{"class":213},[203,69536,360],{"class":51358},[203,69538,69539],{"class":213},">性别\u003C\u002F",[203,69541,360],{"class":51358},[203,69543,51365],{"class":213},[203,69545,69546,69548,69550,69553,69555],{"class":205,"line":8100},[203,69547,55360],{"class":213},[203,69549,360],{"class":51358},[203,69551,69552],{"class":213},">薪资\u003C\u002F",[203,69554,360],{"class":51358},[203,69556,51365],{"class":213},[203,69558,69559,69561,69563,69566,69568],{"class":205,"line":8105},[203,69560,55360],{"class":213},[203,69562,360],{"class":51358},[203,69564,69565],{"class":213},">就业城市\u003C\u002F",[203,69567,360],{"class":51358},[203,69569,51365],{"class":213},[203,69571,69572,69574,69576,69579,69581],{"class":205,"line":8111},[203,69573,55360],{"class":213},[203,69575,360],{"class":51358},[203,69577,69578],{"class":213},">操作\u003C\u002F",[203,69580,360],{"class":51358},[203,69582,51365],{"class":213},[203,69584,69585,69587,69589],{"class":205,"line":8123},[203,69586,55465],{"class":213},[203,69588,357],{"class":51358},[203,69590,51365],{"class":213},[203,69592,69593,69595,69597],{"class":205,"line":8135},[203,69594,51834],{"class":213},[203,69596,354],{"class":51358},[203,69598,51365],{"class":213},[203,69600,69601,69603,69605],{"class":205,"line":8147},[203,69602,51399],{"class":213},[203,69604,398],{"class":51358},[203,69606,51365],{"class":213},[203,69608,69609],{"class":205,"line":9806},[203,69610,69611],{"class":272},"      \u003C!-- \n",[203,69613,69614],{"class":205,"line":9831},[203,69615,69616],{"class":272},"        \u003Ctr>\n",[203,69618,69619],{"class":205,"line":9854},[203,69620,69621],{"class":272},"          \u003Ctd>1001\u003C\u002Ftd>\n",[203,69623,69624],{"class":205,"line":9878},[203,69625,69626],{"class":272},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[203,69628,69629],{"class":205,"line":9883},[203,69630,69631],{"class":272},"          \u003Ctd>19\u003C\u002Ftd>\n",[203,69633,69634],{"class":205,"line":9888},[203,69635,69636],{"class":272},"          \u003Ctd>男\u003C\u002Ftd>\n",[203,69638,69639],{"class":205,"line":9893},[203,69640,69641],{"class":272},"          \u003Ctd>15000\u003C\u002Ftd>\n",[203,69643,69644],{"class":205,"line":9902},[203,69645,69646],{"class":272},"          \u003Ctd>上海\u003C\u002Ftd>\n",[203,69648,69649],{"class":205,"line":9907},[203,69650,69651],{"class":272},"          \u003Ctd>\n",[203,69653,69654],{"class":205,"line":9913},[203,69655,69656],{"class":272},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[203,69658,69659],{"class":205,"line":9934},[203,69660,69661],{"class":272},"          \u003C\u002Ftd>\n",[203,69663,69664],{"class":205,"line":9940},[203,69665,69666],{"class":272},"        \u003C\u002Ftr> \n",[203,69668,69669],{"class":205,"line":9954},[203,69670,69671],{"class":272},"        -->\n",[203,69673,69674,69676,69678],{"class":205,"line":9960},[203,69675,51834],{"class":213},[203,69677,398],{"class":51358},[203,69679,51365],{"class":213},[203,69681,69682,69684,69686],{"class":205,"line":9987},[203,69683,52475],{"class":213},[203,69685,351],{"class":51358},[203,69687,51365],{"class":213},[203,69689,69690,69692,69694],{"class":205,"line":9996},[203,69691,52202],{"class":213},[203,69693,51871],{"class":51358},[203,69695,51365],{"class":213},[203,69697,69698],{"class":205,"line":10002},[203,69699,60016],{"class":272},[203,69701,69702,69704,69707,69709,69711,69713,69715,69718],{"class":205,"line":10010},[203,69703,11311],{"class":209},[203,69705,69706],{"class":262}," uname",[203,69708,13654],{"class":209},[203,69710,54454],{"class":213},[203,69712,54457],{"class":2052},[203,69714,214],{"class":213},[203,69716,69717],{"class":318},"'.uname'",[203,69719,220],{"class":213},[203,69721,69722,69724,69726,69728,69730,69732,69734,69737],{"class":205,"line":10015},[203,69723,11311],{"class":209},[203,69725,15779],{"class":262},[203,69727,13654],{"class":209},[203,69729,54454],{"class":213},[203,69731,54457],{"class":2052},[203,69733,214],{"class":213},[203,69735,69736],{"class":318},"'.age'",[203,69738,220],{"class":213},[203,69740,69741,69743,69746,69748,69750,69752,69754,69757],{"class":205,"line":16694},[203,69742,11311],{"class":209},[203,69744,69745],{"class":262}," gender",[203,69747,13654],{"class":209},[203,69749,54454],{"class":213},[203,69751,54457],{"class":2052},[203,69753,214],{"class":213},[203,69755,69756],{"class":318},"'.gender'",[203,69758,220],{"class":213},[203,69760,69761,69763,69766,69768,69770,69772,69774,69777],{"class":205,"line":16700},[203,69762,11311],{"class":209},[203,69764,69765],{"class":262}," salary",[203,69767,13654],{"class":209},[203,69769,54454],{"class":213},[203,69771,54457],{"class":2052},[203,69773,214],{"class":213},[203,69775,69776],{"class":318},"'.salary'",[203,69778,220],{"class":213},[203,69780,69781,69783,69786,69788,69790,69792,69794,69797],{"class":205,"line":16723},[203,69782,11311],{"class":209},[203,69784,69785],{"class":262}," city",[203,69787,13654],{"class":209},[203,69789,54454],{"class":213},[203,69791,54457],{"class":2052},[203,69793,214],{"class":213},[203,69795,69796],{"class":318},"'.city'",[203,69798,220],{"class":213},[203,69800,69801,69803,69806,69808,69810,69812,69814,69817],{"class":205,"line":16729},[203,69802,11311],{"class":209},[203,69804,69805],{"class":262}," tbody",[203,69807,13654],{"class":209},[203,69809,54454],{"class":213},[203,69811,54457],{"class":2052},[203,69813,214],{"class":213},[203,69815,69816],{"class":318},"'tbody'",[203,69818,220],{"class":213},[203,69820,69821],{"class":205,"line":16752},[203,69822,2489],{"emptyLinePlaceholder":131},[203,69824,69825],{"class":205,"line":16766},[203,69826,69827],{"class":272},"    \u002F\u002F 获取所有带有name属性的元素\n",[203,69829,69830,69832,69835,69837,69839,69841,69843,69846],{"class":205,"line":16786},[203,69831,11311],{"class":209},[203,69833,69834],{"class":262}," items",[203,69836,13654],{"class":209},[203,69838,54454],{"class":213},[203,69840,55739],{"class":2052},[203,69842,214],{"class":213},[203,69844,69845],{"class":318},"'[name]'",[203,69847,220],{"class":213},[203,69849,69850],{"class":205,"line":16792},[203,69851,69852],{"class":272},"    \u002F\u002F 声明一个空的数组\n",[203,69854,69855,69857,69859,69861],{"class":205,"line":16803},[203,69856,11311],{"class":209},[203,69858,57753],{"class":262},[203,69860,13654],{"class":209},[203,69862,51896],{"class":213},[203,69864,69865],{"class":205,"line":16826},[203,69866,69867],{"class":272},"    \u002F\u002F 1.录入模块\n",[203,69869,69870],{"class":205,"line":16848},[203,69871,69872],{"class":272},"    \u002F\u002F 1.1这是一个表单提交事件\n",[203,69874,69875,69877,69880,69882,69884,69886,69888,69891],{"class":205,"line":16853},[203,69876,11311],{"class":209},[203,69878,69879],{"class":262}," info",[203,69881,13654],{"class":209},[203,69883,54454],{"class":213},[203,69885,54457],{"class":2052},[203,69887,214],{"class":213},[203,69889,69890],{"class":318},"'.info'",[203,69892,220],{"class":213},[203,69894,69895,69898,69900,69902,69905,69907,69909,69911,69913],{"class":205,"line":16859},[203,69896,69897],{"class":213},"    info.",[203,69899,57871],{"class":2052},[203,69901,214],{"class":213},[203,69903,69904],{"class":318},"'submit'",[203,69906,12525],{"class":213},[203,69908,54507],{"class":209},[203,69910,1747],{"class":213},[203,69912,288],{"class":5306},[203,69914,12532],{"class":213},[203,69916,69917],{"class":205,"line":16873},[203,69918,69919],{"class":272},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[203,69921,69922,69925,69928],{"class":205,"line":16886},[203,69923,69924],{"class":213},"      e.",[203,69926,69927],{"class":2052},"preventDefault",[203,69929,2065],{"class":213},[203,69931,69932],{"class":205,"line":16891},[203,69933,60070],{"class":272},[203,69935,69936],{"class":205,"line":16905},[203,69937,2489],{"emptyLinePlaceholder":131},[203,69939,69940],{"class":205,"line":16910},[203,69941,69942],{"class":272},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[203,69944,69945],{"class":205,"line":16916},[203,69946,69947],{"class":272},"      \u002F\u002F 先遍历循环\n",[203,69949,69950,69952,69954,69956,69958,69960,69962,69964,69966,69969,69971,69973,69975],{"class":205,"line":16921},[203,69951,52342],{"class":209},[203,69953,1747],{"class":213},[203,69955,51905],{"class":209},[203,69957,9528],{"class":213},[203,69959,259],{"class":209},[203,69961,4182],{"class":262},[203,69963,9535],{"class":213},[203,69965,1124],{"class":209},[203,69967,69968],{"class":213}," items.",[203,69970,52026],{"class":262},[203,69972,3303],{"class":213},[203,69974,2381],{"class":209},[203,69976,12532],{"class":213},[203,69978,69979,69981,69984,69986,69989],{"class":205,"line":16935},[203,69980,2586],{"class":209},[203,69982,69983],{"class":213}," (items[i].value ",[203,69985,54544],{"class":209},[203,69987,69988],{"class":318}," ''",[203,69990,12532],{"class":213},[203,69992,69993,69996,69999,70001,70004],{"class":205,"line":16940},[203,69994,69995],{"class":209},"          return",[203,69997,69998],{"class":2052}," alert",[203,70000,214],{"class":213},[203,70002,70003],{"class":318},"'输入内容不能为空'",[203,70005,220],{"class":213},[203,70007,70008],{"class":205,"line":16945},[203,70009,2618],{"class":213},[203,70011,70012],{"class":205,"line":16959},[203,70013,52456],{"class":213},[203,70015,70016],{"class":205,"line":16971},[203,70017,2489],{"emptyLinePlaceholder":131},[203,70019,70020],{"class":205,"line":16976},[203,70021,70022],{"class":272},"      \u002F\u002F 创建新的对象\n",[203,70024,70025,70027,70030,70032],{"class":205,"line":16989},[203,70026,58286],{"class":209},[203,70028,70029],{"class":262}," obj",[203,70031,13654],{"class":209},[203,70033,15662],{"class":213},[203,70035,70036,70039,70041,70043,70045],{"class":205,"line":16994},[203,70037,70038],{"class":213},"        stuID: arr.",[203,70040,52026],{"class":262},[203,70042,45624],{"class":209},[203,70044,25176],{"class":262},[203,70046,31524],{"class":213},[203,70048,70049],{"class":205,"line":16999},[203,70050,70051],{"class":213},"        uname: uname.value,\n",[203,70053,70054],{"class":205,"line":17004},[203,70055,70056],{"class":213},"        age: age.value,\n",[203,70058,70059],{"class":205,"line":17017},[203,70060,70061],{"class":213},"        gender: gender.value,\n",[203,70063,70064],{"class":205,"line":17022},[203,70065,70066],{"class":213},"        salary: salary.value,\n",[203,70068,70069],{"class":205,"line":32691},[203,70070,70071],{"class":213},"        city: city.value\n",[203,70073,70074],{"class":205,"line":32697},[203,70075,52456],{"class":213},[203,70077,70078],{"class":205,"line":32703},[203,70079,70080],{"class":272},"      \u002F\u002F console.log(obj);\n",[203,70082,70083],{"class":205,"line":32709},[203,70084,70085],{"class":272},"      \u002F\u002F 追加到数组里面\n",[203,70087,70088,70090,70092],{"class":205,"line":32715},[203,70089,58065],{"class":213},[203,70091,51942],{"class":2052},[203,70093,70094],{"class":213},"(obj)\n",[203,70096,70097],{"class":205,"line":32726},[203,70098,70099],{"class":272},"      \u002F\u002F console.log(arr);\n",[203,70101,70102],{"class":205,"line":32732},[203,70103,70104],{"class":272},"      \u002F\u002F 清空表单  reset重置表单\n",[203,70106,70107,70110,70112,70115],{"class":205,"line":32752},[203,70108,70109],{"class":262},"      this",[203,70111,772],{"class":213},[203,70113,70114],{"class":2052},"reset",[203,70116,2065],{"class":213},[203,70118,70119],{"class":205,"line":32758},[203,70120,70121],{"class":272},"      \u002F\u002F 调用渲染函数\n",[203,70123,70124,70127],{"class":205,"line":32769},[203,70125,70126],{"class":2052},"      render",[203,70128,2065],{"class":213},[203,70130,70131],{"class":205,"line":32775},[203,70132,33519],{"class":213},[203,70134,70135],{"class":205,"line":32781},[203,70136,70137],{"class":272},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[203,70139,70140,70143,70146],{"class":205,"line":32787},[203,70141,70142],{"class":209},"    function",[203,70144,70145],{"class":2052}," render",[203,70147,10943],{"class":213},[203,70149,70150],{"class":205,"line":32793},[203,70151,70152],{"class":272},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[203,70154,70155,70158,70160],{"class":205,"line":32799},[203,70156,70157],{"class":213},"      tbody.innerHTML ",[203,70159,259],{"class":209},[203,70161,70162],{"class":318}," ''\n",[203,70164,70165],{"class":205,"line":32805},[203,70166,70167],{"class":272},"      \u002F\u002F 遍历数组\n",[203,70169,70170,70172,70174,70176,70178,70180,70182,70184,70186,70188,70190,70192,70194],{"class":205,"line":32811},[203,70171,52342],{"class":209},[203,70173,1747],{"class":213},[203,70175,51905],{"class":209},[203,70177,9528],{"class":213},[203,70179,259],{"class":209},[203,70181,4182],{"class":262},[203,70183,9535],{"class":213},[203,70185,1124],{"class":209},[203,70187,52023],{"class":213},[203,70189,52026],{"class":262},[203,70191,3303],{"class":213},[203,70193,2381],{"class":209},[203,70195,12532],{"class":213},[203,70197,70198,70200,70203,70205,70207,70210,70212,70215],{"class":205,"line":32831},[203,70199,61328],{"class":209},[203,70201,70202],{"class":262}," tr",[203,70204,13654],{"class":209},[203,70206,54454],{"class":213},[203,70208,70209],{"class":2052},"createElement",[203,70211,214],{"class":213},[203,70213,70214],{"class":318},"'tr'",[203,70216,220],{"class":213},[203,70218,70219,70222,70224],{"class":205,"line":32837},[203,70220,70221],{"class":213},"        tr.innerHTML ",[203,70223,259],{"class":209},[203,70225,70226],{"class":318}," `\n",[203,70228,70229,70232,70234,70236,70238,70241,70244],{"class":205,"line":32853},[203,70230,70231],{"class":318},"        \u003Ctd>${",[203,70233,3969],{"class":213},[203,70235,1104],{"class":318},[203,70237,655],{"class":213},[203,70239,70240],{"class":318},"].",[203,70242,70243],{"class":213},"stuID",[203,70245,70246],{"class":318},"}\u003C\u002Ftd>\n",[203,70248,70249,70252,70254,70256,70258,70260,70263],{"class":205,"line":32859},[203,70250,70251],{"class":318},"          \u003Ctd>${",[203,70253,3969],{"class":213},[203,70255,1104],{"class":318},[203,70257,655],{"class":213},[203,70259,70240],{"class":318},[203,70261,70262],{"class":213},"uname",[203,70264,70246],{"class":318},[203,70266,70267,70269,70271,70273,70275,70277,70280],{"class":205,"line":32873},[203,70268,70251],{"class":318},[203,70270,3969],{"class":213},[203,70272,1104],{"class":318},[203,70274,655],{"class":213},[203,70276,70240],{"class":318},[203,70278,70279],{"class":213},"age",[203,70281,70246],{"class":318},[203,70283,70284,70286,70288,70290,70292,70294,70297],{"class":205,"line":32879},[203,70285,70251],{"class":318},[203,70287,3969],{"class":213},[203,70289,1104],{"class":318},[203,70291,655],{"class":213},[203,70293,70240],{"class":318},[203,70295,70296],{"class":213},"gender",[203,70298,70246],{"class":318},[203,70300,70301,70303,70305,70307,70309,70311,70314],{"class":205,"line":32894},[203,70302,70251],{"class":318},[203,70304,3969],{"class":213},[203,70306,1104],{"class":318},[203,70308,655],{"class":213},[203,70310,70240],{"class":318},[203,70312,70313],{"class":213},"salary",[203,70315,70246],{"class":318},[203,70317,70318,70320,70322,70324,70326,70328,70331],{"class":205,"line":32900},[203,70319,70251],{"class":318},[203,70321,3969],{"class":213},[203,70323,1104],{"class":318},[203,70325,655],{"class":213},[203,70327,70240],{"class":318},[203,70329,70330],{"class":213},"city",[203,70332,70246],{"class":318},[203,70334,70335],{"class":205,"line":32909},[203,70336,69651],{"class":318},[203,70338,70339,70342,70344],{"class":205,"line":32915},[203,70340,70341],{"class":318},"            \u003Ca href=\"javascript:\" data-id=${",[203,70343,655],{"class":213},[203,70345,70346],{"class":318},"}>删除\u003C\u002Fa>\n",[203,70348,70349],{"class":205,"line":32924},[203,70350,70351],{"class":318},"          \u003C\u002Ftd> \n",[203,70353,70354],{"class":205,"line":32930},[203,70355,70356],{"class":318},"          `\n",[203,70358,70359],{"class":205,"line":32936},[203,70360,70361],{"class":272},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[203,70363,70364,70367,70370],{"class":205,"line":32945},[203,70365,70366],{"class":213},"        tbody.",[203,70368,70369],{"class":2052},"appendChild",[203,70371,70372],{"class":213},"(tr)\n",[203,70374,70375],{"class":205,"line":32951},[203,70376,52456],{"class":213},[203,70378,70379],{"class":205,"line":32962},[203,70380,2276],{"class":213},[203,70382,70383],{"class":205,"line":32968},[203,70384,2489],{"emptyLinePlaceholder":131},[203,70386,70387],{"class":205,"line":32987},[203,70388,70389],{"class":272},"    \u002F\u002F 3.删除委托\n",[203,70391,70392],{"class":205,"line":32993},[203,70393,70394],{"class":272},"    \u002F\u002F 3.1 事件委托 tbody\n",[203,70396,70397,70400,70402,70404,70406,70408,70410,70412,70414],{"class":205,"line":33004},[203,70398,70399],{"class":213},"    tbody.",[203,70401,57871],{"class":2052},[203,70403,214],{"class":213},[203,70405,57876],{"class":318},[203,70407,12525],{"class":213},[203,70409,54507],{"class":209},[203,70411,1747],{"class":213},[203,70413,288],{"class":5306},[203,70415,12532],{"class":213},[203,70417,70418,70420,70422,70424,70426],{"class":205,"line":33010},[203,70419,54538],{"class":209},[203,70421,67092],{"class":213},[203,70423,54544],{"class":209},[203,70425,68314],{"class":318},[203,70427,12532],{"class":213},[203,70429,70430],{"class":205,"line":33030},[203,70431,70432],{"class":272},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[203,70434,70435],{"class":205,"line":33046},[203,70436,70437],{"class":272},"        \u002F\u002F console.log(e.target.dataset.id);\n",[203,70439,70440],{"class":205,"line":33052},[203,70441,70442],{"class":272},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[203,70444,70445,70448,70450,70453,70455],{"class":205,"line":33066},[203,70446,70447],{"class":213},"        arr.",[203,70449,58068],{"class":2052},[203,70451,70452],{"class":213},"(e.target.dataset.id, ",[203,70454,431],{"class":262},[203,70456,220],{"class":213},[203,70458,70459],{"class":205,"line":33072},[203,70460,70461],{"class":272},"        \u002F\u002F 重新渲染一次\n",[203,70463,70464,70467],{"class":205,"line":33078},[203,70465,70466],{"class":2052},"        render",[203,70468,2065],{"class":213},[203,70470,70471],{"class":205,"line":33089},[203,70472,52456],{"class":213},[203,70474,70475],{"class":205,"line":33095},[203,70476,33519],{"class":213},[203,70478,70479,70481,70483],{"class":205,"line":33101},[203,70480,52475],{"class":213},[203,70482,51871],{"class":51358},[203,70484,51365],{"class":213},[203,70486,70487],{"class":205,"line":33111},[203,70488,2489],{"emptyLinePlaceholder":131},[203,70490,70491,70493,70495],{"class":205,"line":33117},[203,70492,51843],{"class":213},[203,70494,51858],{"class":51358},[203,70496,51365],{"class":213},[203,70498,70499],{"class":205,"line":33128},[203,70500,2489],{"emptyLinePlaceholder":131},[203,70502,70503,70505,70507],{"class":205,"line":33134},[203,70504,51843],{"class":213},[203,70506,50693],{"class":51358},[203,70508,51365],{"class":213},[19,70510,70511],{},"样式：",[194,70513,70517],{"className":70514,"code":70515,"language":70516,"meta":27,"style":27},"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",[200,70518,70519,70524,70534,70543,70547,70551,70556,70566,70571,70575,70580,70590,70595,70604,70608,70612,70617,70622,70632,70642,70647,70651,70656,70665,70675,70680,70690,70700,70704,70709,70717,70721,70726,70731,70736,70744,70753,70757,70762,70771,70775,70780,70789,70793,70798,70807,70816,70824,70828,70833,70842,70852,70861,70871,70877,70886,70896,70906,70910,70915,70924,70932,70942,70950,70959,70968,70978,70986,70990,70995,71004],{"__ignoreMap":27},[203,70520,70521],{"class":205,"line":206},[203,70522,70523],{"class":213},"* {\n",[203,70525,70526,70529,70531],{"class":205,"line":124},[203,70527,70528],{"class":51358},"  margin",[203,70530,51495],{"class":213},[203,70532,70533],{"class":318},"0;\n",[203,70535,70536,70539,70541],{"class":205,"line":1269},[203,70537,70538],{"class":318},"  padding",[203,70540,51495],{"class":213},[203,70542,70533],{"class":318},[203,70544,70545],{"class":205,"line":1284},[203,70546,1654],{"class":213},[203,70548,70549],{"class":205,"line":1290},[203,70550,2489],{"emptyLinePlaceholder":131},[203,70552,70553],{"class":205,"line":1304},[203,70554,70555],{"class":318},"a {\n",[203,70557,70558,70561,70563],{"class":205,"line":1310},[203,70559,70560],{"class":51358},"  text-decoration",[203,70562,51495],{"class":213},[203,70564,70565],{"class":318},"none;\n",[203,70567,70568],{"class":205,"line":1401},[203,70569,70570],{"class":318},"  color:#721c24;\n",[203,70572,70573],{"class":205,"line":1407},[203,70574,1654],{"class":213},[203,70576,70577],{"class":205,"line":1419},[203,70578,70579],{"class":318},"h1 {\n",[203,70581,70582,70585,70587],{"class":205,"line":1701},[203,70583,70584],{"class":51358},"  text-align",[203,70586,51495],{"class":213},[203,70588,70589],{"class":318},"center;\n",[203,70591,70592],{"class":205,"line":1706},[203,70593,70594],{"class":318},"  color:#333;\n",[203,70596,70597,70599,70601],{"class":205,"line":1712},[203,70598,70528],{"class":51358},[203,70600,51495],{"class":213},[203,70602,70603],{"class":318},"20px 0;\n",[203,70605,70606],{"class":205,"line":1717},[203,70607,2763],{"class":213},[203,70609,70610],{"class":205,"line":1731},[203,70611,1654],{"class":213},[203,70613,70614],{"class":205,"line":1736},[203,70615,70616],{"class":318},"table {\n",[203,70618,70619],{"class":205,"line":1742},[203,70620,70621],{"class":318},"  margin:0 auto;\n",[203,70623,70624,70627,70629],{"class":205,"line":1763},[203,70625,70626],{"class":51358},"  width",[203,70628,51495],{"class":213},[203,70630,70631],{"class":318},"800px;\n",[203,70633,70634,70637,70639],{"class":205,"line":1768},[203,70635,70636],{"class":51358},"  border-collapse",[203,70638,51495],{"class":213},[203,70640,70641],{"class":318},"collapse;\n",[203,70643,70644],{"class":205,"line":1782},[203,70645,70646],{"class":318},"  color:#004085;\n",[203,70648,70649],{"class":205,"line":1787},[203,70650,1654],{"class":213},[203,70652,70653],{"class":205,"line":1816},[203,70654,70655],{"class":318},"th {\n",[203,70657,70658,70660,70662],{"class":205,"line":1821},[203,70659,70538],{"class":51358},[203,70661,51495],{"class":213},[203,70663,70664],{"class":318},"10px;\n",[203,70666,70667,70670,70672],{"class":205,"line":1838},[203,70668,70669],{"class":51358},"  background",[203,70671,51495],{"class":213},[203,70673,70674],{"class":272},"#cfe5ff;\n",[203,70676,70677],{"class":205,"line":1843},[203,70678,70679],{"class":213},"  \n",[203,70681,70682,70685,70687],{"class":205,"line":1848},[203,70683,70684],{"class":51358},"  font-size",[203,70686,51495],{"class":213},[203,70688,70689],{"class":318},"20px;\n",[203,70691,70692,70695,70697],{"class":205,"line":1853},[203,70693,70694],{"class":51358},"  font-weight",[203,70696,51495],{"class":213},[203,70698,70699],{"class":318},"400;\n",[203,70701,70702],{"class":205,"line":1867},[203,70703,1654],{"class":213},[203,70705,70706],{"class":205,"line":1872},[203,70707,70708],{"class":318},"td,th {\n",[203,70710,70711,70714],{"class":205,"line":2666},[203,70712,70713],{"class":318},"  border:1px solid",[203,70715,70716],{"class":272}," #b8daff;\n",[203,70718,70719],{"class":205,"line":2680},[203,70720,1654],{"class":213},[203,70722,70723],{"class":205,"line":2688},[203,70724,70725],{"class":318},"td {\n",[203,70727,70728],{"class":205,"line":2693},[203,70729,70730],{"class":318},"  padding:10px;\n",[203,70732,70733],{"class":205,"line":2699},[203,70734,70735],{"class":318},"  color:#666;\n",[203,70737,70738,70740,70742],{"class":205,"line":2705},[203,70739,70584],{"class":51358},[203,70741,51495],{"class":213},[203,70743,70589],{"class":318},[203,70745,70746,70748,70750],{"class":205,"line":2710},[203,70747,70684],{"class":51358},[203,70749,51495],{"class":213},[203,70751,70752],{"class":318},"16px;\n",[203,70754,70755],{"class":205,"line":8038},[203,70756,1654],{"class":213},[203,70758,70759],{"class":205,"line":8062},[203,70760,70761],{"class":318},"tbody tr {\n",[203,70763,70764,70766,70768],{"class":205,"line":8067},[203,70765,70669],{"class":51358},[203,70767,51495],{"class":213},[203,70769,70770],{"class":272},"#fff;\n",[203,70772,70773],{"class":205,"line":8073},[203,70774,1654],{"class":213},[203,70776,70777],{"class":205,"line":8100},[203,70778,70779],{"class":318},"tbody tr:hover {\n",[203,70781,70782,70784,70786],{"class":205,"line":8105},[203,70783,70669],{"class":51358},[203,70785,51495],{"class":213},[203,70787,70788],{"class":272},"#e1ecf8;\n",[203,70790,70791],{"class":205,"line":8111},[203,70792,1654],{"class":213},[203,70794,70795],{"class":205,"line":8123},[203,70796,70797],{"class":318},".info {\n",[203,70799,70800,70802,70804],{"class":205,"line":8135},[203,70801,70626],{"class":51358},[203,70803,51495],{"class":213},[203,70805,70806],{"class":318},"900px;\n",[203,70808,70809,70811,70813],{"class":205,"line":8147},[203,70810,70528],{"class":51358},[203,70812,51495],{"class":213},[203,70814,70815],{"class":318},"50px auto;\n",[203,70817,70818,70820,70822],{"class":205,"line":9806},[203,70819,70584],{"class":51358},[203,70821,51495],{"class":213},[203,70823,70589],{"class":318},[203,70825,70826],{"class":205,"line":9831},[203,70827,1654],{"class":213},[203,70829,70830],{"class":205,"line":9854},[203,70831,70832],{"class":318},".info  input, .info select {\n",[203,70834,70835,70837,70839],{"class":205,"line":9878},[203,70836,70626],{"class":51358},[203,70838,51495],{"class":213},[203,70840,70841],{"class":318},"80px;\n",[203,70843,70844,70847,70849],{"class":205,"line":9883},[203,70845,70846],{"class":51358},"  height",[203,70848,51495],{"class":213},[203,70850,70851],{"class":318},"27px;\n",[203,70853,70854,70857,70859],{"class":205,"line":9888},[203,70855,70856],{"class":51358},"  outline",[203,70858,51495],{"class":213},[203,70860,70565],{"class":318},[203,70862,70863,70866,70868],{"class":205,"line":9893},[203,70864,70865],{"class":51358},"  border-radius",[203,70867,51495],{"class":213},[203,70869,70870],{"class":318},"5px;\n",[203,70872,70873,70875],{"class":205,"line":9902},[203,70874,70713],{"class":318},[203,70876,70716],{"class":272},[203,70878,70879,70882,70884],{"class":205,"line":9907},[203,70880,70881],{"class":51358},"  padding-left",[203,70883,51495],{"class":213},[203,70885,70870],{"class":318},[203,70887,70888,70891,70893],{"class":205,"line":9913},[203,70889,70890],{"class":51358},"  box-sizing",[203,70892,51495],{"class":213},[203,70894,70895],{"class":318},"border-box;\n",[203,70897,70898,70901,70903],{"class":205,"line":9934},[203,70899,70900],{"class":51358},"  margin-right",[203,70902,51495],{"class":213},[203,70904,70905],{"class":318},"15px;\n",[203,70907,70908],{"class":205,"line":9940},[203,70909,1654],{"class":213},[203,70911,70912],{"class":205,"line":9954},[203,70913,70914],{"class":318},".info button {\n",[203,70916,70917,70919,70921],{"class":205,"line":9960},[203,70918,70626],{"class":51358},[203,70920,51495],{"class":213},[203,70922,70923],{"class":318},"60px;\n",[203,70925,70926,70928,70930],{"class":205,"line":9987},[203,70927,70846],{"class":51358},[203,70929,51495],{"class":213},[203,70931,70851],{"class":318},[203,70933,70934,70937,70939],{"class":205,"line":9996},[203,70935,70936],{"class":51358},"  background-color",[203,70938,51495],{"class":213},[203,70940,70941],{"class":272},"#004085;\n",[203,70943,70944,70946,70948],{"class":205,"line":10002},[203,70945,70856],{"class":51358},[203,70947,51495],{"class":213},[203,70949,70565],{"class":318},[203,70951,70952,70955,70957],{"class":205,"line":10010},[203,70953,70954],{"class":51358},"  border",[203,70956,51495],{"class":213},[203,70958,70533],{"class":318},[203,70960,70961,70964,70966],{"class":205,"line":10015},[203,70962,70963],{"class":51358},"  color",[203,70965,51495],{"class":213},[203,70967,70770],{"class":272},[203,70969,70970,70973,70975],{"class":205,"line":16694},[203,70971,70972],{"class":51358},"  cursor",[203,70974,51495],{"class":213},[203,70976,70977],{"class":318},"pointer;\n",[203,70979,70980,70982,70984],{"class":205,"line":16700},[203,70981,70865],{"class":51358},[203,70983,51495],{"class":213},[203,70985,70870],{"class":318},[203,70987,70988],{"class":205,"line":16723},[203,70989,1654],{"class":213},[203,70991,70992],{"class":205,"line":16729},[203,70993,70994],{"class":318},".info .age {\n",[203,70996,70997,70999,71001],{"class":205,"line":16752},[203,70998,70626],{"class":51358},[203,71000,51495],{"class":213},[203,71002,71003],{"class":318},"50px;\n",[203,71005,71006],{"class":205,"line":16766},[203,71007,1654],{"class":213},[19,71009,71010],{},"思路：",[19,71012,71013],{},[25,71014],{"alt":27,"src":71015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71017,71018],{},[25,71019],{"alt":27,"src":71020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71022,71023],{},[25,71024],{"alt":27,"src":71025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[174,71027,71029],{"id":71028},"_3315-重绘回流","3.3.15 重绘回流",[19,71031,71032],{},[25,71033],{"alt":27,"src":71034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71036,71037],{},[25,71038],{"alt":27,"src":71039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71041,71042],{},[25,71043],{"alt":27,"src":71044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71046,71048],{"id":71047},"_34-bom","3.4 BOM",[19,71050,71051],{},[25,71052],{"alt":27,"src":71053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71055,71056],{},"平时写的document省略了window而已，实际上是window.document",[19,71058,71059],{},"函数也是这样，调用的时候实际为window.fn()",[19,71061,71062],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71064,71065],{},"window大部分情况下可以省略",[174,71067,71069],{"id":71068},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71071,71072],{},"只执行一次",[19,71074,71075],{},[25,71076],{"alt":27,"src":71077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71079,71080],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71082,71083],{},[25,71084],{"alt":27,"src":71085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[174,71087,71089],{"id":71088},"_342-js执行机制","3.4.2 JS执行机制",[19,71091,71092],{},[25,71093],{"alt":27,"src":71094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71096,71097],{},"两个的结果都是1111 3333 2222",[19,71099,71100],{},[25,71101],{"alt":27,"src":71102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71104,71105],{},[25,71106],{"alt":27,"src":71107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71109,71110],{},[25,71111],{"alt":27,"src":71112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71114,71115],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71117,71118],{},"工作流程：",[19,71120,71121],{},[25,71122],{"alt":27,"src":71123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71125,71126],{},[25,71127],{"alt":27,"src":71128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71130,71131],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71133,71134],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[174,71136,71138],{"id":71137},"_343-location对象","3.4.3 location对象",[19,71140,71141],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71143,71144],{},[25,71145],{"alt":27,"src":71146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71148,71149],{},"href可以跳转页面",[157,71151,71152],{},[160,71153,71154],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71156,71157],{},"search得到提交信息之后网站后边的地址",[19,71159,71160],{},[25,71161],{"alt":27,"src":71162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71164,71165],{},[25,71166],{"alt":27,"src":71167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[157,71169,71170],{"start":124},[160,71171,71172],{},"hash:这个获取单页面应用#后边的地址",[19,71174,71175],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71177,71178],{},[25,71179],{"alt":27,"src":71180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[194,71182,71184],{"className":53125,"code":71183,"language":53127,"meta":27,"style":27},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[200,71185,71186,71206,71226],{"__ignoreMap":27},[203,71187,71188,71190,71192,71194,71196,71199,71202,71204],{"class":205,"line":206},[203,71189,52202],{"class":213},[203,71191,452],{"class":51358},[203,71193,61115],{"class":2052},[203,71195,259],{"class":213},[203,71197,71198],{"class":318},"\"#\u002Fmy\"",[203,71200,71201],{"class":213},">我的\u003C\u002F",[203,71203,452],{"class":51358},[203,71205,51365],{"class":213},[203,71207,71208,71210,71212,71214,71216,71219,71222,71224],{"class":205,"line":124},[203,71209,52202],{"class":213},[203,71211,452],{"class":51358},[203,71213,61115],{"class":2052},[203,71215,259],{"class":213},[203,71217,71218],{"class":318},"\"#\u002Ffriend\"",[203,71220,71221],{"class":213},">关注\u003C\u002F",[203,71223,452],{"class":51358},[203,71225,51365],{"class":213},[203,71227,71228,71230,71232,71234,71236,71239,71242,71244],{"class":205,"line":1269},[203,71229,52202],{"class":213},[203,71231,452],{"class":51358},[203,71233,61115],{"class":2052},[203,71235,259],{"class":213},[203,71237,71238],{"class":318},"\"#\u002Fdownload\"",[203,71240,71241],{"class":213},">下载\u003C\u002F",[203,71243,452],{"class":51358},[203,71245,51365],{"class":213},[19,71247,71248],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[157,71250,71251],{"start":1269},[160,71252,71253,71254,71256,71257,71259],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53774,71255],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53774,71258],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[174,71261,71263],{"id":71262},"_345-navigator对象","3.4.5 navigator对象",[19,71265,71266],{},[25,71267],{"alt":27,"src":71268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[194,71270,71274],{"className":71271,"code":71272,"language":71273,"meta":27,"style":27},"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",[200,71275,71276,71281,71292,71304,71309,71360,71401,71406,71419,71431,71436],{"__ignoreMap":27},[203,71277,71278],{"class":205,"line":206},[203,71279,71280],{"class":272},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[203,71282,71283,71285,71287,71289],{"class":205,"line":124},[203,71284,440],{"class":209},[203,71286,214],{"class":213},[203,71288,54507],{"class":209},[203,71290,71291],{"class":213}," () { \n",[203,71293,71294,71296,71299,71301],{"class":205,"line":1269},[203,71295,6882],{"class":209},[203,71297,71298],{"class":262}," userAgent",[203,71300,13654],{"class":209},[203,71302,71303],{"class":213}," navigator.userAgent \n",[203,71305,71306],{"class":205,"line":1284},[203,71307,71308],{"class":272},"\u002F\u002F 验证是否为Android或iPhone \n",[203,71310,71311,71313,71316,71318,71321,71324,71326,71328,71331,71333,71336,71340,71342,71344,71346,71349,71351,71353,71355,71357],{"class":205,"line":1290},[203,71312,6882],{"class":209},[203,71314,71315],{"class":262}," android",[203,71317,13654],{"class":209},[203,71319,71320],{"class":213}," userAgent.",[203,71322,71323],{"class":2052},"match",[203,71325,214],{"class":213},[203,71327,798],{"class":318},[203,71329,71330],{"class":48035},"(Android);",[203,71332,1200],{"class":209},[203,71334,71335],{"class":262},"[\\s",[203,71337,71339],{"class":71338},"snhLl","\\\u002F",[203,71341,1154],{"class":262},[203,71343,695],{"class":209},[203,71345,214],{"class":48035},[203,71347,71348],{"class":262},"[\\d.]",[203,71350,695],{"class":209},[203,71352,643],{"class":48035},[203,71354,1200],{"class":209},[203,71356,798],{"class":318},[203,71358,71359],{"class":213},") \n",[203,71361,71362,71364,71367,71369,71371,71373,71375,71377,71380,71383,71386,71388,71390,71393,71395,71397,71399],{"class":205,"line":1304},[203,71363,6882],{"class":209},[203,71365,71366],{"class":262}," iphone",[203,71368,13654],{"class":209},[203,71370,71320],{"class":213},[203,71372,71323],{"class":2052},[203,71374,214],{"class":213},[203,71376,798],{"class":318},[203,71378,71379],{"class":48035},"(iPhone",[203,71381,71382],{"class":262},"\\s",[203,71384,71385],{"class":48035},"OS)",[203,71387,71382],{"class":262},[203,71389,214],{"class":48035},[203,71391,71392],{"class":262},"[\\d_]",[203,71394,695],{"class":209},[203,71396,643],{"class":48035},[203,71398,798],{"class":318},[203,71400,71359],{"class":213},[203,71402,71403],{"class":205,"line":1310},[203,71404,71405],{"class":272},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[203,71407,71408,71410,71413,71416],{"class":205,"line":1401},[203,71409,1620],{"class":209},[203,71411,71412],{"class":213}," (android ",[203,71414,71415],{"class":209},"||",[203,71417,71418],{"class":213}," iphone) { \n",[203,71420,71421,71424,71426,71429],{"class":205,"line":1407},[203,71422,71423],{"class":213},"location.href ",[203,71425,259],{"class":209},[203,71427,71428],{"class":318}," 'http:\u002F\u002Fm.itcast.cn'",[203,71430,2763],{"class":213},[203,71432,71433],{"class":205,"line":1419},[203,71434,71435],{"class":213},"} \n",[203,71437,71438],{"class":205,"line":1701},[203,71439,71440],{"class":213},"})()\n",[174,71442,71444],{"id":71443},"_346-histroy对象","3.4.6 histroy对象",[19,71446,71447],{},[25,71448],{"alt":27,"src":71449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,71451,71452],{},"浏览器地址的前进与后退!!!",[19,71454,71455],{},"history.back() 等效于 history.go(-1)",[19,71457,71458],{},"history.forward() 等效于 history.go(1)",[14,71460,71462],{"id":71461},"_35-本地存储","3.5 本地存储",[157,71464,71465,71468,71471],{},[160,71466,71467],{},"数据存储在用户浏览器中",[160,71469,71470],{},"设置、读取方便、甚至页面刷新不丢失数据",[160,71472,71473],{},"容量较大，sessionStorage和localStorage约 5M 左右",[174,71475,71477],{"id":71476},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,71479,71480],{},"只能存储字符串",[19,71482,71483],{},[25,71484],{"alt":27,"src":71485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,71487,71488],{},[25,71489],{"alt":27,"src":71490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,71492,71493],{},"键值对要加引号,不然就会当变量来看了",[19,71495,71496],{},"localStorage.setItem('uname', 'pink')",[19,71498,71499],{},"刷新之后信息不再丢失",[19,71501,71502],{},"操作key,value会跟着变",[19,71504,71505],{},"删除只删除键就可以,即名字",[19,71507,71496],{},[19,71509,71510],{},"改:",[19,71512,71513],{},"localStorage.setItem('uname','red')",[19,71515,71516],{},"有这个键就是改,没有这个键就是改",[19,71518,71519],{},[25,71520],{"alt":27,"src":71521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,71523,71524],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,71526,71527],{},[25,71528],{"alt":27,"src":71529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,71531,71532],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[174,71534,71536],{"id":71535},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,71538,71539],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,71541,71542],{},"特性:",[157,71544,71545,71548,71551,71554],{},[160,71546,71547],{},"生命周期为关闭浏览器窗口",[160,71549,71550],{},"在同一个窗口(页面)下数据可以共享",[160,71552,71553],{},"以键值对的形式存储使用",[160,71555,71556],{},"用法跟localStorage 基本相同",[174,71558,71560],{"id":71559},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,71562,71563],{},"本地只能存储字符串,无法直接存储复杂数据类型",[194,71565,71567],{"className":53125,"code":71566,"language":53127,"meta":27,"style":27},"\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",[200,71568,71569,71577,71582,71587,71592,71597,71601,71606,71611],{"__ignoreMap":27},[203,71570,71571,71573,71575],{"class":205,"line":206},[203,71572,1124],{"class":213},[203,71574,51871],{"class":51358},[203,71576,51365],{"class":213},[203,71578,71579],{"class":205,"line":124},[203,71580,71581],{"class":213},"    const obj = {\n",[203,71583,71584],{"class":205,"line":1269},[203,71585,71586],{"class":213},"      uname: 'pink老师',\n",[203,71588,71589],{"class":205,"line":1284},[203,71590,71591],{"class":213},"      age: 18,\n",[203,71593,71594],{"class":205,"line":1290},[203,71595,71596],{"class":213},"      gender: '女'\n",[203,71598,71599],{"class":205,"line":1304},[203,71600,2276],{"class":213},[203,71602,71603],{"class":205,"line":1310},[203,71604,71605],{"class":213},"    \u002F\u002F 存储复杂数据类型\n",[203,71607,71608],{"class":205,"line":1401},[203,71609,71610],{"class":213},"    localStorage.setItem('obj', obj)\n",[203,71612,71613,71615,71617],{"class":205,"line":1407},[203,71614,52475],{"class":213},[203,71616,51871],{"class":51358},[203,71618,51365],{"class":213},[19,71620,71621],{},[25,71622],{"alt":27,"src":71623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,71625,71626],{},"如果获取一下数据:",[19,71628,71629],{},"log(localStorage.getItem('obj'))",[19,71631,71632],{},[25,71633],{"alt":27,"src":71634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,71636,71637],{},"发现直接存对象是使用不了的!!!",[22088,71639,71641],{"id":71640},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,71643,71644],{},[25,71645],{"alt":27,"src":71646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[194,71648,71650],{"className":50691,"code":71649,"language":50693,"meta":27,"style":27},"\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",[200,71651,71652,71660,71670,71680,71689,71697,71701,71705,71731,71750,71758,71762,71767,71772],{"__ignoreMap":27},[203,71653,71654,71656,71658],{"class":205,"line":206},[203,71655,1124],{"class":213},[203,71657,51871],{"class":51358},[203,71659,51365],{"class":213},[203,71661,71662,71664,71666,71668],{"class":205,"line":124},[203,71663,11311],{"class":209},[203,71665,70029],{"class":262},[203,71667,13654],{"class":209},[203,71669,15662],{"class":213},[203,71671,71672,71675,71678],{"class":205,"line":1269},[203,71673,71674],{"class":213},"      uname: ",[203,71676,71677],{"class":318},"'pink老师'",[203,71679,31524],{"class":213},[203,71681,71682,71685,71687],{"class":205,"line":1284},[203,71683,71684],{"class":213},"      age: ",[203,71686,864],{"class":262},[203,71688,31524],{"class":213},[203,71690,71691,71694],{"class":205,"line":1290},[203,71692,71693],{"class":213},"      gender: ",[203,71695,71696],{"class":318},"'女'\n",[203,71698,71699],{"class":205,"line":1304},[203,71700,2276],{"class":213},[203,71702,71703],{"class":205,"line":1310},[203,71704,71605],{"class":272},[203,71706,71707,71710,71713,71715,71718,71720,71723,71725,71728],{"class":205,"line":1401},[203,71708,71709],{"class":213},"  localStorage.",[203,71711,71712],{"class":2052},"setItem",[203,71714,214],{"class":213},[203,71716,71717],{"class":318},"'obj'",[203,71719,12525],{"class":213},[203,71721,71722],{"class":262},"JSON",[203,71724,772],{"class":213},[203,71726,71727],{"class":2052},"stringify",[203,71729,71730],{"class":213},"(obj))\n",[203,71732,71733,71736,71738,71741,71744,71746,71748],{"class":205,"line":1407},[203,71734,71735],{"class":213},"  console.",[203,71737,58305],{"class":2052},[203,71739,71740],{"class":213},"(localStorage.",[203,71742,71743],{"class":2052},"getItem",[203,71745,214],{"class":213},[203,71747,71717],{"class":318},[203,71749,30555],{"class":213},[203,71751,71752,71754,71756],{"class":205,"line":1419},[203,71753,52475],{"class":213},[203,71755,51871],{"class":51358},[203,71757,51365],{"class":213},[203,71759,71760],{"class":205,"line":1701},[203,71761,70679],{"class":213},[203,71763,71764],{"class":205,"line":1706},[203,71765,71766],{"class":213},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[203,71768,71769],{"class":205,"line":1712},[203,71770,71771],{"class":213},"  类型是字符串的\n",[203,71773,71774],{"class":205,"line":1717},[203,71775,71776],{"class":213},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22088,71778,71780],{"id":71779},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,71782,71783],{},[25,71784],{"alt":27,"src":71785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,71787,71788],{},[25,71789],{"alt":27,"src":71790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[194,71792,71794],{"className":53125,"code":71793,"language":53127,"meta":27,"style":27},"  \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",[200,71795,71796,71804,71808,71812,71816,71820,71824,71829,71834,71839,71844,71849,71854,71859,71864],{"__ignoreMap":27},[203,71797,71798,71800,71802],{"class":205,"line":206},[203,71799,52202],{"class":213},[203,71801,51871],{"class":51358},[203,71803,51365],{"class":213},[203,71805,71806],{"class":205,"line":124},[203,71807,71581],{"class":213},[203,71809,71810],{"class":205,"line":1269},[203,71811,71586],{"class":213},[203,71813,71814],{"class":205,"line":1284},[203,71815,71591],{"class":213},[203,71817,71818],{"class":205,"line":1290},[203,71819,71596],{"class":213},[203,71821,71822],{"class":205,"line":1304},[203,71823,2276],{"class":213},[203,71825,71826],{"class":205,"line":1310},[203,71827,71828],{"class":213},"    \u002F\u002F 1.存储复杂数据类型\n",[203,71830,71831],{"class":205,"line":1401},[203,71832,71833],{"class":213},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[203,71835,71836],{"class":205,"line":1407},[203,71837,71838],{"class":213},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[203,71840,71841],{"class":205,"line":1419},[203,71842,71843],{"class":213},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[203,71845,71846],{"class":205,"line":1701},[203,71847,71848],{"class":213},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[203,71850,71851],{"class":205,"line":1706},[203,71852,71853],{"class":213},"    \u002F\u002F 取\n",[203,71855,71856],{"class":205,"line":1712},[203,71857,71858],{"class":213},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[203,71860,71861],{"class":205,"line":1717},[203,71862,71863],{"class":213},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[203,71865,71866,71868,71870],{"class":205,"line":1731},[203,71867,52475],{"class":213},[203,71869,51871],{"class":51358},[203,71871,51365],{"class":213},[19,71873,71874],{},[25,71875],{"alt":27,"src":71876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[174,71878,71880],{"id":71879},"_356-数组map方法","3.5.6 数组map方法",[19,71882,71883],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,71885,71886],{},[25,71887],{"alt":27,"src":71888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,71890,71891],{},[25,71892],{"alt":27,"src":71893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,71895,71896,71899],{},[363,71897,71898],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,71901,71902],{},"map有返回值，但是forEach没有返回值",[19,71904,71905],{},"map是个方法。用的时候要加 ()",[19,71907,71908],{},"map返回的是一个数组",[174,71910,71912],{"id":71911},"_357-数组中join方法","3.5.7 数组中join方法",[19,71914,71915],{},[25,71916],{"alt":27,"src":71917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,71919,71920],{},"类似于python中拼接字符串一样！",[157,71922,71923,71926,71929],{},[160,71924,71925],{},"小括号为空则逗号分开",[160,71927,71928],{},"小括号为空字符串 ''，则元素之间没有分隔符",[160,71930,71931],{},"小括号用啥符号就用进行分割",[174,71933,71935],{"id":71934},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[157,71937,71938,71941,71944,71947,71950],{},[160,71939,71940],{},"记住本地时间获取快速方式：new Date().toDateString()",[160,71942,71943],{},"尽量减少DOM操作，用好map+join的渲染方式",[160,71945,71946],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[160,71948,71949],{},"return可以实现函数的结束",[160,71951,71952],{},"禁止跳转是 preventDefault() 不要忘记",[194,71954,71956],{"className":50691,"code":71955,"language":50693,"meta":27,"style":27},"\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",[200,71957,71958,71968,71982,71986,71994,72008,72028,72040,72048,72054,72064,72074,72078,72082,72088,72098,72110,72114,72118,72125,72137,72151,72161,72165,72169,72176,72183,72190,72202,72214,72224,72236,72240,72244,72251,72258,72270,72282,72292,72304,72334,72338,72342,72349,72361,72373,72397,72407,72417,72421,72425,72433,72444,72456,72468,72480,72497,72509,72521,72525,72529,72536,72548,72560,72572,72583,72601,72614,72626,72650,72661,72665,72669,72677,72687,72691,72695,72701,72713,72724,72734,72738,72742,72748,72770,72774,72778,72784,72790,72802,72812,72824,72854,72867,72884,72888,72892,72903,72925,72935,72939,72943,72956,72966,72978,72990,73002,73014,73024,73034,73044,73055,73068,73072,73080,73088,73092,73100,73113,73133,73166,73199,73232,73258,73276,73294,73302,73328,73346,73364,73382,73400,73418,73426,73434,73452,73460,73489,73497,73505,73513,73526,73538,73550,73562,73574,73586,73599,73611,73619,73627,73635,73640,73645,73649,73653,73657,73661,73665,73669,73674,73679,73684,73689,73697,73705,73713,73718,73723,73728,73733,73738,73743,73748,73753,73758,73763,73768,73773,73778,73783,73787,73792,73797,73807,73816,73820,73825,73834,73850,73892,73932,73971,74036,74044,74048,74053,74071,74079,74084,74089,74119,74125,74130,74143,74155,74167,74179,74191,74203,74215,74219,74229,74233,74238,74243,74247,74256,74260,74265,74270,74289,74294,74314,74318,74323,74327,74332,74350,74368,74386,74405,74424,74443,74448,74454,74475,74481,74490,74496,74502,74508,74535,74548,74553,74563,74569,74575,74581,74587,74592,74598,74604,74610,74616,74649,74654,74659,74664,74669,74675,74681,74687,74698,74703,74709,74716,74730,74736,74760,74765,74770,74776,74782,74803,74809,74822,74828,74834,74840,74846,74851,74857,74863,74869,74887,74901,74907,74915,74921,74943,74948,74953,74958,74963,74968,74977,74986,74991],{"__ignoreMap":27},[203,71959,71960,71962,71964,71966],{"class":205,"line":206},[203,71961,51355],{"class":213},[203,71963,51359],{"class":51358},[203,71965,51362],{"class":2052},[203,71967,51365],{"class":213},[203,71969,71970,71972,71974,71976,71978,71980],{"class":205,"line":124},[203,71971,1124],{"class":213},[203,71973,50693],{"class":51358},[203,71975,51374],{"class":2052},[203,71977,259],{"class":213},[203,71979,51379],{"class":318},[203,71981,51365],{"class":213},[203,71983,71984],{"class":205,"line":1269},[203,71985,2489],{"emptyLinePlaceholder":131},[203,71987,71988,71990,71992],{"class":205,"line":1284},[203,71989,1124],{"class":213},[203,71991,51392],{"class":51358},[203,71993,51365],{"class":213},[203,71995,71996,71998,72000,72002,72004,72006],{"class":205,"line":1290},[203,71997,52202],{"class":213},[203,71999,51402],{"class":51358},[203,72001,51405],{"class":2052},[203,72003,259],{"class":213},[203,72005,51410],{"class":318},[203,72007,51365],{"class":213},[203,72009,72010,72012,72014,72016,72018,72020,72022,72024,72026],{"class":205,"line":1304},[203,72011,52202],{"class":213},[203,72013,51402],{"class":51358},[203,72015,15010],{"class":2052},[203,72017,259],{"class":213},[203,72019,51449],{"class":318},[203,72021,51429],{"class":2052},[203,72023,259],{"class":213},[203,72025,51456],{"class":318},[203,72027,51365],{"class":213},[203,72029,72030,72032,72034,72036,72038],{"class":205,"line":1310},[203,72031,52202],{"class":213},[203,72033,51465],{"class":51358},[203,72035,51468],{"class":213},[203,72037,51465],{"class":51358},[203,72039,51365],{"class":213},[203,72041,72042,72044,72046],{"class":205,"line":1401},[203,72043,52202],{"class":213},[203,72045,5216],{"class":51358},[203,72047,51365],{"class":213},[203,72049,72050,72052],{"class":205,"line":1407},[203,72051,6493],{"class":51358},[203,72053,15662],{"class":213},[203,72055,72056,72058,72060,72062],{"class":205,"line":1419},[203,72057,54753],{"class":262},[203,72059,51495],{"class":213},[203,72061,405],{"class":262},[203,72063,1380],{"class":213},[203,72065,72066,72068,72070,72072],{"class":205,"line":1701},[203,72067,54764],{"class":262},[203,72069,51495],{"class":213},[203,72071,405],{"class":262},[203,72073,1380],{"class":213},[203,72075,72076],{"class":205,"line":1706},[203,72077,2276],{"class":213},[203,72079,72080],{"class":205,"line":1712},[203,72081,2489],{"emptyLinePlaceholder":131},[203,72083,72084,72086],{"class":205,"line":1717},[203,72085,57337],{"class":51358},[203,72087,15662],{"class":213},[203,72089,72090,72092,72094,72096],{"class":205,"line":1731},[203,72091,57344],{"class":262},[203,72093,51495],{"class":213},[203,72095,51650],{"class":262},[203,72097,1380],{"class":213},[203,72099,72100,72102,72104,72106,72108],{"class":205,"line":1736},[203,72101,62135],{"class":262},[203,72103,51495],{"class":213},[203,72105,914],{"class":262},[203,72107,51550],{"class":209},[203,72109,1380],{"class":213},[203,72111,72112],{"class":205,"line":1742},[203,72113,2276],{"class":213},[203,72115,72116],{"class":205,"line":1763},[203,72117,2489],{"emptyLinePlaceholder":131},[203,72119,72120,72123],{"class":205,"line":1768},[203,72121,72122],{"class":2052},"    .info",[203,72124,15662],{"class":213},[203,72126,72127,72129,72131,72133,72135],{"class":205,"line":1782},[203,72128,54829],{"class":262},[203,72130,51495],{"class":213},[203,72132,51547],{"class":262},[203,72134,51550],{"class":209},[203,72136,1380],{"class":213},[203,72138,72139,72141,72143,72145,72147,72149],{"class":205,"line":1787},[203,72140,54764],{"class":262},[203,72142,51495],{"class":213},[203,72144,660],{"class":262},[203,72146,51550],{"class":209},[203,72148,51614],{"class":262},[203,72150,1380],{"class":213},[203,72152,72153,72155,72157,72159],{"class":205,"line":1816},[203,72154,57344],{"class":262},[203,72156,51495],{"class":213},[203,72158,51650],{"class":262},[203,72160,1380],{"class":213},[203,72162,72163],{"class":205,"line":1821},[203,72164,2276],{"class":213},[203,72166,72167],{"class":205,"line":1838},[203,72168,2489],{"emptyLinePlaceholder":131},[203,72170,72171,72174],{"class":205,"line":1843},[203,72172,72173],{"class":2052},"    .uname",[203,72175,31524],{"class":213},[203,72177,72178,72181],{"class":205,"line":1848},[203,72179,72180],{"class":2052},"    .age",[203,72182,31524],{"class":213},[203,72184,72185,72188],{"class":205,"line":1853},[203,72186,72187],{"class":2052},"    .salary",[203,72189,15662],{"class":213},[203,72191,72192,72194,72196,72198,72200],{"class":205,"line":1867},[203,72193,54829],{"class":262},[203,72195,51495],{"class":213},[203,72197,525],{"class":262},[203,72199,51550],{"class":209},[203,72201,1380],{"class":213},[203,72203,72204,72206,72208,72210,72212],{"class":205,"line":1872},[203,72205,54843],{"class":262},[203,72207,51495],{"class":213},[203,72209,914],{"class":262},[203,72211,51550],{"class":209},[203,72213,1380],{"class":213},[203,72215,72216,72218,72220,72222],{"class":205,"line":2666},[203,72217,61838],{"class":262},[203,72219,51495],{"class":213},[203,72221,54795],{"class":262},[203,72223,1380],{"class":213},[203,72225,72226,72228,72230,72232,72234],{"class":205,"line":2680},[203,72227,61808],{"class":262},[203,72229,51495],{"class":213},[203,72231,789],{"class":262},[203,72233,51550],{"class":209},[203,72235,1380],{"class":213},[203,72237,72238],{"class":205,"line":2688},[203,72239,2276],{"class":213},[203,72241,72242],{"class":205,"line":2693},[203,72243,2489],{"emptyLinePlaceholder":131},[203,72245,72246,72249],{"class":205,"line":2699},[203,72247,72248],{"class":2052},"    .gender",[203,72250,31524],{"class":213},[203,72252,72253,72256],{"class":205,"line":2705},[203,72254,72255],{"class":2052},"    .city",[203,72257,15662],{"class":213},[203,72259,72260,72262,72264,72266,72268],{"class":205,"line":2710},[203,72261,54829],{"class":262},[203,72263,51495],{"class":213},[203,72265,525],{"class":262},[203,72267,51550],{"class":209},[203,72269,1380],{"class":213},[203,72271,72272,72274,72276,72278,72280],{"class":205,"line":8038},[203,72273,54843],{"class":262},[203,72275,51495],{"class":213},[203,72277,1039],{"class":262},[203,72279,51550],{"class":209},[203,72281,1380],{"class":213},[203,72283,72284,72286,72288,72290],{"class":205,"line":8062},[203,72285,61838],{"class":262},[203,72287,51495],{"class":213},[203,72289,54795],{"class":262},[203,72291,1380],{"class":213},[203,72293,72294,72296,72298,72300,72302],{"class":205,"line":8067},[203,72295,61808],{"class":262},[203,72297,51495],{"class":213},[203,72299,789],{"class":262},[203,72301,51550],{"class":209},[203,72303,1380],{"class":213},[203,72305,72306,72308,72310,72312,72314,72316,72319,72321,72323,72325,72328,72330,72332],{"class":205,"line":8073},[203,72307,62035],{"class":262},[203,72309,51495],{"class":213},[203,72311,431],{"class":262},[203,72313,51550],{"class":209},[203,72315,51579],{"class":262},[203,72317,72318],{"class":262}," rgb",[203,72320,214],{"class":213},[203,72322,1811],{"class":262},[203,72324,12525],{"class":213},[203,72326,72327],{"class":262},"197",[203,72329,12525],{"class":213},[203,72331,72327],{"class":262},[203,72333,2808],{"class":213},[203,72335,72336],{"class":205,"line":8100},[203,72337,2276],{"class":213},[203,72339,72340],{"class":205,"line":8105},[203,72341,2489],{"emptyLinePlaceholder":131},[203,72343,72344,72347],{"class":205,"line":8111},[203,72345,72346],{"class":51358},"    button",[203,72348,15662],{"class":213},[203,72350,72351,72353,72355,72357,72359],{"class":205,"line":8123},[203,72352,54843],{"class":262},[203,72354,51495],{"class":213},[203,72356,1039],{"class":262},[203,72358,51550],{"class":209},[203,72360,1380],{"class":213},[203,72362,72363,72365,72367,72369,72371],{"class":205,"line":8135},[203,72364,54829],{"class":262},[203,72366,51495],{"class":213},[203,72368,698],{"class":262},[203,72370,51550],{"class":209},[203,72372,1380],{"class":213},[203,72374,72375,72377,72379,72382,72384,72386,72388,72391,72393,72395],{"class":205,"line":8147},[203,72376,54942],{"class":262},[203,72378,51495],{"class":213},[203,72380,72381],{"class":262},"rgb",[203,72383,214],{"class":213},[203,72385,1183],{"class":262},[203,72387,12525],{"class":213},[203,72389,72390],{"class":262},"187",[203,72392,12525],{"class":213},[203,72394,513],{"class":262},[203,72396,2808],{"class":213},[203,72398,72399,72401,72403,72405],{"class":205,"line":9806},[203,72400,57474],{"class":262},[203,72402,51495],{"class":213},[203,72404,60900],{"class":262},[203,72406,1380],{"class":213},[203,72408,72409,72411,72413,72415],{"class":205,"line":9831},[203,72410,62035],{"class":262},[203,72412,51495],{"class":213},[203,72414,405],{"class":262},[203,72416,1380],{"class":213},[203,72418,72419],{"class":205,"line":9854},[203,72420,2276],{"class":213},[203,72422,72423],{"class":205,"line":9878},[203,72424,2489],{"emptyLinePlaceholder":131},[203,72426,72427,72429,72431],{"class":205,"line":9883},[203,72428,72346],{"class":51358},[203,72430,51746],{"class":51358},[203,72432,15662],{"class":213},[203,72434,72435,72437,72439,72442],{"class":205,"line":9888},[203,72436,55067],{"class":262},[203,72438,51495],{"class":213},[203,72440,72441],{"class":262},"inline-block",[203,72443,1380],{"class":213},[203,72445,72446,72448,72450,72452,72454],{"class":205,"line":9893},[203,72447,54829],{"class":262},[203,72449,51495],{"class":213},[203,72451,660],{"class":262},[203,72453,51550],{"class":209},[203,72455,1380],{"class":213},[203,72457,72458,72460,72462,72464,72466],{"class":205,"line":9902},[203,72459,54843],{"class":262},[203,72461,51495],{"class":213},[203,72463,660],{"class":262},[203,72465,51550],{"class":209},[203,72467,1380],{"class":213},[203,72469,72470,72472,72474,72476,72478],{"class":205,"line":9907},[203,72471,57417],{"class":262},[203,72473,51495],{"class":213},[203,72475,686],{"class":262},[203,72477,51550],{"class":209},[203,72479,1380],{"class":213},[203,72481,72482,72484,72486,72488,72490,72492,72495],{"class":205,"line":9913},[203,72483,62035],{"class":262},[203,72485,51495],{"class":213},[203,72487,431],{"class":262},[203,72489,51550],{"class":209},[203,72491,51579],{"class":262},[203,72493,72494],{"class":262}," #fff",[203,72496,1380],{"class":213},[203,72498,72499,72501,72503,72505,72507],{"class":205,"line":9934},[203,72500,55192],{"class":262},[203,72502,51495],{"class":213},[203,72504,533],{"class":262},[203,72506,51550],{"class":209},[203,72508,1380],{"class":213},[203,72510,72511,72513,72515,72517,72519],{"class":205,"line":9940},[203,72512,61808],{"class":262},[203,72514,51495],{"class":213},[203,72516,431],{"class":262},[203,72518,51550],{"class":209},[203,72520,1380],{"class":213},[203,72522,72523],{"class":205,"line":9954},[203,72524,2276],{"class":213},[203,72526,72527],{"class":205,"line":9960},[203,72528,2489],{"emptyLinePlaceholder":131},[203,72530,72531,72534],{"class":205,"line":9987},[203,72532,72533],{"class":2052},"    .total",[203,72535,15662],{"class":213},[203,72537,72538,72540,72542,72544,72546],{"class":205,"line":9996},[203,72539,54829],{"class":262},[203,72541,51495],{"class":213},[203,72543,61687],{"class":262},[203,72545,51550],{"class":209},[203,72547,1380],{"class":213},[203,72549,72550,72552,72554,72556,72558],{"class":205,"line":10002},[203,72551,54843],{"class":262},[203,72553,51495],{"class":213},[203,72555,615],{"class":262},[203,72557,51550],{"class":209},[203,72559,1380],{"class":213},[203,72561,72562,72564,72566,72568,72570],{"class":205,"line":10010},[203,72563,57417],{"class":262},[203,72565,51495],{"class":213},[203,72567,615],{"class":262},[203,72569,51550],{"class":209},[203,72571,1380],{"class":213},[203,72573,72574,72576,72578,72581],{"class":205,"line":10015},[203,72575,57344],{"class":262},[203,72577,51495],{"class":213},[203,72579,72580],{"class":262},"right",[203,72582,1380],{"class":213},[203,72584,72585,72587,72589,72591,72593,72595,72597,72599],{"class":205,"line":16694},[203,72586,54764],{"class":262},[203,72588,51495],{"class":213},[203,72590,615],{"class":262},[203,72592,51550],{"class":209},[203,72594,51614],{"class":262},[203,72596,2127],{"class":262},[203,72598,51550],{"class":209},[203,72600,1380],{"class":213},[203,72602,72603,72606,72608,72610,72612],{"class":205,"line":16700},[203,72604,72605],{"class":262},"      padding-right",[203,72607,51495],{"class":213},[203,72609,660],{"class":262},[203,72611,51550],{"class":209},[203,72613,1380],{"class":213},[203,72615,72616,72618,72620,72622,72624],{"class":205,"line":16723},[203,72617,54980],{"class":262},[203,72619,51495],{"class":213},[203,72621,737],{"class":262},[203,72623,51550],{"class":209},[203,72625,1380],{"class":213},[203,72627,72628,72630,72632,72634,72636,72639,72641,72644,72646,72648],{"class":205,"line":16729},[203,72629,54942],{"class":262},[203,72631,51495],{"class":213},[203,72633,72381],{"class":262},[203,72635,214],{"class":213},[203,72637,72638],{"class":262},"237",[203,72640,12525],{"class":213},[203,72642,72643],{"class":262},"235",[203,72645,12525],{"class":213},[203,72647,72643],{"class":262},[203,72649,2808],{"class":213},[203,72651,72652,72655,72657,72659],{"class":205,"line":16752},[203,72653,72654],{"class":262},"      box-sizing",[203,72656,51495],{"class":213},[203,72658,60563],{"class":262},[203,72660,1380],{"class":213},[203,72662,72663],{"class":205,"line":16766},[203,72664,2276],{"class":213},[203,72666,72667],{"class":205,"line":16786},[203,72668,2489],{"emptyLinePlaceholder":131},[203,72670,72671,72673,72675],{"class":205,"line":16792},[203,72672,72533],{"class":2052},[203,72674,51746],{"class":51358},[203,72676,15662],{"class":213},[203,72678,72679,72681,72683,72685],{"class":205,"line":16803},[203,72680,57474],{"class":262},[203,72682,51495],{"class":213},[203,72684,57479],{"class":262},[203,72686,1380],{"class":213},[203,72688,72689],{"class":205,"line":16826},[203,72690,2276],{"class":213},[203,72692,72693],{"class":205,"line":16848},[203,72694,2489],{"emptyLinePlaceholder":131},[203,72696,72697,72699],{"class":205,"line":16853},[203,72698,65081],{"class":51358},[203,72700,15662],{"class":213},[203,72702,72703,72705,72707,72709,72711],{"class":205,"line":16859},[203,72704,54829],{"class":262},[203,72706,51495],{"class":213},[203,72708,61687],{"class":262},[203,72710,51550],{"class":209},[203,72712,1380],{"class":213},[203,72714,72715,72717,72719,72722],{"class":205,"line":16873},[203,72716,54764],{"class":262},[203,72718,51495],{"class":213},[203,72720,72721],{"class":262},"auto",[203,72723,1380],{"class":213},[203,72725,72726,72728,72730,72732],{"class":205,"line":16886},[203,72727,65088],{"class":262},[203,72729,51495],{"class":213},[203,72731,65093],{"class":262},[203,72733,1380],{"class":213},[203,72735,72736],{"class":205,"line":16891},[203,72737,2276],{"class":213},[203,72739,72740],{"class":205,"line":16905},[203,72741,2489],{"emptyLinePlaceholder":131},[203,72743,72744,72746],{"class":205,"line":16910},[203,72745,65173],{"class":51358},[203,72747,15662],{"class":213},[203,72749,72750,72752,72754,72756,72758,72760,72762,72764,72766,72768],{"class":205,"line":16916},[203,72751,54942],{"class":262},[203,72753,51495],{"class":213},[203,72755,72381],{"class":262},[203,72757,214],{"class":213},[203,72759,72638],{"class":262},[203,72761,12525],{"class":213},[203,72763,72643],{"class":262},[203,72765,12525],{"class":213},[203,72767,72643],{"class":262},[203,72769,2808],{"class":213},[203,72771,72772],{"class":205,"line":16921},[203,72773,2276],{"class":213},[203,72775,72776],{"class":205,"line":16935},[203,72777,2489],{"emptyLinePlaceholder":131},[203,72779,72780,72782],{"class":205,"line":16940},[203,72781,65173],{"class":51358},[203,72783,31524],{"class":213},[203,72785,72786,72788],{"class":205,"line":16945},[203,72787,65239],{"class":51358},[203,72789,15662],{"class":213},[203,72791,72792,72794,72796,72798,72800],{"class":205,"line":16959},[203,72793,54843],{"class":262},[203,72795,51495],{"class":213},[203,72797,487],{"class":262},[203,72799,51550],{"class":209},[203,72801,1380],{"class":213},[203,72803,72804,72806,72808,72810],{"class":205,"line":16971},[203,72805,57344],{"class":262},[203,72807,51495],{"class":213},[203,72809,23827],{"class":262},[203,72811,1380],{"class":213},[203,72813,72814,72816,72818,72820,72822],{"class":205,"line":16976},[203,72815,54980],{"class":262},[203,72817,51495],{"class":213},[203,72819,763],{"class":262},[203,72821,51550],{"class":209},[203,72823,1380],{"class":213},[203,72825,72826,72828,72830,72832,72834,72836,72838,72840,72843,72845,72848,72850,72852],{"class":205,"line":16989},[203,72827,62035],{"class":262},[203,72829,51495],{"class":213},[203,72831,431],{"class":262},[203,72833,51550],{"class":209},[203,72835,51579],{"class":262},[203,72837,72318],{"class":262},[203,72839,214],{"class":213},[203,72841,72842],{"class":262},"228",[203,72844,12525],{"class":213},[203,72846,72847],{"class":262},"225",[203,72849,12525],{"class":213},[203,72851,72847],{"class":262},[203,72853,2808],{"class":213},[203,72855,72856,72859,72861,72863,72865],{"class":205,"line":16994},[203,72857,72858],{"class":262},"      padding-left",[203,72860,51495],{"class":213},[203,72862,533],{"class":262},[203,72864,51550],{"class":209},[203,72866,1380],{"class":213},[203,72868,72869,72871,72873,72875,72878,72880,72882],{"class":205,"line":16999},[203,72870,61918],{"class":262},[203,72872,51495],{"class":213},[203,72874,28179],{"class":262},[203,72876,72877],{"class":262}," linear",[203,72879,61925],{"class":262},[203,72881,909],{"class":209},[203,72883,1380],{"class":213},[203,72885,72886],{"class":205,"line":17004},[203,72887,2276],{"class":213},[203,72889,72890],{"class":205,"line":17017},[203,72891,2489],{"emptyLinePlaceholder":131},[203,72893,72894,72897,72899,72901],{"class":205,"line":17022},[203,72895,72896],{"class":51358},"    tbody",[203,72898,70202],{"class":51358},[203,72900,60998],{"class":2052},[203,72902,15662],{"class":213},[203,72904,72905,72907,72909,72911,72913,72915,72917,72919,72921,72923],{"class":205,"line":32691},[203,72906,54942],{"class":262},[203,72908,51495],{"class":213},[203,72910,72381],{"class":262},[203,72912,214],{"class":213},[203,72914,72638],{"class":262},[203,72916,12525],{"class":213},[203,72918,72643],{"class":262},[203,72920,12525],{"class":213},[203,72922,72643],{"class":262},[203,72924,2808],{"class":213},[203,72926,72927,72929,72931,72933],{"class":205,"line":32697},[203,72928,62083],{"class":262},[203,72930,51495],{"class":213},[203,72932,62088],{"class":262},[203,72934,1380],{"class":213},[203,72936,72937],{"class":205,"line":32703},[203,72938,2276],{"class":213},[203,72940,72941],{"class":205,"line":32709},[203,72942,2489],{"emptyLinePlaceholder":131},[203,72944,72945,72947,72949,72952,72954],{"class":205,"line":32715},[203,72946,72896],{"class":51358},[203,72948,70202],{"class":51358},[203,72950,72951],{"class":51358}," td",[203,72953,1488],{"class":51358},[203,72955,15662],{"class":213},[203,72957,72958,72960,72962,72964],{"class":205,"line":32726},[203,72959,55067],{"class":262},[203,72961,51495],{"class":213},[203,72963,60927],{"class":262},[203,72965,1380],{"class":213},[203,72967,72968,72970,72972,72974,72976],{"class":205,"line":32732},[203,72969,54829],{"class":262},[203,72971,51495],{"class":213},[203,72973,1121],{"class":262},[203,72975,51550],{"class":209},[203,72977,1380],{"class":213},[203,72979,72980,72982,72984,72986,72988],{"class":205,"line":32752},[203,72981,54843],{"class":262},[203,72983,51495],{"class":213},[203,72985,1039],{"class":262},[203,72987,51550],{"class":209},[203,72989,1380],{"class":213},[203,72991,72992,72994,72996,72998,73000],{"class":205,"line":32758},[203,72993,57417],{"class":262},[203,72995,51495],{"class":213},[203,72997,1039],{"class":262},[203,72999,51550],{"class":209},[203,73001,1380],{"class":213},[203,73003,73004,73006,73008,73010,73012],{"class":205,"line":32769},[203,73005,62135],{"class":262},[203,73007,51495],{"class":213},[203,73009,291],{"class":262},[203,73011,51550],{"class":209},[203,73013,1380],{"class":213},[203,73015,73016,73018,73020,73022],{"class":205,"line":32775},[203,73017,57474],{"class":262},[203,73019,51495],{"class":213},[203,73021,60900],{"class":262},[203,73023,1380],{"class":213},[203,73025,73026,73028,73030,73032],{"class":205,"line":32781},[203,73027,57344],{"class":262},[203,73029,51495],{"class":213},[203,73031,51650],{"class":262},[203,73033,1380],{"class":213},[203,73035,73036,73038,73040,73042],{"class":205,"line":32787},[203,73037,64028],{"class":262},[203,73039,51495],{"class":213},[203,73041,54795],{"class":262},[203,73043,1380],{"class":213},[203,73045,73046,73048,73050,73053],{"class":205,"line":32793},[203,73047,54942],{"class":262},[203,73049,51495],{"class":213},[203,73051,73052],{"class":262},"orange",[203,73054,1380],{"class":213},[203,73056,73057,73059,73061,73064,73066],{"class":205,"line":32799},[203,73058,55192],{"class":262},[203,73060,51495],{"class":213},[203,73062,73063],{"class":262},"12.5",[203,73065,51550],{"class":209},[203,73067,1380],{"class":213},[203,73069,73070],{"class":205,"line":32805},[203,73071,2276],{"class":213},[203,73073,73074,73076,73078],{"class":205,"line":32811},[203,73075,52475],{"class":213},[203,73077,5216],{"class":51358},[203,73079,51365],{"class":213},[203,73081,73082,73084,73086],{"class":205,"line":32831},[203,73083,51843],{"class":213},[203,73085,51392],{"class":51358},[203,73087,51365],{"class":213},[203,73089,73090],{"class":205,"line":32837},[203,73091,2489],{"emptyLinePlaceholder":131},[203,73093,73094,73096,73098],{"class":205,"line":32853},[203,73095,1124],{"class":213},[203,73097,51858],{"class":51358},[203,73099,51365],{"class":213},[203,73101,73102,73104,73106,73109,73111],{"class":205,"line":32859},[203,73103,52202],{"class":213},[203,73105,14],{"class":51358},[203,73107,73108],{"class":213},">学生就业统计表\u003C\u002F",[203,73110,14],{"class":51358},[203,73112,51365],{"class":213},[203,73114,73115,73117,73119,73121,73123,73125,73127,73129,73131],{"class":205,"line":32873},[203,73116,52202],{"class":213},[203,73118,66683],{"class":51358},[203,73120,53544],{"class":2052},[203,73122,259],{"class":213},[203,73124,62722],{"class":318},[203,73126,69128],{"class":2052},[203,73128,259],{"class":213},[203,73130,31834],{"class":318},[203,73132,51365],{"class":213},[203,73134,73135,73137,73139,73141,73143,73145,73147,73149,73151,73153,73155,73158,73160,73162,73164],{"class":205,"line":32879},[203,73136,51399],{"class":213},[203,73138,53879],{"class":51358},[203,73140,53882],{"class":2052},[203,73142,259],{"class":213},[203,73144,62757],{"class":318},[203,73146,15010],{"class":2052},[203,73148,259],{"class":213},[203,73150,69154],{"class":318},[203,73152,61078],{"class":2052},[203,73154,259],{"class":213},[203,73156,73157],{"class":318},"\"姓名\"",[203,73159,53544],{"class":2052},[203,73161,259],{"class":213},[203,73163,69154],{"class":318},[203,73165,51365],{"class":213},[203,73167,73168,73170,73172,73174,73176,73178,73180,73182,73184,73186,73188,73191,73193,73195,73197],{"class":205,"line":32894},[203,73169,51399],{"class":213},[203,73171,53879],{"class":51358},[203,73173,53882],{"class":2052},[203,73175,259],{"class":213},[203,73177,62757],{"class":318},[203,73179,15010],{"class":2052},[203,73181,259],{"class":213},[203,73183,69182],{"class":318},[203,73185,61078],{"class":2052},[203,73187,259],{"class":213},[203,73189,73190],{"class":318},"\"年龄\"",[203,73192,53544],{"class":2052},[203,73194,259],{"class":213},[203,73196,69182],{"class":318},[203,73198,51365],{"class":213},[203,73200,73201,73203,73205,73207,73209,73211,73213,73215,73217,73219,73221,73224,73226,73228,73230],{"class":205,"line":32900},[203,73202,51399],{"class":213},[203,73204,53879],{"class":51358},[203,73206,53882],{"class":2052},[203,73208,259],{"class":213},[203,73210,62757],{"class":318},[203,73212,15010],{"class":2052},[203,73214,259],{"class":213},[203,73216,69284],{"class":318},[203,73218,61078],{"class":2052},[203,73220,259],{"class":213},[203,73222,73223],{"class":318},"\"薪资\"",[203,73225,53544],{"class":2052},[203,73227,259],{"class":213},[203,73229,69284],{"class":318},[203,73231,51365],{"class":213},[203,73233,73234,73236,73238,73240,73242,73244,73246,73248,73250,73252,73254,73256],{"class":205,"line":32909},[203,73235,51399],{"class":213},[203,73237,69202],{"class":51358},[203,73239,15010],{"class":2052},[203,73241,259],{"class":213},[203,73243,69209],{"class":318},[203,73245,15049],{"class":2052},[203,73247,259],{"class":213},[203,73249,7742],{"class":318},[203,73251,53544],{"class":2052},[203,73253,259],{"class":213},[203,73255,69209],{"class":318},[203,73257,51365],{"class":213},[203,73259,73260,73262,73264,73266,73268,73270,73272,73274],{"class":205,"line":32915},[203,73261,55292],{"class":213},[203,73263,69224],{"class":51358},[203,73265,66709],{"class":2052},[203,73267,259],{"class":213},[203,73269,10051],{"class":318},[203,73271,69233],{"class":213},[203,73273,69224],{"class":51358},[203,73275,51365],{"class":213},[203,73277,73278,73280,73282,73284,73286,73288,73290,73292],{"class":205,"line":32924},[203,73279,55292],{"class":213},[203,73281,69224],{"class":51358},[203,73283,66709],{"class":2052},[203,73285,259],{"class":213},[203,73287,10120],{"class":318},[203,73289,69252],{"class":213},[203,73291,69224],{"class":51358},[203,73293,51365],{"class":213},[203,73295,73296,73298,73300],{"class":205,"line":32930},[203,73297,51834],{"class":213},[203,73299,69202],{"class":51358},[203,73301,51365],{"class":213},[203,73303,73304,73306,73308,73310,73312,73314,73316,73318,73320,73322,73324,73326],{"class":205,"line":32936},[203,73305,51399],{"class":213},[203,73307,69202],{"class":51358},[203,73309,15010],{"class":2052},[203,73311,259],{"class":213},[203,73313,69306],{"class":318},[203,73315,15049],{"class":2052},[203,73317,259],{"class":213},[203,73319,7742],{"class":318},[203,73321,53544],{"class":2052},[203,73323,259],{"class":213},[203,73325,69306],{"class":318},[203,73327,51365],{"class":213},[203,73329,73330,73332,73334,73336,73338,73340,73342,73344],{"class":205,"line":32945},[203,73331,55292],{"class":213},[203,73333,69224],{"class":51358},[203,73335,66709],{"class":2052},[203,73337,259],{"class":213},[203,73339,69327],{"class":318},[203,73341,69330],{"class":213},[203,73343,69224],{"class":51358},[203,73345,51365],{"class":213},[203,73347,73348,73350,73352,73354,73356,73358,73360,73362],{"class":205,"line":32951},[203,73349,55292],{"class":213},[203,73351,69224],{"class":51358},[203,73353,66709],{"class":2052},[203,73355,259],{"class":213},[203,73357,69347],{"class":318},[203,73359,69350],{"class":213},[203,73361,69224],{"class":51358},[203,73363,51365],{"class":213},[203,73365,73366,73368,73370,73372,73374,73376,73378,73380],{"class":205,"line":32962},[203,73367,55292],{"class":213},[203,73369,69224],{"class":51358},[203,73371,66709],{"class":2052},[203,73373,259],{"class":213},[203,73375,69367],{"class":318},[203,73377,69370],{"class":213},[203,73379,69224],{"class":51358},[203,73381,51365],{"class":213},[203,73383,73384,73386,73388,73390,73392,73394,73396,73398],{"class":205,"line":32968},[203,73385,55292],{"class":213},[203,73387,69224],{"class":51358},[203,73389,66709],{"class":2052},[203,73391,259],{"class":213},[203,73393,69387],{"class":318},[203,73395,69390],{"class":213},[203,73397,69224],{"class":51358},[203,73399,51365],{"class":213},[203,73401,73402,73404,73406,73408,73410,73412,73414,73416],{"class":205,"line":32987},[203,73403,55292],{"class":213},[203,73405,69224],{"class":51358},[203,73407,66709],{"class":2052},[203,73409,259],{"class":213},[203,73411,69407],{"class":318},[203,73413,69410],{"class":213},[203,73415,69224],{"class":51358},[203,73417,51365],{"class":213},[203,73419,73420,73422,73424],{"class":205,"line":32993},[203,73421,51834],{"class":213},[203,73423,69202],{"class":51358},[203,73425,51365],{"class":213},[203,73427,73428,73430,73432],{"class":205,"line":33004},[203,73429,51399],{"class":213},[203,73431,53945],{"class":51358},[203,73433,51365],{"class":213},[203,73435,73436,73438,73440,73443,73445,73448,73450],{"class":205,"line":33010},[203,73437,55292],{"class":213},[203,73439,203],{"class":51358},[203,73441,73442],{"class":213},">+\u003C\u002F",[203,73444,203],{"class":51358},[203,73446,73447],{"class":213},">添加\u003C\u002F",[203,73449,53945],{"class":51358},[203,73451,51365],{"class":213},[203,73453,73454,73456,73458],{"class":205,"line":33030},[203,73455,52475],{"class":213},[203,73457,66683],{"class":51358},[203,73459,51365],{"class":213},[203,73461,73462,73464,73466,73468,73470,73472,73475,73477,73480,73482,73485,73487],{"class":205,"line":33046},[203,73463,52202],{"class":213},[203,73465,51669],{"class":51358},[203,73467,53544],{"class":2052},[203,73469,259],{"class":213},[203,73471,62638],{"class":318},[203,73473,73474],{"class":213},">共有数据 \u003C",[203,73476,203],{"class":51358},[203,73478,73479],{"class":213},">0\u003C\u002F",[203,73481,203],{"class":51358},[203,73483,73484],{"class":213},"> 条\u003C\u002F",[203,73486,51669],{"class":51358},[203,73488,51365],{"class":213},[203,73490,73491,73493,73495],{"class":205,"line":33052},[203,73492,52202],{"class":213},[203,73494,351],{"class":51358},[203,73496,51365],{"class":213},[203,73498,73499,73501,73503],{"class":205,"line":33066},[203,73500,51399],{"class":213},[203,73502,354],{"class":51358},[203,73504,51365],{"class":213},[203,73506,73507,73509,73511],{"class":205,"line":33072},[203,73508,55292],{"class":213},[203,73510,357],{"class":51358},[203,73512,51365],{"class":213},[203,73514,73515,73517,73519,73522,73524],{"class":205,"line":33078},[203,73516,55360],{"class":213},[203,73518,360],{"class":51358},[203,73520,73521],{"class":213},">ID\u003C\u002F",[203,73523,360],{"class":51358},[203,73525,51365],{"class":213},[203,73527,73528,73530,73532,73534,73536],{"class":205,"line":33089},[203,73529,55360],{"class":213},[203,73531,360],{"class":51358},[203,73533,69513],{"class":213},[203,73535,360],{"class":51358},[203,73537,51365],{"class":213},[203,73539,73540,73542,73544,73546,73548],{"class":205,"line":33095},[203,73541,55360],{"class":213},[203,73543,360],{"class":51358},[203,73545,69526],{"class":213},[203,73547,360],{"class":51358},[203,73549,51365],{"class":213},[203,73551,73552,73554,73556,73558,73560],{"class":205,"line":33101},[203,73553,55360],{"class":213},[203,73555,360],{"class":51358},[203,73557,69539],{"class":213},[203,73559,360],{"class":51358},[203,73561,51365],{"class":213},[203,73563,73564,73566,73568,73570,73572],{"class":205,"line":33111},[203,73565,55360],{"class":213},[203,73567,360],{"class":51358},[203,73569,69552],{"class":213},[203,73571,360],{"class":51358},[203,73573,51365],{"class":213},[203,73575,73576,73578,73580,73582,73584],{"class":205,"line":33117},[203,73577,55360],{"class":213},[203,73579,360],{"class":51358},[203,73581,69565],{"class":213},[203,73583,360],{"class":51358},[203,73585,51365],{"class":213},[203,73587,73588,73590,73592,73595,73597],{"class":205,"line":33128},[203,73589,55360],{"class":213},[203,73591,360],{"class":51358},[203,73593,73594],{"class":213},">录入时间\u003C\u002F",[203,73596,360],{"class":51358},[203,73598,51365],{"class":213},[203,73600,73601,73603,73605,73607,73609],{"class":205,"line":33134},[203,73602,55360],{"class":213},[203,73604,360],{"class":51358},[203,73606,69578],{"class":213},[203,73608,360],{"class":51358},[203,73610,51365],{"class":213},[203,73612,73613,73615,73617],{"class":205,"line":33144},[203,73614,55465],{"class":213},[203,73616,357],{"class":51358},[203,73618,51365],{"class":213},[203,73620,73621,73623,73625],{"class":205,"line":33149},[203,73622,51834],{"class":213},[203,73624,354],{"class":51358},[203,73626,51365],{"class":213},[203,73628,73629,73631,73633],{"class":205,"line":33155},[203,73630,51399],{"class":213},[203,73632,398],{"class":51358},[203,73634,51365],{"class":213},[203,73636,73637],{"class":205,"line":33204},[203,73638,73639],{"class":272},"      \u003C!-- \u003Ctr>\n",[203,73641,73642],{"class":205,"line":33251},[203,73643,73644],{"class":272},"        \u003Ctd>1\u003C\u002Ftd>\n",[203,73646,73647],{"class":205,"line":33256},[203,73648,73644],{"class":272},[203,73650,73651],{"class":205,"line":33262},[203,73652,73644],{"class":272},[203,73654,73655],{"class":205,"line":33281},[203,73656,73644],{"class":272},[203,73658,73659],{"class":205,"line":33287},[203,73660,73644],{"class":272},[203,73662,73663],{"class":205,"line":33307},[203,73664,73644],{"class":272},[203,73666,73667],{"class":205,"line":33313},[203,73668,73644],{"class":272},[203,73670,73671],{"class":205,"line":33319},[203,73672,73673],{"class":272},"        \u003Ctd>\n",[203,73675,73676],{"class":205,"line":33329},[203,73677,73678],{"class":272},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[203,73680,73681],{"class":205,"line":33334},[203,73682,73683],{"class":272},"        \u003C\u002Ftd>\n",[203,73685,73686],{"class":205,"line":33340},[203,73687,73688],{"class":272},"      \u003C\u002Ftr> -->\n",[203,73690,73691,73693,73695],{"class":205,"line":33356},[203,73692,51834],{"class":213},[203,73694,398],{"class":51358},[203,73696,51365],{"class":213},[203,73698,73699,73701,73703],{"class":205,"line":33401},[203,73700,52475],{"class":213},[203,73702,351],{"class":51358},[203,73704,51365],{"class":213},[203,73706,73707,73709,73711],{"class":205,"line":33407},[203,73708,52202],{"class":213},[203,73710,51871],{"class":51358},[203,73712,51365],{"class":213},[203,73714,73715],{"class":205,"line":33413},[203,73716,73717],{"class":272},"    \u002F\u002F const initData = [{\n",[203,73719,73720],{"class":205,"line":33419},[203,73721,73722],{"class":272},"    \u002F\u002F   unameId: 1,\n",[203,73724,73725],{"class":205,"line":33430},[203,73726,73727],{"class":272},"    \u002F\u002F   uname: '华晨宇',\n",[203,73729,73730],{"class":205,"line":33436},[203,73731,73732],{"class":272},"    \u002F\u002F   age: 22,\n",[203,73734,73735],{"class":205,"line":33442},[203,73736,73737],{"class":272},"    \u002F\u002F   salary: 12000,\n",[203,73739,73740],{"class":205,"line":33448},[203,73741,73742],{"class":272},"    \u002F\u002F   gender: '男',\n",[203,73744,73745],{"class":205,"line":33466},[203,73746,73747],{"class":272},"    \u002F\u002F   city: '北京',\n",[203,73749,73750],{"class":205,"line":33480},[203,73751,73752],{"class":272},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[203,73754,73755],{"class":205,"line":33489},[203,73756,73757],{"class":272},"    \u002F\u002F }]\n",[203,73759,73760],{"class":205,"line":33498},[203,73761,73762],{"class":272},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[203,73764,73765],{"class":205,"line":33507},[203,73766,73767],{"class":272},"    \u002F\u002F 1.渲染业务\n",[203,73769,73770],{"class":205,"line":33516},[203,73771,73772],{"class":272},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[203,73774,73775],{"class":205,"line":33522},[203,73776,73777],{"class":272},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[203,73779,73780],{"class":205,"line":33528},[203,73781,73782],{"class":272},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[203,73784,73785],{"class":205,"line":33536},[203,73786,2489],{"emptyLinePlaceholder":131},[203,73788,73789],{"class":205,"line":33541},[203,73790,73791],{"class":272},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[203,73793,73794],{"class":205,"line":33547},[203,73795,73796],{"class":272},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[203,73798,73799,73801,73803,73805],{"class":205,"line":33558},[203,73800,11311],{"class":209},[203,73802,57753],{"class":262},[203,73804,13654],{"class":209},[203,73806,51896],{"class":213},[203,73808,73809,73812,73814],{"class":205,"line":33564},[203,73810,73811],{"class":213},"    console.",[203,73813,58305],{"class":2052},[203,73815,52470],{"class":213},[203,73817,73818],{"class":205,"line":33584},[203,73819,2489],{"emptyLinePlaceholder":131},[203,73821,73822],{"class":205,"line":33590},[203,73823,73824],{"class":272},"    \u002F\u002F 时间函数\n",[203,73826,73827,73829,73832],{"class":205,"line":33596},[203,73828,70142],{"class":209},[203,73830,73831],{"class":2052}," getTime",[203,73833,10943],{"class":213},[203,73835,73836,73838,73841,73843,73845,73848],{"class":205,"line":33602},[203,73837,58286],{"class":209},[203,73839,73840],{"class":262}," date",[203,73842,13654],{"class":209},[203,73844,11668],{"class":209},[203,73846,73847],{"class":2052}," Date",[203,73849,2065],{"class":213},[203,73851,73852,73854,73856,73858,73861,73864,73866,73868,73870,73873,73876,73878,73880,73882,73884,73886,73888,73890],{"class":205,"line":33619},[203,73853,58286],{"class":209},[203,73855,16181],{"class":262},[203,73857,13654],{"class":209},[203,73859,73860],{"class":213}," date.",[203,73862,73863],{"class":2052},"getHours",[203,73865,13140],{"class":213},[203,73867,1124],{"class":209},[203,73869,2127],{"class":262},[203,73871,73872],{"class":209}," ?",[203,73874,73875],{"class":318}," '0'",[203,73877,45624],{"class":209},[203,73879,73860],{"class":213},[203,73881,73863],{"class":2052},[203,73883,13140],{"class":213},[203,73885,1073],{"class":209},[203,73887,73860],{"class":213},[203,73889,73863],{"class":2052},[203,73891,2065],{"class":213},[203,73893,73894,73896,73899,73901,73903,73906,73908,73910,73912,73914,73916,73918,73920,73922,73924,73926,73928,73930],{"class":205,"line":33625},[203,73895,58286],{"class":209},[203,73897,73898],{"class":262}," m",[203,73900,13654],{"class":209},[203,73902,73860],{"class":213},[203,73904,73905],{"class":2052},"getMinutes",[203,73907,13140],{"class":213},[203,73909,1124],{"class":209},[203,73911,2127],{"class":262},[203,73913,73872],{"class":209},[203,73915,73875],{"class":318},[203,73917,45624],{"class":209},[203,73919,73860],{"class":213},[203,73921,73905],{"class":2052},[203,73923,13140],{"class":213},[203,73925,1073],{"class":209},[203,73927,73860],{"class":213},[203,73929,73905],{"class":2052},[203,73931,2065],{"class":213},[203,73933,73934,73936,73938,73940,73942,73945,73947,73949,73951,73953,73955,73957,73959,73961,73963,73965,73967,73969],{"class":205,"line":33631},[203,73935,58286],{"class":209},[203,73937,8518],{"class":262},[203,73939,13654],{"class":209},[203,73941,73860],{"class":213},[203,73943,73944],{"class":2052},"getSeconds",[203,73946,13140],{"class":213},[203,73948,1124],{"class":209},[203,73950,2127],{"class":262},[203,73952,73872],{"class":209},[203,73954,73875],{"class":318},[203,73956,45624],{"class":209},[203,73958,73860],{"class":213},[203,73960,73944],{"class":2052},[203,73962,13140],{"class":213},[203,73964,1073],{"class":209},[203,73966,73860],{"class":213},[203,73968,73944],{"class":2052},[203,73970,2065],{"class":213},[203,73972,73973,73975,73978,73980,73982,73985,73987,73990,73992,73995,73997,73999,74002,74004,74006,74008,74010,74012,74014,74017,74019,74022,74024,74027,74029,74031,74033],{"class":205,"line":33637},[203,73974,58286],{"class":209},[203,73976,73977],{"class":262}," str",[203,73979,13654],{"class":209},[203,73981,62961],{"class":318},[203,73983,73984],{"class":213},"date",[203,73986,772],{"class":318},[203,73988,73989],{"class":2052},"getFullYear",[203,73991,2516],{"class":318},[203,73993,73994],{"class":318},"}\u002F${",[203,73996,73984],{"class":213},[203,73998,772],{"class":318},[203,74000,74001],{"class":2052},"getMonth",[203,74003,13140],{"class":318},[203,74005,695],{"class":209},[203,74007,25176],{"class":262},[203,74009,73994],{"class":318},[203,74011,73984],{"class":213},[203,74013,772],{"class":318},[203,74015,74016],{"class":2052},"getDate",[203,74018,2516],{"class":318},[203,74020,74021],{"class":318},"} ${",[203,74023,629],{"class":213},[203,74025,74026],{"class":318},"}:${",[203,74028,758],{"class":213},[203,74030,74026],{"class":318},[203,74032,909],{"class":213},[203,74034,74035],{"class":318},"}`\n",[203,74037,74038,74041],{"class":205,"line":33643},[203,74039,74040],{"class":209},"      return",[203,74042,74043],{"class":213}," str\n",[203,74045,74046],{"class":205,"line":33649},[203,74047,2276],{"class":213},[203,74049,74050],{"class":205,"line":33676},[203,74051,74052],{"class":272},"    \u002F\u002F 渲染函数\n",[203,74054,74055,74057,74059,74061,74063,74065,74067,74069],{"class":205,"line":33700},[203,74056,11311],{"class":209},[203,74058,69805],{"class":262},[203,74060,13654],{"class":209},[203,74062,54454],{"class":213},[203,74064,54457],{"class":2052},[203,74066,214],{"class":213},[203,74068,69816],{"class":318},[203,74070,220],{"class":213},[203,74072,74073,74075,74077],{"class":205,"line":33706},[203,74074,70142],{"class":209},[203,74076,70145],{"class":2052},[203,74078,10943],{"class":213},[203,74080,74081],{"class":205,"line":33712},[203,74082,74083],{"class":272},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[203,74085,74086],{"class":205,"line":33718},[203,74087,74088],{"class":272},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[203,74090,74091,74093,74096,74098,74100,74103,74105,74107,74109,74112,74114,74117],{"class":205,"line":33729},[203,74092,58286],{"class":209},[203,74094,74095],{"class":262}," trArr",[203,74097,13654],{"class":209},[203,74099,52023],{"class":213},[203,74101,74102],{"class":2052},"map",[203,74104,214],{"class":213},[203,74106,54507],{"class":209},[203,74108,1747],{"class":213},[203,74110,74111],{"class":5306},"ele",[203,74113,12525],{"class":213},[203,74115,74116],{"class":5306},"index",[203,74118,12532],{"class":213},[203,74120,74121,74123],{"class":205,"line":33740},[203,74122,14842],{"class":209},[203,74124,70226],{"class":318},[203,74126,74127],{"class":205,"line":33746},[203,74128,74129],{"class":318},"      \u003Ctr>\n",[203,74131,74132,74134,74136,74138,74141],{"class":205,"line":33763},[203,74133,70231],{"class":318},[203,74135,74111],{"class":213},[203,74137,772],{"class":318},[203,74139,74140],{"class":213},"unameId",[203,74142,70246],{"class":318},[203,74144,74145,74147,74149,74151,74153],{"class":205,"line":33786},[203,74146,70231],{"class":318},[203,74148,74111],{"class":213},[203,74150,772],{"class":318},[203,74152,70262],{"class":213},[203,74154,70246],{"class":318},[203,74156,74157,74159,74161,74163,74165],{"class":205,"line":33809},[203,74158,70231],{"class":318},[203,74160,74111],{"class":213},[203,74162,772],{"class":318},[203,74164,70279],{"class":213},[203,74166,70246],{"class":318},[203,74168,74169,74171,74173,74175,74177],{"class":205,"line":33815},[203,74170,70231],{"class":318},[203,74172,74111],{"class":213},[203,74174,772],{"class":318},[203,74176,70296],{"class":213},[203,74178,70246],{"class":318},[203,74180,74181,74183,74185,74187,74189],{"class":205,"line":33820},[203,74182,70231],{"class":318},[203,74184,74111],{"class":213},[203,74186,772],{"class":318},[203,74188,70313],{"class":213},[203,74190,70246],{"class":318},[203,74192,74193,74195,74197,74199,74201],{"class":205,"line":33829},[203,74194,70231],{"class":318},[203,74196,74111],{"class":213},[203,74198,772],{"class":318},[203,74200,70330],{"class":213},[203,74202,70246],{"class":318},[203,74204,74205,74207,74209,74211,74213],{"class":205,"line":33839},[203,74206,70231],{"class":318},[203,74208,74111],{"class":213},[203,74210,772],{"class":318},[203,74212,2476],{"class":213},[203,74214,70246],{"class":318},[203,74216,74217],{"class":205,"line":33845},[203,74218,73673],{"class":318},[203,74220,74221,74224,74226],{"class":205,"line":33850},[203,74222,74223],{"class":318},"          \u003Ca href=\"#\" data-id=\"${",[203,74225,74116],{"class":213},[203,74227,74228],{"class":318},"}\">删除\u003C\u002Fa>\n",[203,74230,74231],{"class":205,"line":33856},[203,74232,73683],{"class":318},[203,74234,74235],{"class":205,"line":33869},[203,74236,74237],{"class":318},"      \u003C\u002Ftr>\n",[203,74239,74240],{"class":205,"line":33875},[203,74241,74242],{"class":318},"  `\n",[203,74244,74245],{"class":205,"line":33886},[203,74246,64873],{"class":213},[203,74248,74249,74251,74253],{"class":205,"line":33897},[203,74250,58302],{"class":213},[203,74252,58305],{"class":2052},[203,74254,74255],{"class":213},"(trArr)\n",[203,74257,74258],{"class":205,"line":33916},[203,74259,2489],{"emptyLinePlaceholder":131},[203,74261,74262],{"class":205,"line":49576},[203,74263,74264],{"class":272},"      \u002F\u002F (2) 把数组转换为字符串join\n",[203,74266,74267],{"class":205,"line":49581},[203,74268,74269],{"class":272},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[203,74271,74272,74274,74276,74279,74282,74284,74287],{"class":205,"line":49590},[203,74273,70157],{"class":213},[203,74275,259],{"class":209},[203,74277,74278],{"class":213}," trArr.",[203,74280,74281],{"class":2052},"join",[203,74283,214],{"class":213},[203,74285,74286],{"class":318},"''",[203,74288,220],{"class":213},[203,74290,74291],{"class":205,"line":49599},[203,74292,74293],{"class":272},"      \u002F\u002F 显示共有几条\n",[203,74295,74296,74298,74300,74302,74305,74308,74310,74312],{"class":205,"line":49604},[203,74297,55829],{"class":213},[203,74299,54457],{"class":2052},[203,74301,214],{"class":213},[203,74303,74304],{"class":318},"'.total span'",[203,74306,74307],{"class":213},").innerHTML ",[203,74309,259],{"class":209},[203,74311,52023],{"class":213},[203,74313,55889],{"class":262},[203,74315,74316],{"class":205,"line":49609},[203,74317,2276],{"class":213},[203,74319,74320],{"class":205,"line":49614},[203,74321,74322],{"class":272},"    \u002F\u002F render()\n",[203,74324,74325],{"class":205,"line":49627},[203,74326,2489],{"emptyLinePlaceholder":131},[203,74328,74329],{"class":205,"line":49632},[203,74330,74331],{"class":272},"    \u002F\u002F 获取DOM对象\n",[203,74333,74334,74336,74338,74340,74342,74344,74346,74348],{"class":205,"line":49641},[203,74335,11311],{"class":209},[203,74337,69879],{"class":262},[203,74339,13654],{"class":209},[203,74341,54454],{"class":213},[203,74343,54457],{"class":2052},[203,74345,214],{"class":213},[203,74347,69890],{"class":318},[203,74349,220],{"class":213},[203,74351,74352,74354,74356,74358,74360,74362,74364,74366],{"class":205,"line":49650},[203,74353,11311],{"class":209},[203,74355,69706],{"class":262},[203,74357,13654],{"class":209},[203,74359,54454],{"class":213},[203,74361,54457],{"class":2052},[203,74363,214],{"class":213},[203,74365,69717],{"class":318},[203,74367,220],{"class":213},[203,74369,74370,74372,74374,74376,74378,74380,74382,74384],{"class":205,"line":49667},[203,74371,11311],{"class":209},[203,74373,15779],{"class":262},[203,74375,13654],{"class":209},[203,74377,54454],{"class":213},[203,74379,54457],{"class":2052},[203,74381,214],{"class":213},[203,74383,69736],{"class":318},[203,74385,220],{"class":213},[203,74387,74389,74391,74393,74395,74397,74399,74401,74403],{"class":205,"line":74388},231,[203,74390,11311],{"class":209},[203,74392,69765],{"class":262},[203,74394,13654],{"class":209},[203,74396,54454],{"class":213},[203,74398,54457],{"class":2052},[203,74400,214],{"class":213},[203,74402,69776],{"class":318},[203,74404,220],{"class":213},[203,74406,74408,74410,74412,74414,74416,74418,74420,74422],{"class":205,"line":74407},232,[203,74409,11311],{"class":209},[203,74411,69745],{"class":262},[203,74413,13654],{"class":209},[203,74415,54454],{"class":213},[203,74417,54457],{"class":2052},[203,74419,214],{"class":213},[203,74421,69756],{"class":318},[203,74423,220],{"class":213},[203,74425,74427,74429,74431,74433,74435,74437,74439,74441],{"class":205,"line":74426},233,[203,74428,11311],{"class":209},[203,74430,69785],{"class":262},[203,74432,13654],{"class":209},[203,74434,54454],{"class":213},[203,74436,54457],{"class":2052},[203,74438,214],{"class":213},[203,74440,69796],{"class":318},[203,74442,220],{"class":213},[203,74444,74446],{"class":205,"line":74445},234,[203,74447,2489],{"emptyLinePlaceholder":131},[203,74449,74451],{"class":205,"line":74450},235,[203,74452,74453],{"class":272},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[203,74455,74457,74459,74461,74463,74465,74467,74469,74471,74473],{"class":205,"line":74456},236,[203,74458,69897],{"class":213},[203,74460,57871],{"class":2052},[203,74462,214],{"class":213},[203,74464,69904],{"class":318},[203,74466,12525],{"class":213},[203,74468,54507],{"class":209},[203,74470,1747],{"class":213},[203,74472,288],{"class":5306},[203,74474,12532],{"class":213},[203,74476,74478],{"class":205,"line":74477},237,[203,74479,74480],{"class":272},"      \u002F\u002F 禁止浏览器跳转\n",[203,74482,74484,74486,74488],{"class":205,"line":74483},238,[203,74485,69924],{"class":213},[203,74487,69927],{"class":2052},[203,74489,2065],{"class":213},[203,74491,74493],{"class":205,"line":74492},239,[203,74494,74495],{"class":272},"      \u002F\u002F 非空判断\n",[203,74497,74499],{"class":205,"line":74498},240,[203,74500,74501],{"class":272},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[203,74503,74505],{"class":205,"line":74504},241,[203,74506,74507],{"class":272},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[203,74509,74511,74513,74515,74517,74520,74522,74525,74528,74530,74532],{"class":205,"line":74510},242,[203,74512,54538],{"class":209},[203,74514,1747],{"class":213},[203,74516,440],{"class":209},[203,74518,74519],{"class":213},"uname.value ",[203,74521,71415],{"class":209},[203,74523,74524],{"class":209}," !",[203,74526,74527],{"class":213},"age.value ",[203,74529,71415],{"class":209},[203,74531,74524],{"class":209},[203,74533,74534],{"class":213},"salary.value) {\n",[203,74536,74538,74540,74542,74544,74546],{"class":205,"line":74537},243,[203,74539,14842],{"class":209},[203,74541,69998],{"class":2052},[203,74543,214],{"class":213},[203,74545,70003],{"class":318},[203,74547,220],{"class":213},[203,74549,74551],{"class":205,"line":74550},244,[203,74552,52456],{"class":213},[203,74554,74556,74558,74560],{"class":205,"line":74555},245,[203,74557,58065],{"class":213},[203,74559,51942],{"class":2052},[203,74561,74562],{"class":213},"({\n",[203,74564,74566],{"class":205,"line":74565},246,[203,74567,74568],{"class":272},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[203,74570,74572],{"class":205,"line":74571},247,[203,74573,74574],{"class":272},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[203,74576,74578],{"class":205,"line":74577},248,[203,74579,74580],{"class":272},"        \u002F\u002F 对象的序号应为数组长度+1\n",[203,74582,74584],{"class":205,"line":74583},249,[203,74585,74586],{"class":272},"        \u002F\u002F unameId: arr.length + 1,\n",[203,74588,74590],{"class":205,"line":74589},250,[203,74591,2489],{"emptyLinePlaceholder":131},[203,74593,74595],{"class":205,"line":74594},251,[203,74596,74597],{"class":272},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[203,74599,74601],{"class":205,"line":74600},252,[203,74602,74603],{"class":272},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[203,74605,74607],{"class":205,"line":74606},253,[203,74608,74609],{"class":272},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[203,74611,74613],{"class":205,"line":74612},254,[203,74614,74615],{"class":272},"        \u002F\u002F 0当假看\n",[203,74617,74619,74622,74624,74626,74629,74631,74633,74635,74638,74640,74642,74645,74647],{"class":205,"line":74618},255,[203,74620,74621],{"class":213},"        unameId: arr.",[203,74623,52026],{"class":262},[203,74625,73872],{"class":209},[203,74627,74628],{"class":213}," arr[arr.",[203,74630,52026],{"class":262},[203,74632,52329],{"class":209},[203,74634,25176],{"class":262},[203,74636,74637],{"class":213},"].unameId ",[203,74639,695],{"class":209},[203,74641,25176],{"class":262},[203,74643,74644],{"class":209}," :",[203,74646,25176],{"class":262},[203,74648,31524],{"class":213},[203,74650,74652],{"class":205,"line":74651},256,[203,74653,70051],{"class":213},[203,74655,74657],{"class":205,"line":74656},257,[203,74658,70056],{"class":213},[203,74660,74662],{"class":205,"line":74661},258,[203,74663,70066],{"class":213},[203,74665,74667],{"class":205,"line":74666},259,[203,74668,70061],{"class":213},[203,74670,74672],{"class":205,"line":74671},260,[203,74673,74674],{"class":213},"        city: city.value,\n",[203,74676,74678],{"class":205,"line":74677},261,[203,74679,74680],{"class":272},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[203,74682,74684],{"class":205,"line":74683},262,[203,74685,74686],{"class":272},"        \u002F\u002F time: new Date().toDateString()\n",[203,74688,74690,74693,74696],{"class":205,"line":74689},263,[203,74691,74692],{"class":213},"        time: ",[203,74694,74695],{"class":2052},"getTime",[203,74697,2065],{"class":213},[203,74699,74701],{"class":205,"line":74700},264,[203,74702,64873],{"class":213},[203,74704,74706],{"class":205,"line":74705},265,[203,74707,74708],{"class":272},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[203,74710,74712,74714],{"class":205,"line":74711},266,[203,74713,70126],{"class":2052},[203,74715,2065],{"class":213},[203,74717,74719,74721,74723,74725,74727],{"class":205,"line":74718},267,[203,74720,70109],{"class":262},[203,74722,772],{"class":213},[203,74724,70114],{"class":2052},[203,74726,13140],{"class":213},[203,74728,74729],{"class":272},"\u002F\u002F重置表单\n",[203,74731,74733],{"class":205,"line":74732},268,[203,74734,74735],{"class":272},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[203,74737,74739,74742,74744,74746,74749,74751,74753,74755,74757],{"class":205,"line":74738},269,[203,74740,74741],{"class":213},"      localStorage.",[203,74743,71712],{"class":2052},[203,74745,214],{"class":213},[203,74747,74748],{"class":318},"'data'",[203,74750,12525],{"class":213},[203,74752,71722],{"class":262},[203,74754,772],{"class":213},[203,74756,71727],{"class":2052},[203,74758,74759],{"class":213},"(arr))\n",[203,74761,74763],{"class":205,"line":74762},270,[203,74764,33519],{"class":213},[203,74766,74768],{"class":205,"line":74767},271,[203,74769,2489],{"emptyLinePlaceholder":131},[203,74771,74773],{"class":205,"line":74772},272,[203,74774,74775],{"class":272},"    \u002F\u002F 3.删除业务\n",[203,74777,74779],{"class":205,"line":74778},273,[203,74780,74781],{"class":272},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[203,74783,74785,74787,74789,74791,74793,74795,74797,74799,74801],{"class":205,"line":74784},274,[203,74786,70399],{"class":213},[203,74788,57871],{"class":2052},[203,74790,214],{"class":213},[203,74792,57876],{"class":318},[203,74794,12525],{"class":213},[203,74796,54507],{"class":209},[203,74798,1747],{"class":213},[203,74800,288],{"class":5306},[203,74802,12532],{"class":213},[203,74804,74806],{"class":205,"line":74805},275,[203,74807,74808],{"class":272},"      \u002F\u002F 判断是否点击的是删除按钮\n",[203,74810,74812,74814,74816,74818,74820],{"class":205,"line":74811},276,[203,74813,54538],{"class":209},[203,74815,67092],{"class":213},[203,74817,54544],{"class":209},[203,74819,68314],{"class":318},[203,74821,12532],{"class":213},[203,74823,74825],{"class":205,"line":74824},277,[203,74826,74827],{"class":272},"        \u002F\u002F alert(1)\n",[203,74829,74831],{"class":205,"line":74830},278,[203,74832,74833],{"class":272},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[203,74835,74837],{"class":205,"line":74836},279,[203,74838,74839],{"class":272},"        \u002F\u002F console.log(e.target)\n",[203,74841,74843],{"class":205,"line":74842},280,[203,74844,74845],{"class":272},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[203,74847,74849],{"class":205,"line":74848},281,[203,74850,2489],{"emptyLinePlaceholder":131},[203,74852,74854],{"class":205,"line":74853},282,[203,74855,74856],{"class":272},"        \u002F\u002F 确认框，确然是否真的要删除\n",[203,74858,74860],{"class":205,"line":74859},283,[203,74861,74862],{"class":272},"        \u002F\u002F confirm()为确认框\n",[203,74864,74866],{"class":205,"line":74865},284,[203,74867,74868],{"class":272},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[203,74870,74872,74874,74876,74879,74881,74884],{"class":205,"line":74871},285,[203,74873,2586],{"class":209},[203,74875,1747],{"class":213},[203,74877,74878],{"class":2052},"confirm",[203,74880,214],{"class":213},[203,74882,74883],{"class":318},"'您确定要删除这条数据吗？'",[203,74885,74886],{"class":213},")) {\n",[203,74888,74890,74893,74895,74897,74899],{"class":205,"line":74889},286,[203,74891,74892],{"class":213},"          arr.",[203,74894,58068],{"class":2052},[203,74896,70452],{"class":213},[203,74898,431],{"class":262},[203,74900,220],{"class":213},[203,74902,74904],{"class":205,"line":74903},287,[203,74905,74906],{"class":272},"          \u002F\u002F 3.4 重新渲染页面\n",[203,74908,74910,74913],{"class":205,"line":74909},288,[203,74911,74912],{"class":2052},"          render",[203,74914,2065],{"class":213},[203,74916,74918],{"class":205,"line":74917},289,[203,74919,74920],{"class":272},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[203,74922,74924,74927,74929,74931,74933,74935,74937,74939,74941],{"class":205,"line":74923},290,[203,74925,74926],{"class":213},"          localStorage.",[203,74928,71712],{"class":2052},[203,74930,214],{"class":213},[203,74932,74748],{"class":318},[203,74934,12525],{"class":213},[203,74936,71722],{"class":262},[203,74938,772],{"class":213},[203,74940,71727],{"class":2052},[203,74942,74759],{"class":213},[203,74944,74946],{"class":205,"line":74945},291,[203,74947,2618],{"class":213},[203,74949,74951],{"class":205,"line":74950},292,[203,74952,52456],{"class":213},[203,74954,74956],{"class":205,"line":74955},293,[203,74957,2489],{"emptyLinePlaceholder":131},[203,74959,74961],{"class":205,"line":74960},294,[203,74962,33519],{"class":213},[203,74964,74966],{"class":205,"line":74965},295,[203,74967,2489],{"emptyLinePlaceholder":131},[203,74969,74971,74973,74975],{"class":205,"line":74970},296,[203,74972,52475],{"class":213},[203,74974,51871],{"class":51358},[203,74976,51365],{"class":213},[203,74978,74980,74982,74984],{"class":205,"line":74979},297,[203,74981,51843],{"class":213},[203,74983,51858],{"class":51358},[203,74985,51365],{"class":213},[203,74987,74989],{"class":205,"line":74988},298,[203,74990,2489],{"emptyLinePlaceholder":131},[203,74992,74994,74996,74998],{"class":205,"line":74993},299,[203,74995,51843],{"class":213},[203,74997,50693],{"class":51358},[203,74999,51365],{"class":213},[14,75001,75003],{"id":75002},"_36-正则表达式","3.6 正则表达式",[19,75005,75006],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75008,75009],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75011,75012],{},"正则表达式的作用：",[1221,75014,75015,75022,75028],{},[160,75016,75017,75018,75021],{},"表单验证（ ",[363,75019,75020],{},"匹配"," ）",[160,75023,75024,75025,75021],{},"过滤敏感词（ ",[363,75026,75027],{},"替换",[160,75029,75030,75031,75021],{},"字符串中提取我们想要的部分（ ",[363,75032,75033],{},"提取",[174,75035,75037],{"id":75036},"_361-语法","3.6.1 语法",[19,75039,75040],{},"正则表达式使用步骤：",[157,75042,75043,75046],{},[160,75044,75045],{},"定义规则",[160,75047,75048],{},"查找是否匹配",[19,75050,75051],{},"正则表达式里边不需要写引号",[19,75053,75054],{},[25,75055],{"alt":27,"src":75056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75058,75059],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75061,75062],{},"reg.test(str)",[19,75064,75065],{},[25,75066],{"alt":27,"src":75067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75069,75070],{},[25,75071],{"alt":27,"src":75072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[174,75074,75076],{"id":75075},"_362-元字符","3.6.2 元字符",[157,75078,75079,75082,75085,75088,75095],{},[160,75080,75081],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[160,75083,75084],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[160,75086,75087],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[160,75089,75090,75091],{},"正则验证工具：",[452,75092,75093],{"href":75093,"rel":75094},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23956],[160,75096,75097],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22088,75099,75101],{"id":75100},"_3621-边界符","3.6.2.1 边界符",[19,75103,75104],{},[25,75105],{"alt":27,"src":75106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75108,75109],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75111,75112],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75114,75115],{},"只匹配一次",[19,75117,75118],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22088,75120,75122],{"id":75121},"_3622-量词","3.6.2.2 量词",[19,75124,75125],{},[25,75126],{"alt":27,"src":75127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75129,75130],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22088,75132,75134],{"id":75133},"_3623-元字符","3.6.2.3 元字符",[19,75136,75137],{},[25,75138],{"alt":27,"src":75139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75141,75142],{},"匹配的是a或b或c []只选一个",[19,75144,75145],{},[25,75146],{"alt":27,"src":75147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75149,75150],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75152,75153],{},[25,75154],{"alt":27,"src":75155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75157,75158],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75160,75161],{},[25,75162],{"alt":27,"src":75163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[194,75165,75167],{"className":50691,"code":75166,"language":50693,"meta":27,"style":27},"\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",[200,75168,75169,75179,75193,75197,75205,75219,75239,75251,75259,75263,75271,75279,75284,75315,75342,75370,75374,75379,75407,75438,75443,75448,75479,75511,75543,75547,75552,75583,75613,75643,75647,75652,75683,75714,75744,75774,75778,75783,75816,75820,75825,75856,75887,75891,75896,75927,75957,75988,75992,75997,76029,76060,76091,76118,76149,76181,76214,76245,76276,76308,76339,76347,76355,76359],{"__ignoreMap":27},[203,75170,75171,75173,75175,75177],{"class":205,"line":206},[203,75172,51355],{"class":213},[203,75174,51359],{"class":51358},[203,75176,51362],{"class":2052},[203,75178,51365],{"class":213},[203,75180,75181,75183,75185,75187,75189,75191],{"class":205,"line":124},[203,75182,1124],{"class":213},[203,75184,50693],{"class":51358},[203,75186,51374],{"class":2052},[203,75188,259],{"class":213},[203,75190,51379],{"class":318},[203,75192,51365],{"class":213},[203,75194,75195],{"class":205,"line":1269},[203,75196,2489],{"emptyLinePlaceholder":131},[203,75198,75199,75201,75203],{"class":205,"line":1284},[203,75200,1124],{"class":213},[203,75202,51392],{"class":51358},[203,75204,51365],{"class":213},[203,75206,75207,75209,75211,75213,75215,75217],{"class":205,"line":1290},[203,75208,52202],{"class":213},[203,75210,51402],{"class":51358},[203,75212,51405],{"class":2052},[203,75214,259],{"class":213},[203,75216,51410],{"class":318},[203,75218,51365],{"class":213},[203,75220,75221,75223,75225,75227,75229,75231,75233,75235,75237],{"class":205,"line":1304},[203,75222,52202],{"class":213},[203,75224,51402],{"class":51358},[203,75226,15010],{"class":2052},[203,75228,259],{"class":213},[203,75230,51449],{"class":318},[203,75232,51429],{"class":2052},[203,75234,259],{"class":213},[203,75236,51456],{"class":318},[203,75238,51365],{"class":213},[203,75240,75241,75243,75245,75247,75249],{"class":205,"line":1310},[203,75242,52202],{"class":213},[203,75244,51465],{"class":51358},[203,75246,51468],{"class":213},[203,75248,51465],{"class":51358},[203,75250,51365],{"class":213},[203,75252,75253,75255,75257],{"class":205,"line":1401},[203,75254,51843],{"class":213},[203,75256,51392],{"class":51358},[203,75258,51365],{"class":213},[203,75260,75261],{"class":205,"line":1407},[203,75262,2489],{"emptyLinePlaceholder":131},[203,75264,75265,75267,75269],{"class":205,"line":1419},[203,75266,1124],{"class":213},[203,75268,51858],{"class":51358},[203,75270,51365],{"class":213},[203,75272,75273,75275,75277],{"class":205,"line":1701},[203,75274,52202],{"class":213},[203,75276,51871],{"class":51358},[203,75278,51365],{"class":213},[203,75280,75281],{"class":205,"line":1706},[203,75282,75283],{"class":272},"    \u002F\u002F 元字符中\n",[203,75285,75286,75288,75290,75292,75294,75297,75299,75301,75304,75306,75309,75312],{"class":205,"line":1712},[203,75287,73811],{"class":213},[203,75289,58305],{"class":2052},[203,75291,214],{"class":213},[203,75293,798],{"class":318},[203,75295,75296],{"class":48035},"哈",[203,75298,798],{"class":318},[203,75300,772],{"class":213},[203,75302,75303],{"class":2052},"test",[203,75305,214],{"class":213},[203,75307,75308],{"class":318},"'哈'",[203,75310,75311],{"class":213},"))  ",[203,75313,75314],{"class":272},"\u002F\u002Ftrue\n",[203,75316,75317,75319,75321,75323,75325,75327,75329,75331,75333,75335,75338,75340],{"class":205,"line":1717},[203,75318,73811],{"class":213},[203,75320,58305],{"class":2052},[203,75322,214],{"class":213},[203,75324,798],{"class":318},[203,75326,75296],{"class":48035},[203,75328,798],{"class":318},[203,75330,772],{"class":213},[203,75332,75303],{"class":2052},[203,75334,214],{"class":213},[203,75336,75337],{"class":318},"'哈哈'",[203,75339,75311],{"class":213},[203,75341,75314],{"class":272},[203,75343,75344,75346,75348,75350,75352,75354,75356,75358,75360,75362,75365,75368],{"class":205,"line":1731},[203,75345,73811],{"class":213},[203,75347,58305],{"class":2052},[203,75349,214],{"class":213},[203,75351,798],{"class":318},[203,75353,75296],{"class":48035},[203,75355,798],{"class":318},[203,75357,772],{"class":213},[203,75359,75303],{"class":2052},[203,75361,214],{"class":213},[203,75363,75364],{"class":318},"'二哈'",[203,75366,75367],{"class":213},"))   ",[203,75369,75314],{"class":272},[203,75371,75372],{"class":205,"line":1736},[203,75373,2489],{"emptyLinePlaceholder":131},[203,75375,75376],{"class":205,"line":1742},[203,75377,75378],{"class":272},"    \u002F\u002F 1.边界符\n",[203,75380,75381,75383,75385,75387,75389,75391,75393,75395,75397,75399,75401,75403,75405],{"class":205,"line":1763},[203,75382,73811],{"class":213},[203,75384,58305],{"class":2052},[203,75386,214],{"class":213},[203,75388,798],{"class":318},[203,75390,1180],{"class":209},[203,75392,75296],{"class":48035},[203,75394,798],{"class":318},[203,75396,772],{"class":213},[203,75398,75303],{"class":2052},[203,75400,214],{"class":213},[203,75402,75308],{"class":318},[203,75404,75311],{"class":213},[203,75406,75314],{"class":272},[203,75408,75409,75411,75413,75415,75417,75419,75421,75423,75425,75427,75429,75431,75433,75435],{"class":205,"line":1768},[203,75410,73811],{"class":213},[203,75412,58305],{"class":2052},[203,75414,214],{"class":213},[203,75416,798],{"class":318},[203,75418,1180],{"class":209},[203,75420,75296],{"class":48035},[203,75422,516],{"class":209},[203,75424,798],{"class":318},[203,75426,772],{"class":213},[203,75428,75303],{"class":2052},[203,75430,214],{"class":213},[203,75432,75337],{"class":318},[203,75434,75311],{"class":213},[203,75436,75437],{"class":272},"\u002F\u002Ffalse\n",[203,75439,75440],{"class":205,"line":1782},[203,75441,75442],{"class":272},"    \u002F\u002F 2.量词\n",[203,75444,75445],{"class":205,"line":1787},[203,75446,75447],{"class":272},"    \u002F\u002F 量词 * 类似于 >= 0\n",[203,75449,75450,75452,75454,75456,75458,75460,75462,75465,75467,75469,75471,75473,75475,75477],{"class":205,"line":1816},[203,75451,73811],{"class":213},[203,75453,58305],{"class":2052},[203,75455,214],{"class":213},[203,75457,798],{"class":318},[203,75459,1180],{"class":209},[203,75461,75296],{"class":48035},[203,75463,75464],{"class":209},"*$",[203,75466,798],{"class":318},[203,75468,772],{"class":213},[203,75470,75303],{"class":2052},[203,75472,214],{"class":213},[203,75474,75337],{"class":318},[203,75476,75311],{"class":213},[203,75478,75314],{"class":272},[203,75480,75481,75483,75485,75487,75489,75491,75493,75495,75497,75499,75501,75503,75506,75508],{"class":205,"line":1821},[203,75482,73811],{"class":213},[203,75484,58305],{"class":2052},[203,75486,214],{"class":213},[203,75488,798],{"class":318},[203,75490,1180],{"class":209},[203,75492,75296],{"class":48035},[203,75494,75464],{"class":209},[203,75496,798],{"class":318},[203,75498,772],{"class":213},[203,75500,75303],{"class":2052},[203,75502,214],{"class":213},[203,75504,75505],{"class":318},"'二哈好傻'",[203,75507,75311],{"class":213},[203,75509,75510],{"class":272},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[203,75512,75513,75515,75517,75519,75521,75523,75525,75527,75529,75531,75533,75535,75538,75540],{"class":205,"line":1838},[203,75514,73811],{"class":213},[203,75516,58305],{"class":2052},[203,75518,214],{"class":213},[203,75520,798],{"class":318},[203,75522,1180],{"class":209},[203,75524,75296],{"class":48035},[203,75526,75464],{"class":209},[203,75528,798],{"class":318},[203,75530,772],{"class":213},[203,75532,75303],{"class":2052},[203,75534,214],{"class":213},[203,75536,75537],{"class":318},"'哈好哈'",[203,75539,75367],{"class":213},[203,75541,75542],{"class":272},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[203,75544,75545],{"class":205,"line":1843},[203,75546,2489],{"emptyLinePlaceholder":131},[203,75548,75549],{"class":205,"line":1848},[203,75550,75551],{"class":272},"    \u002F\u002F +类似于>=1\n",[203,75553,75554,75556,75558,75560,75562,75564,75566,75569,75571,75573,75575,75577,75579,75581],{"class":205,"line":1853},[203,75555,73811],{"class":213},[203,75557,58305],{"class":2052},[203,75559,214],{"class":213},[203,75561,798],{"class":318},[203,75563,1180],{"class":209},[203,75565,75296],{"class":48035},[203,75567,75568],{"class":209},"+$",[203,75570,798],{"class":318},[203,75572,772],{"class":213},[203,75574,75303],{"class":2052},[203,75576,214],{"class":213},[203,75578,75337],{"class":318},[203,75580,75311],{"class":213},[203,75582,75314],{"class":272},[203,75584,75585,75587,75589,75591,75593,75595,75597,75599,75601,75603,75605,75607,75609,75611],{"class":205,"line":1867},[203,75586,73811],{"class":213},[203,75588,58305],{"class":2052},[203,75590,214],{"class":213},[203,75592,798],{"class":318},[203,75594,1180],{"class":209},[203,75596,75296],{"class":48035},[203,75598,75568],{"class":209},[203,75600,798],{"class":318},[203,75602,772],{"class":213},[203,75604,75303],{"class":2052},[203,75606,214],{"class":213},[203,75608,75505],{"class":318},[203,75610,75311],{"class":213},[203,75612,75510],{"class":272},[203,75614,75615,75617,75619,75621,75623,75625,75627,75629,75631,75633,75635,75637,75639,75641],{"class":205,"line":1872},[203,75616,73811],{"class":213},[203,75618,58305],{"class":2052},[203,75620,214],{"class":213},[203,75622,798],{"class":318},[203,75624,1180],{"class":209},[203,75626,75296],{"class":48035},[203,75628,75568],{"class":209},[203,75630,798],{"class":318},[203,75632,772],{"class":213},[203,75634,75303],{"class":2052},[203,75636,214],{"class":213},[203,75638,75537],{"class":318},[203,75640,75367],{"class":213},[203,75642,75437],{"class":272},[203,75644,75645],{"class":205,"line":2666},[203,75646,2489],{"emptyLinePlaceholder":131},[203,75648,75649],{"class":205,"line":2680},[203,75650,75651],{"class":272},"    \u002F\u002F ?类似于0次或一次\n",[203,75653,75654,75656,75658,75660,75662,75664,75667,75669,75671,75673,75675,75677,75679,75681],{"class":205,"line":2688},[203,75655,73811],{"class":213},[203,75657,58305],{"class":2052},[203,75659,214],{"class":213},[203,75661,798],{"class":318},[203,75663,1180],{"class":209},[203,75665,75666],{"class":48035},"哈？",[203,75668,516],{"class":209},[203,75670,798],{"class":318},[203,75672,772],{"class":213},[203,75674,75303],{"class":2052},[203,75676,214],{"class":213},[203,75678,74286],{"class":318},[203,75680,75367],{"class":213},[203,75682,75314],{"class":272},[203,75684,75685,75687,75689,75691,75693,75695,75697,75700,75702,75704,75706,75708,75710,75712],{"class":205,"line":2693},[203,75686,73811],{"class":213},[203,75688,58305],{"class":2052},[203,75690,214],{"class":213},[203,75692,798],{"class":318},[203,75694,1180],{"class":209},[203,75696,75296],{"class":48035},[203,75698,75699],{"class":209},"?$",[203,75701,798],{"class":318},[203,75703,772],{"class":213},[203,75705,75303],{"class":2052},[203,75707,214],{"class":213},[203,75709,75337],{"class":318},[203,75711,75311],{"class":213},[203,75713,75437],{"class":272},[203,75715,75716,75718,75720,75722,75724,75726,75728,75730,75732,75734,75736,75738,75740,75742],{"class":205,"line":2699},[203,75717,73811],{"class":213},[203,75719,58305],{"class":2052},[203,75721,214],{"class":213},[203,75723,798],{"class":318},[203,75725,1180],{"class":209},[203,75727,75296],{"class":48035},[203,75729,75699],{"class":209},[203,75731,798],{"class":318},[203,75733,772],{"class":213},[203,75735,75303],{"class":2052},[203,75737,214],{"class":213},[203,75739,75505],{"class":318},[203,75741,75311],{"class":213},[203,75743,75510],{"class":272},[203,75745,75746,75748,75750,75752,75754,75756,75758,75760,75762,75764,75766,75768,75770,75772],{"class":205,"line":2705},[203,75747,73811],{"class":213},[203,75749,58305],{"class":2052},[203,75751,214],{"class":213},[203,75753,798],{"class":318},[203,75755,1180],{"class":209},[203,75757,75296],{"class":48035},[203,75759,75699],{"class":209},[203,75761,798],{"class":318},[203,75763,772],{"class":213},[203,75765,75303],{"class":2052},[203,75767,214],{"class":213},[203,75769,75537],{"class":318},[203,75771,75311],{"class":213},[203,75773,75437],{"class":272},[203,75775,75776],{"class":205,"line":2710},[203,75777,2489],{"emptyLinePlaceholder":131},[203,75779,75780],{"class":205,"line":8038},[203,75781,75782],{"class":272},"    \u002F\u002F {n}写几，就必须出现几次\n",[203,75784,75785,75787,75789,75791,75793,75795,75797,75800,75802,75804,75806,75808,75811,75814],{"class":205,"line":8062},[203,75786,73811],{"class":213},[203,75788,58305],{"class":2052},[203,75790,214],{"class":213},[203,75792,798],{"class":318},[203,75794,1180],{"class":209},[203,75796,75296],{"class":48035},[203,75798,75799],{"class":209},"{4}$",[203,75801,798],{"class":318},[203,75803,772],{"class":213},[203,75805,75303],{"class":2052},[203,75807,214],{"class":213},[203,75809,75810],{"class":318},"'哈哈哈哈'",[203,75812,75813],{"class":213},")) ",[203,75815,75314],{"class":272},[203,75817,75818],{"class":205,"line":8067},[203,75819,2489],{"emptyLinePlaceholder":131},[203,75821,75822],{"class":205,"line":8073},[203,75823,75824],{"class":272},"    \u002F\u002F {n,}大于等于n次\n",[203,75826,75827,75829,75831,75833,75835,75837,75839,75842,75844,75846,75848,75850,75852,75854],{"class":205,"line":8100},[203,75828,73811],{"class":213},[203,75830,58305],{"class":2052},[203,75832,214],{"class":213},[203,75834,798],{"class":318},[203,75836,1180],{"class":209},[203,75838,75296],{"class":48035},[203,75840,75841],{"class":209},"{4,}$",[203,75843,798],{"class":318},[203,75845,772],{"class":213},[203,75847,75303],{"class":2052},[203,75849,214],{"class":213},[203,75851,75810],{"class":318},[203,75853,75813],{"class":213},[203,75855,75314],{"class":272},[203,75857,75858,75860,75862,75864,75866,75868,75870,75872,75874,75876,75878,75880,75883,75885],{"class":205,"line":8105},[203,75859,73811],{"class":213},[203,75861,58305],{"class":2052},[203,75863,214],{"class":213},[203,75865,798],{"class":318},[203,75867,1180],{"class":209},[203,75869,75296],{"class":48035},[203,75871,75841],{"class":209},[203,75873,798],{"class":318},[203,75875,772],{"class":213},[203,75877,75303],{"class":2052},[203,75879,214],{"class":213},[203,75881,75882],{"class":318},"'哈哈哈哈哈'",[203,75884,75813],{"class":213},[203,75886,75314],{"class":272},[203,75888,75889],{"class":205,"line":8111},[203,75890,2489],{"emptyLinePlaceholder":131},[203,75892,75893],{"class":205,"line":8123},[203,75894,75895],{"class":272},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[203,75897,75898,75900,75902,75904,75906,75908,75910,75913,75915,75917,75919,75921,75923,75925],{"class":205,"line":8135},[203,75899,73811],{"class":213},[203,75901,58305],{"class":2052},[203,75903,214],{"class":213},[203,75905,798],{"class":318},[203,75907,1180],{"class":209},[203,75909,75296],{"class":48035},[203,75911,75912],{"class":209},"{4,6}$",[203,75914,798],{"class":318},[203,75916,772],{"class":213},[203,75918,75303],{"class":2052},[203,75920,214],{"class":213},[203,75922,75810],{"class":318},[203,75924,75813],{"class":213},[203,75926,75314],{"class":272},[203,75928,75929,75931,75933,75935,75937,75939,75941,75943,75945,75947,75949,75951,75953,75955],{"class":205,"line":8147},[203,75930,73811],{"class":213},[203,75932,58305],{"class":2052},[203,75934,214],{"class":213},[203,75936,798],{"class":318},[203,75938,1180],{"class":209},[203,75940,75296],{"class":48035},[203,75942,75912],{"class":209},[203,75944,798],{"class":318},[203,75946,772],{"class":213},[203,75948,75303],{"class":2052},[203,75950,214],{"class":213},[203,75952,75882],{"class":318},[203,75954,75813],{"class":213},[203,75956,75314],{"class":272},[203,75958,75959,75961,75963,75965,75967,75969,75971,75973,75975,75977,75979,75981,75984,75986],{"class":205,"line":9806},[203,75960,73811],{"class":213},[203,75962,58305],{"class":2052},[203,75964,214],{"class":213},[203,75966,798],{"class":318},[203,75968,1180],{"class":209},[203,75970,75296],{"class":48035},[203,75972,75912],{"class":209},[203,75974,798],{"class":318},[203,75976,772],{"class":213},[203,75978,75303],{"class":2052},[203,75980,214],{"class":213},[203,75982,75983],{"class":318},"'哈哈哈哈哈哈哈'",[203,75985,75813],{"class":213},[203,75987,75437],{"class":272},[203,75989,75990],{"class":205,"line":9831},[203,75991,2489],{"emptyLinePlaceholder":131},[203,75993,75994],{"class":205,"line":9854},[203,75995,75996],{"class":272},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[203,75998,75999,76001,76003,76005,76007,76009,76012,76014,76016,76018,76020,76022,76025,76027],{"class":205,"line":9878},[203,76000,73811],{"class":213},[203,76002,58305],{"class":2052},[203,76004,214],{"class":213},[203,76006,798],{"class":318},[203,76008,1180],{"class":209},[203,76010,76011],{"class":262},"[abc]",[203,76013,516],{"class":209},[203,76015,798],{"class":318},[203,76017,772],{"class":213},[203,76019,75303],{"class":2052},[203,76021,214],{"class":213},[203,76023,76024],{"class":318},"'a'",[203,76026,75311],{"class":213},[203,76028,75314],{"class":272},[203,76030,76031,76033,76035,76037,76039,76041,76043,76045,76047,76049,76051,76053,76056,76058],{"class":205,"line":9883},[203,76032,73811],{"class":213},[203,76034,58305],{"class":2052},[203,76036,214],{"class":213},[203,76038,798],{"class":318},[203,76040,1180],{"class":209},[203,76042,76011],{"class":262},[203,76044,516],{"class":209},[203,76046,798],{"class":318},[203,76048,772],{"class":213},[203,76050,75303],{"class":2052},[203,76052,214],{"class":213},[203,76054,76055],{"class":318},"'b'",[203,76057,75311],{"class":213},[203,76059,75314],{"class":272},[203,76061,76062,76064,76066,76068,76070,76072,76074,76076,76078,76080,76082,76084,76087,76089],{"class":205,"line":9888},[203,76063,73811],{"class":213},[203,76065,58305],{"class":2052},[203,76067,214],{"class":213},[203,76069,798],{"class":318},[203,76071,1180],{"class":209},[203,76073,76011],{"class":262},[203,76075,516],{"class":209},[203,76077,798],{"class":318},[203,76079,772],{"class":213},[203,76081,75303],{"class":2052},[203,76083,214],{"class":213},[203,76085,76086],{"class":318},"'c'",[203,76088,75311],{"class":213},[203,76090,75314],{"class":272},[203,76092,76093,76095,76097,76099,76101,76103,76105,76107,76109,76111,76114,76116],{"class":205,"line":9893},[203,76094,73811],{"class":213},[203,76096,58305],{"class":2052},[203,76098,214],{"class":213},[203,76100,798],{"class":318},[203,76102,76011],{"class":262},[203,76104,798],{"class":318},[203,76106,772],{"class":213},[203,76108,75303],{"class":2052},[203,76110,214],{"class":213},[203,76112,76113],{"class":318},"'ab'",[203,76115,75311],{"class":213},[203,76117,75314],{"class":272},[203,76119,76120,76122,76124,76126,76128,76130,76132,76134,76136,76138,76140,76142,76144,76146],{"class":205,"line":9902},[203,76121,73811],{"class":213},[203,76123,58305],{"class":2052},[203,76125,214],{"class":213},[203,76127,798],{"class":318},[203,76129,1180],{"class":209},[203,76131,76011],{"class":262},[203,76133,516],{"class":209},[203,76135,798],{"class":318},[203,76137,772],{"class":213},[203,76139,75303],{"class":2052},[203,76141,214],{"class":213},[203,76143,76113],{"class":318},[203,76145,75311],{"class":213},[203,76147,76148],{"class":272},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[203,76150,76151,76153,76155,76157,76159,76161,76163,76166,76168,76170,76172,76174,76176,76178],{"class":205,"line":9907},[203,76152,73811],{"class":213},[203,76154,58305],{"class":2052},[203,76156,214],{"class":213},[203,76158,798],{"class":318},[203,76160,1180],{"class":209},[203,76162,76011],{"class":262},[203,76164,76165],{"class":209},"{2}$",[203,76167,798],{"class":318},[203,76169,772],{"class":213},[203,76171,75303],{"class":2052},[203,76173,214],{"class":213},[203,76175,76113],{"class":318},[203,76177,75311],{"class":213},[203,76179,76180],{"class":272},"\u002F\u002Ftrue   可以选两个\n",[203,76182,76183,76185,76187,76189,76191,76193,76196,76198,76200,76202,76204,76206,76209,76211],{"class":205,"line":9913},[203,76184,73811],{"class":213},[203,76186,58305],{"class":2052},[203,76188,214],{"class":213},[203,76190,798],{"class":318},[203,76192,1180],{"class":209},[203,76194,76195],{"class":262},"[a-z]",[203,76197,516],{"class":209},[203,76199,798],{"class":318},[203,76201,772],{"class":213},[203,76203,75303],{"class":2052},[203,76205,214],{"class":213},[203,76207,76208],{"class":318},"'p'",[203,76210,75367],{"class":213},[203,76212,76213],{"class":272},"\u002F\u002Ftrue   依然只能选一个\n",[203,76215,76216,76218,76220,76222,76224,76226,76229,76231,76233,76235,76237,76239,76241,76243],{"class":205,"line":9934},[203,76217,73811],{"class":213},[203,76219,58305],{"class":2052},[203,76221,214],{"class":213},[203,76223,798],{"class":318},[203,76225,1180],{"class":209},[203,76227,76228],{"class":262},"[A-Z]",[203,76230,516],{"class":209},[203,76232,798],{"class":318},[203,76234,772],{"class":213},[203,76236,75303],{"class":2052},[203,76238,214],{"class":213},[203,76240,76208],{"class":318},[203,76242,75367],{"class":213},[203,76244,75437],{"class":272},[203,76246,76247,76249,76251,76253,76255,76257,76259,76261,76263,76265,76267,76269,76272,76274],{"class":205,"line":9940},[203,76248,73811],{"class":213},[203,76250,58305],{"class":2052},[203,76252,214],{"class":213},[203,76254,798],{"class":318},[203,76256,1180],{"class":209},[203,76258,76228],{"class":262},[203,76260,516],{"class":209},[203,76262,798],{"class":318},[203,76264,772],{"class":213},[203,76266,75303],{"class":2052},[203,76268,214],{"class":213},[203,76270,76271],{"class":318},"'P'",[203,76273,75367],{"class":213},[203,76275,75314],{"class":272},[203,76277,76278,76280,76282,76284,76286,76288,76291,76293,76295,76297,76299,76301,76304,76306],{"class":205,"line":9954},[203,76279,73811],{"class":213},[203,76281,58305],{"class":2052},[203,76283,214],{"class":213},[203,76285,798],{"class":318},[203,76287,1180],{"class":209},[203,76289,76290],{"class":262},"[0-9]",[203,76292,516],{"class":209},[203,76294,798],{"class":318},[203,76296,772],{"class":213},[203,76298,75303],{"class":2052},[203,76300,214],{"class":213},[203,76302,76303],{"class":318},"'0'",[203,76305,75367],{"class":213},[203,76307,75314],{"class":272},[203,76309,76310,76312,76314,76316,76318,76320,76323,76325,76327,76329,76331,76333,76335,76337],{"class":205,"line":9960},[203,76311,73811],{"class":213},[203,76313,58305],{"class":2052},[203,76315,214],{"class":213},[203,76317,798],{"class":318},[203,76319,1180],{"class":209},[203,76321,76322],{"class":262},"[a-zA-Z0-9]",[203,76324,516],{"class":209},[203,76326,798],{"class":318},[203,76328,772],{"class":213},[203,76330,75303],{"class":2052},[203,76332,214],{"class":213},[203,76334,76208],{"class":318},[203,76336,75311],{"class":213},[203,76338,75314],{"class":272},[203,76340,76341,76343,76345],{"class":205,"line":9987},[203,76342,52475],{"class":213},[203,76344,51871],{"class":51358},[203,76346,51365],{"class":213},[203,76348,76349,76351,76353],{"class":205,"line":9996},[203,76350,51843],{"class":213},[203,76352,51858],{"class":51358},[203,76354,51365],{"class":213},[203,76356,76357],{"class":205,"line":10002},[203,76358,2489],{"emptyLinePlaceholder":131},[203,76360,76361,76363,76365],{"class":205,"line":10010},[203,76362,51843],{"class":213},[203,76364,50693],{"class":51358},[203,76366,51365],{"class":213},[22088,76368,76370],{"id":76369},"_3624-修饰符","3.6.2.4 修饰符",[19,76372,76373],{},[25,76374],{"alt":27,"src":76375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76377,76378],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76380,76381],{},[25,76382],{"alt":27,"src":76383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[194,76385,76387],{"className":50691,"code":76386,"language":50693,"meta":27,"style":27},"\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",[200,76388,76389,76399,76413,76421,76435,76455,76467,76475,76483,76491,76523,76554,76559,76591,76602,76635,76644,76652,76660],{"__ignoreMap":27},[203,76390,76391,76393,76395,76397],{"class":205,"line":206},[203,76392,51355],{"class":213},[203,76394,51359],{"class":51358},[203,76396,51362],{"class":2052},[203,76398,51365],{"class":213},[203,76400,76401,76403,76405,76407,76409,76411],{"class":205,"line":124},[203,76402,1124],{"class":213},[203,76404,50693],{"class":51358},[203,76406,51374],{"class":2052},[203,76408,259],{"class":213},[203,76410,51379],{"class":318},[203,76412,51365],{"class":213},[203,76414,76415,76417,76419],{"class":205,"line":1269},[203,76416,1124],{"class":213},[203,76418,51392],{"class":51358},[203,76420,51365],{"class":213},[203,76422,76423,76425,76427,76429,76431,76433],{"class":205,"line":1284},[203,76424,52202],{"class":213},[203,76426,51402],{"class":51358},[203,76428,51405],{"class":2052},[203,76430,259],{"class":213},[203,76432,51410],{"class":318},[203,76434,51365],{"class":213},[203,76436,76437,76439,76441,76443,76445,76447,76449,76451,76453],{"class":205,"line":1290},[203,76438,52202],{"class":213},[203,76440,51402],{"class":51358},[203,76442,15010],{"class":2052},[203,76444,259],{"class":213},[203,76446,51449],{"class":318},[203,76448,51429],{"class":2052},[203,76450,259],{"class":213},[203,76452,51456],{"class":318},[203,76454,51365],{"class":213},[203,76456,76457,76459,76461,76463,76465],{"class":205,"line":1304},[203,76458,52202],{"class":213},[203,76460,51465],{"class":51358},[203,76462,51468],{"class":213},[203,76464,51465],{"class":51358},[203,76466,51365],{"class":213},[203,76468,76469,76471,76473],{"class":205,"line":1310},[203,76470,51843],{"class":213},[203,76472,51392],{"class":51358},[203,76474,51365],{"class":213},[203,76476,76477,76479,76481],{"class":205,"line":1401},[203,76478,1124],{"class":213},[203,76480,51858],{"class":51358},[203,76482,51365],{"class":213},[203,76484,76485,76487,76489],{"class":205,"line":1407},[203,76486,52202],{"class":213},[203,76488,51871],{"class":51358},[203,76490,51365],{"class":213},[203,76492,76493,76495,76497,76499,76501,76503,76506,76508,76510,76512,76514,76516,76519,76521],{"class":205,"line":1419},[203,76494,73811],{"class":213},[203,76496,58305],{"class":2052},[203,76498,214],{"class":213},[203,76500,798],{"class":318},[203,76502,1180],{"class":209},[203,76504,76505],{"class":48035},"java",[203,76507,516],{"class":209},[203,76509,798],{"class":318},[203,76511,772],{"class":213},[203,76513,75303],{"class":2052},[203,76515,214],{"class":213},[203,76517,76518],{"class":318},"'java'",[203,76520,75813],{"class":213},[203,76522,75314],{"class":272},[203,76524,76525,76527,76529,76531,76533,76535,76537,76539,76541,76543,76545,76547,76550,76552],{"class":205,"line":1701},[203,76526,73811],{"class":213},[203,76528,58305],{"class":2052},[203,76530,214],{"class":213},[203,76532,798],{"class":318},[203,76534,1180],{"class":209},[203,76536,76505],{"class":48035},[203,76538,516],{"class":209},[203,76540,798],{"class":318},[203,76542,772],{"class":213},[203,76544,75303],{"class":2052},[203,76546,214],{"class":213},[203,76548,76549],{"class":318},"'Java'",[203,76551,75813],{"class":213},[203,76553,75437],{"class":272},[203,76555,76556],{"class":205,"line":1706},[203,76557,76558],{"class":272},"    \u002F\u002F 不区分大小写、\n",[203,76560,76561,76563,76565,76567,76569,76571,76573,76575,76577,76579,76581,76583,76585,76587,76589],{"class":205,"line":1712},[203,76562,73811],{"class":213},[203,76564,58305],{"class":2052},[203,76566,214],{"class":213},[203,76568,798],{"class":318},[203,76570,1180],{"class":209},[203,76572,76505],{"class":48035},[203,76574,516],{"class":209},[203,76576,798],{"class":318},[203,76578,655],{"class":209},[203,76580,772],{"class":213},[203,76582,75303],{"class":2052},[203,76584,214],{"class":213},[203,76586,76549],{"class":318},[203,76588,75813],{"class":213},[203,76590,75314],{"class":272},[203,76592,76593,76595,76597,76599],{"class":205,"line":1717},[203,76594,11311],{"class":209},[203,76596,73977],{"class":262},[203,76598,13654],{"class":209},[203,76600,76601],{"class":318}," 'java是一门编程语言，学完java工资很高'\n",[203,76603,76604,76606,76609,76611,76614,76617,76619,76621,76623,76625,76628,76630,76633],{"class":205,"line":1731},[203,76605,11311],{"class":209},[203,76607,76608],{"class":262}," result",[203,76610,13654],{"class":209},[203,76612,76613],{"class":213}," str.",[203,76615,76616],{"class":2052},"replace",[203,76618,214],{"class":213},[203,76620,798],{"class":318},[203,76622,76505],{"class":48035},[203,76624,798],{"class":318},[203,76626,76627],{"class":209},"ig",[203,76629,12525],{"class":213},[203,76631,76632],{"class":318},"'前端'",[203,76634,220],{"class":213},[203,76636,76637,76639,76641],{"class":205,"line":1736},[203,76638,73811],{"class":213},[203,76640,58305],{"class":2052},[203,76642,76643],{"class":213},"(result)\n",[203,76645,76646,76648,76650],{"class":205,"line":1742},[203,76647,52475],{"class":213},[203,76649,51871],{"class":51358},[203,76651,51365],{"class":213},[203,76653,76654,76656,76658],{"class":205,"line":1763},[203,76655,51843],{"class":213},[203,76657,51858],{"class":51358},[203,76659,51365],{"class":213},[203,76661,76662,76664,76666],{"class":205,"line":1768},[203,76663,51843],{"class":213},[203,76665,50693],{"class":51358},[203,76667,51365],{"class":213},[5216,76669,76670],{},"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":27,"searchDepth":124,"depth":124,"links":76672},[76673,76683,76695,76712,76719,76727],{"id":53418,"depth":124,"text":53419,"children":76674},[76675,76676,76677,76678,76679,76680,76681,76682],{"id":53422,"depth":1269,"text":53423},{"id":53455,"depth":1269,"text":53456},{"id":53494,"depth":1269,"text":53495},{"id":53652,"depth":1269,"text":53653},{"id":53700,"depth":1269,"text":53701},{"id":53837,"depth":1269,"text":53838},{"id":54159,"depth":1269,"text":54160},{"id":57147,"depth":1269,"text":57148},{"id":57175,"depth":124,"text":57176,"children":76684},[76685,76686,76687,76688,76689,76690,76691,76692,76693,76694],{"id":57179,"depth":1269,"text":57180},{"id":57202,"depth":1269,"text":57203},{"id":58117,"depth":1269,"text":58118},{"id":58807,"depth":1269,"text":58808},{"id":59089,"depth":1269,"text":59090},{"id":63250,"depth":1269,"text":63251},{"id":63420,"depth":1269,"text":63421},{"id":63548,"depth":1269,"text":63549},{"id":63573,"depth":1269,"text":63574},{"id":64962,"depth":1269,"text":64963},{"id":66115,"depth":124,"text":66116,"children":76696},[76697,76698,76699,76700,76701,76702,76703,76704,76705,76706,76707,76708,76709,76710,76711],{"id":66119,"depth":1269,"text":66120},{"id":66773,"depth":1269,"text":66774},{"id":68468,"depth":1269,"text":68469},{"id":68509,"depth":1269,"text":68510},{"id":68551,"depth":1269,"text":68552},{"id":68565,"depth":1269,"text":68566},{"id":68614,"depth":1269,"text":68615},{"id":68626,"depth":1269,"text":68627},{"id":68641,"depth":1269,"text":68642},{"id":68677,"depth":1269,"text":68678},{"id":68758,"depth":1269,"text":68759},{"id":68886,"depth":1269,"text":68887},{"id":68898,"depth":1269,"text":68899},{"id":68917,"depth":1269,"text":68918},{"id":71028,"depth":1269,"text":71029},{"id":71047,"depth":124,"text":71048,"children":76713},[76714,76715,76716,76717,76718],{"id":71068,"depth":1269,"text":71069},{"id":71088,"depth":1269,"text":71089},{"id":71137,"depth":1269,"text":71138},{"id":71262,"depth":1269,"text":71263},{"id":71443,"depth":1269,"text":71444},{"id":71461,"depth":124,"text":71462,"children":76720},[76721,76722,76723,76724,76725,76726],{"id":71476,"depth":1269,"text":71477},{"id":71535,"depth":1269,"text":71536},{"id":71559,"depth":1269,"text":71560},{"id":71879,"depth":1269,"text":71880},{"id":71911,"depth":1269,"text":71912},{"id":71934,"depth":1269,"text":71935},{"id":75002,"depth":124,"text":75003,"children":76728},[76729,76730],{"id":75036,"depth":1269,"text":75037},{"id":75075,"depth":1269,"text":75076},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53390,"description":23467},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76737,"title":76738,"body":76739,"description":23467,"extension":129,"meta":92876,"navigation":131,"path":92877,"seo":92878,"stem":92879,"__hash__":92880},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76740,"toc":92812},[76741,76744,76747,76751,76755,76760,76765,76776,76780,76785,76788,76792,76795,76800,76804,76808,76811,76816,76819,76823,76826,76834,76837,76841,76846,76851,76854,76858,76863,76868,76871,76875,76880,76883,76888,76891,76896,76899,76904,76909,76912,76915,76919,76924,76929,76932,76936,76940,76943,76946,76949,76953,76957,76962,76967,76970,76974,76979,76984,76987,76990,76993,76996,76999,77002,77005,77008,77011,77016,77020,77025,77030,77033,77036,77039,77042,77045,77048,77051,77054,77058,77062,77065,77068,77071,77076,77078,77081,77084,77087,77090,77093,77096,77099,77102,77105,77108,77111,77114,77117,77122,77127,77132,77135,77139,77142,77147,77151,77153,77164,77169,77270,77273,77276,77279,77282,77285,77288,77291,77294,77296,77299,77302,77305,77308,77311,77313,77316,77319,77322,77325,77328,77331,77333,77336,77338,77340,77343,77347,77351,77354,77357,77360,77363,77366,77369,77372,77375,77378,77383,77503,77506,77509,77514,77517,77520,77523,77526,77531,77534,77537,77540,77543,77548,77551,77651,77716,77790,77794,77797,77800,77804,77807,77821,77850,77853,77856,77859,77862,77865,77868,77871,77873,77876,77879,77882,77885,77889,77894,77898,77903,77978,77981,78164,78167,78170,78173,78176,78179,78181,78184,78187,78190,78193,78196,78199,78201,78205,78208,78213,78216,78219,78222,78225,78227,78232,78235,78238,78241,78244,78246,78251,78254,78257,78259,78261,78264,78268,78271,78274,78279,78282,78285,78288,78338,78343,78347,78352,78355,78424,78427,78436,78440,78445,78448,78451,78459,78462,78479,80281,80285,80289,80294,80297,80301,80307,80313,80465,80470,80475,80478,80481,80484,80487,80490,80493,80496,80499,80502,80505,80508,80511,80516,80520,80523,80534,80538,80543,80546,80549,80552,80555,80558,80560,80563,80566,80569,80572,80574,80591,80594,80598,80601,80606,80611,80614,80617,80621,80624,80627,80636,80639,80643,80646,80651,80656,80723,80727,80730,80733,80738,80743,80829,80834,80838,80841,80844,80859,80862,80867,80871,80876,80985,80988,80999,81149,81153,81158,81267,81271,81276,81281,81286,81289,81296,81316,81352,81516,81521,81524,81529,81536,81539,81542,81545,81604,81660,81716,81720,81725,82040,82043,82047,82050,82055,82164,82169,82173,82178,82182,82253,82257,82259,82262,82265,82303,82579,82583,82600,82666,82700,82704,82707,82712,82741,82748,82757,82762,82777,82782,82791,82794,82931,82935,82997,83001,83006,83251,83255,83260,83263,83266,83269,83272,83276,83281,84862,84866,84870,84876,84879,84884,84888,84891,84896,84899,84910,84914,84919,84923,84928,84933,84936,84941,84945,84949,84952,84957,84962,84965,84968,84971,85093,85098,85200,85203,85206,85210,85215,85387,85392,85396,85399,85404,85470,85475,85478,85609,85612,85617,85620,85623,85714,85719,85722,85725,85728,85731,85736,85741,85744,85749,85754,85759,85763,85766,85769,85774,85779,85784,85789,85843,85846,85849,85854,85857,85860,85865,85870,85875,85879,85884,85898,85903,85906,85911,85915,85920,85925,85930,85935,85940,85945,85950,85955,85958,85962,85967,85970,85973,85976,85981,85986,85989,85992,85996,85999,86002,86007,86012,86017,86022,86025,86030,86035,86096,86101,86104,86109,87350,87355,87359,87363,87368,87371,87376,87381,87384,87389,87391,87396,87400,87403,87406,87417,87421,87426,87431,87486,87491,87496,87501,87712,87717,87721,87726,87729,87731,87734,87737,88184,88189,88196,88202,88205,88208,88472,88477,88481,88746,88751,88755,88760,88765,88770,88775,89106,89109,89114,89119,89122,89126,89130,89135,89140,89145,89150,89155,89160,89164,89167,89172,89177,89180,89254,89259,89264,89269,89271,89274,89644,89649,89654,89659,89662,89665,89767,89772,89777,89880,89884,89889,89893,89897,89902,89907,89910,89915,89918,89921,90314,90319,90322,90325,90328,90331,90851,90855,90860,90865,90870,90873,90878,90881,90884,91266,91271,91273,91275,91278,91281,91793,91797,91858,91861,91864,91867,91871,91874,91879,91884,92809],[10,76742,76738],{"id":76743},"_4js进阶",[19,76745,76746],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,76748,76750],{"id":76749},"_41-作用域","4.1 作用域",[174,76752,76754],{"id":76753},"_411-局部作用域","4.1.1 局部作用域",[19,76756,76757],{},[25,76758],{"alt":27,"src":76759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,76761,76762],{},[25,76763],{"alt":27,"src":76764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1221,76766,76767,76770,76773],{},[160,76768,76769],{},"函数作用域在函数内部",[160,76771,76772],{},"块级作用域在{}",[160,76774,76775],{},"对象的那个{}不是作用域，不是块作用域",[174,76777,76779],{"id":76778},"_412-全局作用域","4.1.2 全局作用域",[19,76781,76782],{},[25,76783],{"alt":27,"src":76784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,76786,76787],{},"window.a=10不要这样写",[174,76789,76791],{"id":76790},"_413-作用域链","4.1.3 作用域链",[19,76793,76794],{},"变量查找机制",[19,76796,76797],{},[25,76798],{"alt":27,"src":76799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,76801,76803],{"id":76802},"_42-垃圾回收机制","4.2 垃圾回收机制",[174,76805,76807],{"id":76806},"_421-大体介绍","4.2.1 大体介绍",[19,76809,76810],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,76812,76813],{},[25,76814],{"alt":27,"src":76815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,76817,76818],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[174,76820,76822],{"id":76821},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,76824,76825],{},"堆栈空间分配区别：",[157,76827,76828,76831],{},[160,76829,76830],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[160,76832,76833],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,76835,76836],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22088,76838,76840],{"id":76839},"_4221-引用计数","4.2.2.1 引用计数",[19,76842,76843],{},[25,76844],{"alt":27,"src":76845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,76847,76848],{},[25,76849],{"alt":27,"src":76850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,76852,76853],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22088,76855,76857],{"id":76856},"_4222-标记清除法","4.2.2.2 标记清除法",[19,76859,76860],{},[25,76861],{"alt":27,"src":76862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,76864,76865],{},[25,76866],{"alt":27,"src":76867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,76869,76870],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,76872,76874],{"id":76873},"_43-闭包","4.3 闭包",[19,76876,76877],{},[25,76878],{"alt":27,"src":76879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,76881,76882],{},"闭包：内层函数+外层函数的变量",[19,76884,76885],{},[25,76886],{"alt":27,"src":76887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,76889,76890],{},"closure就是闭包",[19,76892,76893],{},[25,76894],{"alt":27,"src":76895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,76897,76898],{},"内层函数必须包含外层函数的变量才是闭包",[19,76900,76901],{},[25,76902],{"alt":27,"src":76903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,76905,76906],{},[25,76907],{"alt":27,"src":76908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,76910,76911],{},"闭包可能会引起内存泄漏",[19,76913,76914],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,76916,76918],{"id":76917},"_44-变量提升","4.4 变量提升",[19,76920,76921],{},[25,76922],{"alt":27,"src":76923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,76925,76926],{},[25,76927],{"alt":27,"src":76928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,76930,76931],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,76933,76935],{"id":76934},"_45-函数进阶","4.5 函数进阶",[174,76937,76939],{"id":76938},"_451-函数提升","4.5.1 函数提升",[19,76941,76942],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,76944,76945],{},"只提升函数声明，不提升函数调用",[51871,76947,76948],{},"\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",[174,76950,76952],{"id":76951},"_452-函数参数","4.5.2 函数参数",[22088,76954,76956],{"id":76955},"_4521-动态参数","4.5.2.1 动态参数",[19,76958,76959],{},[25,76960],{"alt":27,"src":76961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,76963,76964],{},[25,76965],{"alt":27,"src":76966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,76968,76969],{},"箭头函数里边没有arguments",[22088,76971,76973],{"id":76972},"_4522-剩余参数","4.5.2.2 剩余参数",[19,76975,76976],{},[25,76977],{"alt":27,"src":76978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,76980,76981],{},[25,76982],{"alt":27,"src":76983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,76985,76986],{},"剩余参数使用的时候不需要写...",[19,76988,76989],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,76991,76992],{},"  function getSum(a,b,...arr) {",[19,76994,76995],{},"  console.log(11)",[19,76997,76998],{},"  }",[19,77000,77001],{},"  getSum(1,2,3,4)",[19,77003,77004],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77006,77007],{},"  getSum(1,2)",[19,77009,77010],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77012,77013],{},[25,77014],{"alt":27,"src":77015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22088,77017,77019],{"id":77018},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77021,77022],{},[25,77023],{"alt":27,"src":77024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77026,77027],{},[25,77028],{"alt":27,"src":77029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77031,77032],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77034,77035],{},"展开运算符可以用于数组之间的合并：",[19,77037,77038],{},"const arr1 = [1, 2, 3]",[19,77040,77041],{},"const arr2 = [3, 4, 5]",[19,77043,77044],{},"const arr = [...arr1, ...arr2]",[19,77046,77047],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77049,77050],{},"剩余参数：函数参数使用，得到真数组",[19,77052,77053],{},"展开运算符：数组中使用，数组展开",[174,77055,77057],{"id":77056},"_453-箭头函数","4.5.3 箭头函数",[22088,77059,77061],{"id":77060},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77063,77064],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77066,77067],{},"它不是万能的！！！",[19,77069,77070],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77072,77073],{},[25,77074],{"alt":27,"src":77075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77077,243],{},[19,77079,77080],{},"① 只有一个形参的时候，可以省略小括号：",[19,77082,77083],{},"const fn=x=>{console.log(x)}",[19,77085,77086],{},"② 只有一行代码时可以省略大括号：",[19,77088,77089],{},"const fn=x=>console.log(11)",[19,77091,77092],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77094,77095],{},"const fn=x=>x+x",[19,77097,77098],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77100,77101],{},"⑤ 阻止表单默认提交：",[19,77103,77104],{},"const form = document.querySelector('form')",[19,77106,77107],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77109,77110],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77112,77113],{},"const fn=uname=>({uname:uname})",[19,77115,77116],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77118,77119],{},[25,77120],{"alt":27,"src":77121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77123,77124],{},[25,77125],{"alt":27,"src":77126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77128,77129],{},[25,77130],{"alt":27,"src":77131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77133,77134],{},"一定不要忘记用()，有()就理解为自带return",[22088,77136,77138],{"id":77137},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77140,77141],{},"箭头函数是没有动态参数的arguments",[19,77143,77144],{},[25,77145],{"alt":27,"src":77146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22088,77148,77150],{"id":77149},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77152,11422],{},[157,77154,77155,77158,77161],{},[160,77156,77157],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[160,77159,77160],{},"事件回调函数使用箭头函数时，this 为全局的 window",[160,77162,77163],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77165,77166],{},[25,77167],{"alt":27,"src":77168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[194,77170,77172],{"className":53125,"code":77171,"language":53127,"meta":27,"style":27},"  \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",[200,77173,77174,77182,77187,77192,77197,77202,77207,77211,77216,77220,77224,77229,77234,77239,77243,77247,77252,77257,77262],{"__ignoreMap":27},[203,77175,77176,77178,77180],{"class":205,"line":206},[203,77177,52202],{"class":213},[203,77179,51871],{"class":51358},[203,77181,51365],{"class":213},[203,77183,77184],{"class":205,"line":124},[203,77185,77186],{"class":213},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[203,77188,77189],{"class":205,"line":1269},[203,77190,77191],{"class":213},"    console.log(this) \u002F\u002F指向window\n",[203,77193,77194],{"class":205,"line":1284},[203,77195,77196],{"class":213},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[203,77198,77199],{"class":205,"line":1290},[203,77200,77201],{"class":213},"    function fn() {\n",[203,77203,77204],{"class":205,"line":1304},[203,77205,77206],{"class":213},"      console.log(this)  \u002F\u002F指向window\n",[203,77208,77209],{"class":205,"line":1310},[203,77210,2276],{"class":213},[203,77212,77213],{"class":205,"line":1401},[203,77214,77215],{"class":213},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[203,77217,77218],{"class":205,"line":1407},[203,77219,2489],{"emptyLinePlaceholder":131},[203,77221,77222],{"class":205,"line":1419},[203,77223,71581],{"class":213},[203,77225,77226],{"class":205,"line":1701},[203,77227,77228],{"class":213},"      name: 'andy',\n",[203,77230,77231],{"class":205,"line":1706},[203,77232,77233],{"class":213},"      sayHai: function () {\n",[203,77235,77236],{"class":205,"line":1712},[203,77237,77238],{"class":213},"        console.log(this)\n",[203,77240,77241],{"class":205,"line":1717},[203,77242,52456],{"class":213},[203,77244,77245],{"class":205,"line":1731},[203,77246,2276],{"class":213},[203,77248,77249],{"class":205,"line":1736},[203,77250,77251],{"class":213},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[203,77253,77254],{"class":205,"line":1742},[203,77255,77256],{"class":213},"    \u002F\u002F 2.箭头函数的this\n",[203,77258,77259],{"class":205,"line":1763},[203,77260,77261],{"class":213},"    const fn = () => console.log(this)\n",[203,77263,77264,77266,77268],{"class":205,"line":1768},[203,77265,52475],{"class":213},[203,77267,51871],{"class":51358},[203,77269,51365],{"class":213},[19,77271,77272],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77274,77275],{},"const fn = () => console.log(this)",[19,77277,77278],{},"fn() \u002F\u002F指向window",[19,77280,77281],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77283,77284],{},"①",[19,77286,77287],{},"const obj = {",[19,77289,77290],{},"uname: 'pink老师',",[19,77292,77293],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77295,1160],{},[19,77297,77298],{},"调用对象里边的函数",[19,77300,77301],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77303,77304],{},"obj.sayHai()",[19,77306,77307],{},"②",[19,77309,77310],{},"const obj1 = {",[19,77312,77290],{},[19,77314,77315],{},"sayHai: function () {",[19,77317,77318],{},"let i = 10",[19,77320,77321],{},"const count = () => {",[19,77323,77324],{},"console.log(this)",[19,77326,77327],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77329,77330],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77332,1160],{},[19,77334,77335],{},"count()",[19,77337,1160],{},[19,77339,1160],{},[19,77341,77342],{},"obj1.sayHai()",[14,77344,77346],{"id":77345},"_46-解构赋值","4.6 解构赋值",[174,77348,77350],{"id":77349},"_461-数组解构","4.6.1 数组解构",[19,77352,77353],{},"以前要是使用数组中的值的话：",[19,77355,77356],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77358,77359],{},"const arr=[100,60,80]",[19,77361,77362],{},"const max=arr[0]",[19,77364,77365],{},"const min=arr[1]",[19,77367,77368],{},"const avg=arr[2]",[19,77370,77371],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77373,77374],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77376,77377],{},"这个写法就类似于上边的那种用很多const的方法",[19,77379,77380],{},[25,77381],{"alt":27,"src":77382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[194,77384,77386],{"className":50691,"code":77385,"language":50693,"meta":27,"style":27},"①变量之间交换值:\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",[200,77387,77388,77393,77398,77403,77408,77413,77417,77421,77426,77430,77435,77440,77444,77449,77454,77465,77475,77480,77485,77490,77494,77498],{"__ignoreMap":27},[203,77389,77390],{"class":205,"line":206},[203,77391,77392],{"class":213},"①变量之间交换值:\n",[203,77394,77395],{"class":205,"line":124},[203,77396,77397],{"class":213},"let a=1\n",[203,77399,77400],{"class":205,"line":1269},[203,77401,77402],{"class":213},"let b=2;\n",[203,77404,77405],{"class":205,"line":1284},[203,77406,77407],{"class":213},"必须加这行代码，不然就会报错\n",[203,77409,77410],{"class":205,"line":1290},[203,77411,77412],{"class":213},"[b,a]=[a,b]\n",[203,77414,77415],{"class":205,"line":1304},[203,77416,2489],{"emptyLinePlaceholder":131},[203,77418,77419],{"class":205,"line":1310},[203,77420,2489],{"emptyLinePlaceholder":131},[203,77422,77423],{"class":205,"line":1401},[203,77424,77425],{"class":213},"可以写成下面的方式：\n",[203,77427,77428],{"class":205,"line":1407},[203,77429,77397],{"class":213},[203,77431,77432],{"class":205,"line":1419},[203,77433,77434],{"class":213},"let b=2\n",[203,77436,77437],{"class":205,"line":1701},[203,77438,77439],{"class":213},";[b,a]=[a,b]\n",[203,77441,77442],{"class":205,"line":1706},[203,77443,2489],{"emptyLinePlaceholder":131},[203,77445,77446],{"class":205,"line":1712},[203,77447,77448],{"class":213},"②排序\n",[203,77450,77451],{"class":205,"line":1717},[203,77452,77453],{"class":213},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[203,77455,77456,77459,77462],{"class":205,"line":1731},[203,77457,77458],{"class":213},"for (let i = 0; i ",[203,77460,1124],{"class":77461},"s7hpK",[203,77463,77464],{"class":213}," arr1.length; i++) {\n",[203,77466,77467,77470,77472],{"class":205,"line":1736},[203,77468,77469],{"class":213},"   for (let j = 0; j ",[203,77471,1124],{"class":77461},[203,77473,77474],{"class":213}," arr1.length - 1; j++) {\n",[203,77476,77477],{"class":205,"line":1742},[203,77478,77479],{"class":213},"      if (arr1[j] > arr1[j + 1]) {\n",[203,77481,77482],{"class":205,"line":1763},[203,77483,77484],{"class":213},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[203,77486,77487],{"class":205,"line":1768},[203,77488,77489],{"class":213},"       }\n",[203,77491,77492],{"class":205,"line":1782},[203,77493,4398],{"class":213},[203,77495,77496],{"class":205,"line":1787},[203,77497,1654],{"class":213},[203,77499,77500],{"class":205,"line":1816},[203,77501,77502],{"class":213},"console.log(arr1)\n",[19,77504,77505],{},"数组解构的细节：",[19,77507,77508],{},"①变量多，单元值少",[19,77510,77511],{},[25,77512],{"alt":27,"src":77513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,77515,77516],{},"防止出现undefined的方法：",[19,77518,77519],{},"const [a=0,b=0] =[1]",[19,77521,77522],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,77524,77525],{},"②变量少，单元值多",[19,77527,77528],{},[25,77529],{"alt":27,"src":77530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,77532,77533],{},"此时可以使用剩余参数来接收多余的值",[19,77535,77536],{},"const [a,b,...c]=[1,2,3,4]",[19,77538,77539],{},"console.log(c) 输出[3,4]",[19,77541,77542],{},"③可以按需导入，忽略某些返回值",[19,77544,77545],{},[25,77546],{"alt":27,"src":77547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,77549,77550],{},"④支持多维数组的结构",[194,77552,77556],{"className":77553,"code":77554,"language":77555,"meta":27,"style":27},"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",[200,77557,77558,77586,77602,77617,77632],{"__ignoreMap":27},[203,77559,77560,77562,77564,77566,77568,77570,77572,77574,77577,77579,77581,77583],{"class":205,"line":206},[203,77561,6882],{"class":209},[203,77563,51891],{"class":213},[203,77565,259],{"class":209},[203,77567,52284],{"class":213},[203,77569,431],{"class":262},[203,77571,12525],{"class":213},[203,77573,291],{"class":262},[203,77575,77576],{"class":213},", [",[203,77578,285],{"class":262},[203,77580,12525],{"class":213},[203,77582,507],{"class":262},[203,77584,77585],{"class":213},"]]\n",[203,77587,77588,77591,77593,77595,77597,77599],{"class":205,"line":124},[203,77589,77590],{"class":213},"console.",[203,77592,58305],{"class":2052},[203,77594,3940],{"class":213},[203,77596,405],{"class":262},[203,77598,4305],{"class":213},[203,77600,77601],{"class":272},"  \u002F\u002F1\n",[203,77603,77604,77606,77608,77610,77612,77614],{"class":205,"line":1269},[203,77605,77590],{"class":213},[203,77607,58305],{"class":2052},[203,77609,3940],{"class":213},[203,77611,431],{"class":262},[203,77613,4305],{"class":213},[203,77615,77616],{"class":272},"  \u002F\u002F2\n",[203,77618,77619,77621,77623,77625,77627,77629],{"class":205,"line":1284},[203,77620,77590],{"class":213},[203,77622,58305],{"class":2052},[203,77624,3940],{"class":213},[203,77626,291],{"class":262},[203,77628,4305],{"class":213},[203,77630,77631],{"class":272},"  \u002F\u002F[3,4]\n",[203,77633,77634,77636,77638,77640,77642,77644,77646,77648],{"class":205,"line":1290},[203,77635,77590],{"class":213},[203,77637,58305],{"class":2052},[203,77639,3940],{"class":213},[203,77641,291],{"class":262},[203,77643,4990],{"class":213},[203,77645,405],{"class":262},[203,77647,4305],{"class":213},[203,77649,77650],{"class":272},"  \u002F\u002F3\n",[194,77652,77654],{"className":77553,"code":77653,"language":77555,"meta":27,"style":27},"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",[200,77655,77656,77683,77694,77705],{"__ignoreMap":27},[203,77657,77658,77660,77663,77665,77667,77669,77671,77673,77675,77677,77679,77681],{"class":205,"line":206},[203,77659,6882],{"class":209},[203,77661,77662],{"class":213}," [a, b, c] ",[203,77664,259],{"class":209},[203,77666,52284],{"class":213},[203,77668,431],{"class":262},[203,77670,12525],{"class":213},[203,77672,291],{"class":262},[203,77674,77576],{"class":213},[203,77676,285],{"class":262},[203,77678,12525],{"class":213},[203,77680,507],{"class":262},[203,77682,77585],{"class":213},[203,77684,77685,77687,77689,77692],{"class":205,"line":124},[203,77686,77590],{"class":213},[203,77688,58305],{"class":2052},[203,77690,77691],{"class":213},"(a)",[203,77693,77601],{"class":272},[203,77695,77696,77698,77700,77703],{"class":205,"line":1269},[203,77697,77590],{"class":213},[203,77699,58305],{"class":2052},[203,77701,77702],{"class":213},"(b)",[203,77704,77616],{"class":272},[203,77706,77707,77709,77711,77714],{"class":205,"line":1284},[203,77708,77590],{"class":213},[203,77710,58305],{"class":2052},[203,77712,77713],{"class":213},"(c)",[203,77715,77631],{"class":272},[194,77717,77719],{"className":77553,"code":77718,"language":77555,"meta":27,"style":27},"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",[200,77720,77721,77748,77758,77768,77778],{"__ignoreMap":27},[203,77722,77723,77725,77728,77730,77732,77734,77736,77738,77740,77742,77744,77746],{"class":205,"line":206},[203,77724,6882],{"class":209},[203,77726,77727],{"class":213}," [a, b, [c, d]] ",[203,77729,259],{"class":209},[203,77731,52284],{"class":213},[203,77733,431],{"class":262},[203,77735,12525],{"class":213},[203,77737,291],{"class":262},[203,77739,77576],{"class":213},[203,77741,285],{"class":262},[203,77743,12525],{"class":213},[203,77745,507],{"class":262},[203,77747,77585],{"class":213},[203,77749,77750,77752,77754,77756],{"class":205,"line":124},[203,77751,77590],{"class":213},[203,77753,58305],{"class":2052},[203,77755,77691],{"class":213},[203,77757,77601],{"class":272},[203,77759,77760,77762,77764,77766],{"class":205,"line":1269},[203,77761,77590],{"class":213},[203,77763,58305],{"class":2052},[203,77765,77702],{"class":213},[203,77767,77616],{"class":272},[203,77769,77770,77772,77774,77776],{"class":205,"line":1284},[203,77771,77590],{"class":213},[203,77773,58305],{"class":2052},[203,77775,77713],{"class":213},[203,77777,77650],{"class":272},[203,77779,77780,77782,77784,77787],{"class":205,"line":1290},[203,77781,77590],{"class":213},[203,77783,58305],{"class":2052},[203,77785,77786],{"class":213},"(d)",[203,77788,77789],{"class":272},"  \u002F\u002F4\n",[174,77791,77793],{"id":77792},"_462-对象解构","4.6.2 对象解构",[19,77795,77796],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,77798,77799],{},"用的非常非常多！！！！！！",[22088,77801,77803],{"id":77802},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,77805,77806],{},"基本语法：",[157,77808,77809,77812,77815,77818],{},[160,77810,77811],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[160,77813,77814],{},"对象属性的值将被赋值给与属性名相同的变量",[160,77816,77817],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[160,77819,77820],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[194,77822,77824],{"className":50691,"code":77823,"language":50693,"meta":27,"style":27},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[200,77825,77826,77831,77836,77841,77845],{"__ignoreMap":27},[203,77827,77828],{"class":205,"line":206},[203,77829,77830],{"class":213},"const obj = {\n",[203,77832,77833],{"class":205,"line":124},[203,77834,77835],{"class":213},"   uname: 'pink老师',\n",[203,77837,77838],{"class":205,"line":1269},[203,77839,77840],{"class":213},"   age: 18,\n",[203,77842,77843],{"class":205,"line":1284},[203,77844,1654],{"class":213},[203,77846,77847],{"class":205,"line":1290},[203,77848,77849],{"class":213},"const { uname, age } = obj\n",[19,77851,77852],{},"上方代码这样写等价于：",[19,77854,77855],{},"const uname等价于obj.uname",[19,77857,77858],{},"变量名可以重新改名：",[19,77860,77861],{},"const uname='red老师'",[19,77863,77864],{},"const user={",[19,77866,77867],{},"  uname:'pink老师',",[19,77869,77870],{},"  age:18",[19,77872,1160],{},[19,77874,77875],{},"const {uname,age}=user",[19,77877,77878],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,77880,77881],{},"const {旧变量名：新变量名}=对象",[19,77883,77884],{},"const {uname:username,age}=user",[22088,77886,77888],{"id":77887},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,77890,77891],{},[25,77892],{"alt":27,"src":77893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22088,77895,77897],{"id":77896},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,77899,77900],{},[25,77901],{"alt":27,"src":77902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[194,77904,77906],{"className":53125,"code":77905,"language":53127,"meta":27,"style":27},"  \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",[200,77907,77908,77916,77921,77926,77931,77936,77941,77946,77951,77956,77960,77965,77970],{"__ignoreMap":27},[203,77909,77910,77912,77914],{"class":205,"line":206},[203,77911,52202],{"class":213},[203,77913,51871],{"class":51358},[203,77915,51365],{"class":213},[203,77917,77918],{"class":205,"line":124},[203,77919,77920],{"class":213},"    const pig = {\n",[203,77922,77923],{"class":205,"line":1269},[203,77924,77925],{"class":213},"      name: '佩奇',\n",[203,77927,77928],{"class":205,"line":1284},[203,77929,77930],{"class":213},"      family: {\n",[203,77932,77933],{"class":205,"line":1290},[203,77934,77935],{"class":213},"        mother: '猪妈妈',\n",[203,77937,77938],{"class":205,"line":1304},[203,77939,77940],{"class":213},"        father: '猪爸爸',\n",[203,77942,77943],{"class":205,"line":1310},[203,77944,77945],{"class":213},"        sister: '乔治'\n",[203,77947,77948],{"class":205,"line":1401},[203,77949,77950],{"class":213},"      },\n",[203,77952,77953],{"class":205,"line":1407},[203,77954,77955],{"class":213},"      age: 6\n",[203,77957,77958],{"class":205,"line":1419},[203,77959,2276],{"class":213},[203,77961,77962],{"class":205,"line":1701},[203,77963,77964],{"class":213},"    \u002F\u002F 多级对象解构\n",[203,77966,77967],{"class":205,"line":1706},[203,77968,77969],{"class":213},"    const { name, family: { mother, father, sister }, age } = pig\n",[203,77971,77972,77974,77976],{"class":205,"line":1712},[203,77973,52475],{"class":213},[203,77975,51871],{"class":51358},[203,77977,51365],{"class":213},[19,77979,77980],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[194,77982,77985],{"className":77983,"code":77984,"language":76505,"meta":27,"style":27},"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",[200,77986,77987,77992,78003,78015,78027,78036,78040,78051,78063,78073,78078,78082,78092,78103,78112,78116,78120,78131,78142,78151,78155,78160],{"__ignoreMap":27},[203,77988,77989],{"class":205,"line":206},[203,77990,77991],{"class":272},"    \u002F\u002F 这是后台传递过来的数据\n",[203,77993,77994,77996,77999,78001],{"class":205,"line":124},[203,77995,11311],{"class":209},[203,77997,77998],{"class":213}," msg ",[203,78000,259],{"class":209},[203,78002,15662],{"class":213},[203,78004,78005,78008,78010,78013],{"class":205,"line":1269},[203,78006,78007],{"class":318},"      \"code\"",[203,78009,1073],{"class":209},[203,78011,78012],{"class":262}," 200",[203,78014,31524],{"class":213},[203,78016,78017,78020,78022,78025],{"class":205,"line":1284},[203,78018,78019],{"class":318},"      \"msg\"",[203,78021,1073],{"class":209},[203,78023,78024],{"class":318}," \"获取新闻列表成功\"",[203,78026,31524],{"class":213},[203,78028,78029,78032,78034],{"class":205,"line":1290},[203,78030,78031],{"class":318},"      \"data\"",[203,78033,1073],{"class":209},[203,78035,55505],{"class":213},[203,78037,78038],{"class":205,"line":1304},[203,78039,2599],{"class":213},[203,78041,78042,78045,78047,78049],{"class":205,"line":1310},[203,78043,78044],{"class":318},"          \"id\"",[203,78046,1073],{"class":209},[203,78048,25176],{"class":262},[203,78050,31524],{"class":213},[203,78052,78053,78056,78058,78061],{"class":205,"line":1401},[203,78054,78055],{"class":318},"          \"title\"",[203,78057,1073],{"class":209},[203,78059,78060],{"class":318}," \"5G商用自己，三大运用商收入下降\"",[203,78062,31524],{"class":213},[203,78064,78065,78068,78070],{"class":205,"line":1407},[203,78066,78067],{"class":318},"          \"count\"",[203,78069,1073],{"class":209},[203,78071,78072],{"class":262}," 58\n",[203,78074,78075],{"class":205,"line":1419},[203,78076,78077],{"class":213},"        },\n",[203,78079,78080],{"class":205,"line":1701},[203,78081,2599],{"class":213},[203,78083,78084,78086,78088,78090],{"class":205,"line":1706},[203,78085,78044],{"class":318},[203,78087,1073],{"class":209},[203,78089,14845],{"class":262},[203,78091,31524],{"class":213},[203,78093,78094,78096,78098,78101],{"class":205,"line":1712},[203,78095,78055],{"class":318},[203,78097,1073],{"class":209},[203,78099,78100],{"class":318}," \"国际媒体头条速览\"",[203,78102,31524],{"class":213},[203,78104,78105,78107,78109],{"class":205,"line":1717},[203,78106,78067],{"class":318},[203,78108,1073],{"class":209},[203,78110,78111],{"class":262}," 56\n",[203,78113,78114],{"class":205,"line":1731},[203,78115,78077],{"class":213},[203,78117,78118],{"class":205,"line":1736},[203,78119,2599],{"class":213},[203,78121,78122,78124,78126,78129],{"class":205,"line":1742},[203,78123,78044],{"class":318},[203,78125,1073],{"class":209},[203,78127,78128],{"class":262}," 3",[203,78130,31524],{"class":213},[203,78132,78133,78135,78137,78140],{"class":205,"line":1763},[203,78134,78055],{"class":318},[203,78136,1073],{"class":209},[203,78138,78139],{"class":318}," \"乌克兰和俄罗斯持续冲突\"",[203,78141,31524],{"class":213},[203,78143,78144,78146,78148],{"class":205,"line":1768},[203,78145,78067],{"class":318},[203,78147,1073],{"class":209},[203,78149,78150],{"class":262}," 1669\n",[203,78152,78153],{"class":205,"line":1782},[203,78154,78077],{"class":213},[203,78156,78157],{"class":205,"line":1787},[203,78158,78159],{"class":213},"      ]\n",[203,78161,78162],{"class":205,"line":1816},[203,78163,2276],{"class":213},[19,78165,78166],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78168,78169],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78171,78172],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,78174,78175],{},"function({data}) {",[19,78177,78178],{},"console.log(data)",[19,78180,1160],{},[19,78182,78183],{},"render(msg)",[19,78185,78186],{},"实参传递给形参的时候解构了",[19,78188,78189],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78191,78192],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78194,78195],{},"function render({data:mydata}) {",[19,78197,78198],{},"  console.log(data)",[19,78200,1160],{},[174,78202,78204],{"id":78203},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78206,78207],{},"有两种情况：一个是数组结构，一个是立即执行函数",[157,78209,78210],{},[160,78211,78212],{},"如果对一个数组进行遍历，有两种方式：",[19,78214,78215],{},"①法1",[19,78217,78218],{},"const arr=[1,2,3]",[19,78220,78221],{},"arr.map(function(item,index) {",[19,78223,78224],{},"  console.log(item)",[19,78226,52522],{},[19,78228,78229],{},[25,78230],{"alt":27,"src":78231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78233,78234],{},"②法2",[19,78236,78237],{},"const str='pink'",[19,78239,78240],{},"[1,2,3].map(function(item,index) {",[19,78242,78243],{},"console.log(item)",[19,78245,52522],{},[19,78247,78248],{},[25,78249],{"alt":27,"src":78250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78252,78253],{},"此时会报错",[19,78255,78256],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78258,78243],{},[19,78260,52522],{},[19,78262,78263],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78265,78267],{"id":78266},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78269,78270],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78272,78273],{},"可以理解为加强版的for循环",[19,78275,78276],{},[25,78277],{"alt":27,"src":78278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78280,78281],{},"里边不写return，不返回数组，只遍历不返回",[19,78283,78284],{},"map是返回数组",[19,78286,78287],{},"forEach主要用于遍历数组对象",[194,78289,78291],{"className":53125,"code":78290,"language":53127,"meta":27,"style":27},"  \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",[200,78292,78293,78301,78306,78311,78316,78321,78325,78330],{"__ignoreMap":27},[203,78294,78295,78297,78299],{"class":205,"line":206},[203,78296,52202],{"class":213},[203,78298,51871],{"class":51358},[203,78300,51365],{"class":213},[203,78302,78303],{"class":205,"line":124},[203,78304,78305],{"class":213},"    const arr = ['red', 'green', 'pink']\n",[203,78307,78308],{"class":205,"line":1269},[203,78309,78310],{"class":213},"    const result = arr.forEach(function (item, index) {\n",[203,78312,78313],{"class":205,"line":1284},[203,78314,78315],{"class":213},"      console.log(item)\n",[203,78317,78318],{"class":205,"line":1290},[203,78319,78320],{"class":213},"      console.log(index)\n",[203,78322,78323],{"class":205,"line":1304},[203,78324,33519],{"class":213},[203,78326,78327],{"class":205,"line":1310},[203,78328,78329],{"class":213},"    console.log(result)\n",[203,78331,78332,78334,78336],{"class":205,"line":1401},[203,78333,52475],{"class":213},[203,78335,51871],{"class":51358},[203,78337,51365],{"class":213},[19,78339,78340],{},[25,78341],{"alt":27,"src":78342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78344,78346],{"id":78345},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78348,78349],{},[25,78350],{"alt":27,"src":78351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78353,78354],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[194,78356,78358],{"className":53125,"code":78357,"language":53127,"meta":27,"style":27},"\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",[200,78359,78360,78368,78376,78381,78386,78390,78394,78399,78403,78408,78416],{"__ignoreMap":27},[203,78361,78362,78364,78366],{"class":205,"line":206},[203,78363,1124],{"class":213},[203,78365,51858],{"class":51358},[203,78367,51365],{"class":213},[203,78369,78370,78372,78374],{"class":205,"line":124},[203,78371,52202],{"class":213},[203,78373,51871],{"class":51358},[203,78375,51365],{"class":213},[203,78377,78378],{"class":205,"line":1269},[203,78379,78380],{"class":213},"    const arr = [10, 20, 30]\n",[203,78382,78383],{"class":205,"line":1284},[203,78384,78385],{"class":213},"    const newArr = arr.filter(function (item, index) {\n",[203,78387,78388],{"class":205,"line":1290},[203,78389,78315],{"class":213},[203,78391,78392],{"class":205,"line":1304},[203,78393,78320],{"class":213},[203,78395,78396],{"class":205,"line":1310},[203,78397,78398],{"class":213},"      return item >= 20\n",[203,78400,78401],{"class":205,"line":1401},[203,78402,33519],{"class":213},[203,78404,78405],{"class":205,"line":1407},[203,78406,78407],{"class":213},"    console.log(newArr)\n",[203,78409,78410,78412,78414],{"class":205,"line":1419},[203,78411,52475],{"class":213},[203,78413,51871],{"class":51358},[203,78415,51365],{"class":213},[203,78417,78418,78420,78422],{"class":205,"line":1701},[203,78419,51843],{"class":213},[203,78421,51858],{"class":51358},[203,78423,51365],{"class":213},[19,78425,78426],{},"这个也可以写成箭头函数：",[194,78428,78430],{"className":50691,"code":78429,"language":50693,"meta":27,"style":27},"const newArr = arr.filter(item => item >= 20)\n",[200,78431,78432],{"__ignoreMap":27},[203,78433,78434],{"class":205,"line":206},[203,78435,78429],{"class":213},[14,78437,78439],{"id":78438},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,78441,78442],{},[25,78443],{"alt":27,"src":78444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,78446,78447],{},"步骤：",[19,78449,78450],{},"①：渲染页面模块",[1221,78452,78453,78456],{},[160,78454,78455],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[160,78457,78458],{},"用forEach+字符串的形式",[19,78460,78461],{},"②：点击不同需求，显示不同页面内容",[1221,78463,78464,78467,78470,78473,78476],{},[160,78465,78466],{},"点击采取事件委托方式 .filter",[160,78468,78469],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[160,78471,78472],{},"筛选条件是根据点击的 data-index 来判断",[160,78474,78475],{},"可以使用对象解构，把事件对象解构",[160,78477,78478],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[194,78480,78482],{"className":50691,"code":78481,"language":50693,"meta":27,"style":27},"\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",[200,78483,78484,78494,78508,78512,78520,78534,78554,78566,78574,78580,78590,78600,78610,78614,78618,78624,78637,78649,78659,78671,78675,78679,78686,78699,78711,78728,78746,78759,78763,78767,78779,78789,78793,78797,78804,78845,78872,78882,78886,78890,78898,78910,78914,78918,78926,78938,78950,78961,78965,78969,78978,78990,79001,79005,79009,79018,79030,79042,79046,79050,79057,79067,79079,79091,79106,79110,79114,79122,79138,79148,79158,79168,79180,79184,79188,79198,79209,79219,79223,79231,79239,79243,79251,79266,79292,79317,79342,79361,79369,79383,79388,79393,79398,79403,79408,79416,79424,79429,79440,79445,79455,79465,79475,79485,79489,79493,79502,79511,79520,79529,79533,79537,79546,79555,79564,79573,79577,79581,79590,79599,79608,79617,79621,79625,79634,79643,79652,79661,79665,79669,79678,79687,79696,79705,79709,79713,79722,79731,79740,79749,79753,79757,79766,79775,79783,79792,79796,79800,79804,79809,79821,79826,79838,79842,79859,79887,79896,79901,79911,79921,79930,79935,79940,79944,79949,79966,79970,79975,79983,79988,80015,80020,80040,80045,80057,80062,80067,80072,80083,80097,80134,80152,80185,80202,80226,80230,80235,80241,80245,80249,80253,80261,80269,80273],{"__ignoreMap":27},[203,78485,78486,78488,78490,78492],{"class":205,"line":206},[203,78487,51355],{"class":213},[203,78489,51359],{"class":51358},[203,78491,51362],{"class":2052},[203,78493,51365],{"class":213},[203,78495,78496,78498,78500,78502,78504,78506],{"class":205,"line":124},[203,78497,1124],{"class":213},[203,78499,50693],{"class":51358},[203,78501,51374],{"class":2052},[203,78503,259],{"class":213},[203,78505,51379],{"class":318},[203,78507,51365],{"class":213},[203,78509,78510],{"class":205,"line":1269},[203,78511,2489],{"emptyLinePlaceholder":131},[203,78513,78514,78516,78518],{"class":205,"line":1284},[203,78515,1124],{"class":213},[203,78517,51392],{"class":51358},[203,78519,51365],{"class":213},[203,78521,78522,78524,78526,78528,78530,78532],{"class":205,"line":1290},[203,78523,52202],{"class":213},[203,78525,51402],{"class":51358},[203,78527,51405],{"class":2052},[203,78529,259],{"class":213},[203,78531,51410],{"class":318},[203,78533,51365],{"class":213},[203,78535,78536,78538,78540,78542,78544,78546,78548,78550,78552],{"class":205,"line":1304},[203,78537,52202],{"class":213},[203,78539,51402],{"class":51358},[203,78541,15010],{"class":2052},[203,78543,259],{"class":213},[203,78545,51449],{"class":318},[203,78547,51429],{"class":2052},[203,78549,259],{"class":213},[203,78551,51456],{"class":318},[203,78553,51365],{"class":213},[203,78555,78556,78558,78560,78562,78564],{"class":205,"line":1310},[203,78557,52202],{"class":213},[203,78559,51465],{"class":51358},[203,78561,51468],{"class":213},[203,78563,51465],{"class":51358},[203,78565,51365],{"class":213},[203,78567,78568,78570,78572],{"class":205,"line":1401},[203,78569,52202],{"class":213},[203,78571,5216],{"class":51358},[203,78573,51365],{"class":213},[203,78575,78576,78578],{"class":205,"line":1407},[203,78577,6493],{"class":51358},[203,78579,15662],{"class":213},[203,78581,78582,78584,78586,78588],{"class":205,"line":1419},[203,78583,54753],{"class":262},[203,78585,51495],{"class":213},[203,78587,405],{"class":262},[203,78589,1380],{"class":213},[203,78591,78592,78594,78596,78598],{"class":205,"line":1701},[203,78593,54764],{"class":262},[203,78595,51495],{"class":213},[203,78597,405],{"class":262},[203,78599,1380],{"class":213},[203,78601,78602,78604,78606,78608],{"class":205,"line":1706},[203,78603,72654],{"class":262},[203,78605,51495],{"class":213},[203,78607,60563],{"class":262},[203,78609,1380],{"class":213},[203,78611,78612],{"class":205,"line":1712},[203,78613,2276],{"class":213},[203,78615,78616],{"class":205,"line":1717},[203,78617,2489],{"emptyLinePlaceholder":131},[203,78619,78620,78622],{"class":205,"line":1731},[203,78621,62181],{"class":2052},[203,78623,15662],{"class":213},[203,78625,78626,78628,78630,78633,78635],{"class":205,"line":1736},[203,78627,54829],{"class":262},[203,78629,51495],{"class":213},[203,78631,78632],{"class":262},"990",[203,78634,51550],{"class":209},[203,78636,1380],{"class":213},[203,78638,78639,78641,78643,78645,78647],{"class":205,"line":1742},[203,78640,54764],{"class":262},[203,78642,51495],{"class":213},[203,78644,405],{"class":262},[203,78646,51614],{"class":262},[203,78648,1380],{"class":213},[203,78650,78651,78653,78655,78657],{"class":205,"line":1763},[203,78652,55067],{"class":262},[203,78654,51495],{"class":213},[203,78656,51535],{"class":262},[203,78658,1380],{"class":213},[203,78660,78661,78664,78666,78669],{"class":205,"line":1768},[203,78662,78663],{"class":262},"      flex-wrap",[203,78665,51495],{"class":213},[203,78667,78668],{"class":262},"wrap",[203,78670,1380],{"class":213},[203,78672,78673],{"class":205,"line":1782},[203,78674,2276],{"class":213},[203,78676,78677],{"class":205,"line":1787},[203,78678,2489],{"emptyLinePlaceholder":131},[203,78680,78681,78684],{"class":205,"line":1816},[203,78682,78683],{"class":2052},"    .item",[203,78685,15662],{"class":213},[203,78687,78688,78690,78692,78695,78697],{"class":205,"line":1821},[203,78689,54829],{"class":262},[203,78691,51495],{"class":213},[203,78693,78694],{"class":262},"240",[203,78696,51550],{"class":209},[203,78698,1380],{"class":213},[203,78700,78701,78703,78705,78707,78709],{"class":205,"line":1838},[203,78702,62058],{"class":262},[203,78704,51495],{"class":213},[203,78706,660],{"class":262},[203,78708,51550],{"class":209},[203,78710,1380],{"class":213},[203,78712,78713,78715,78717,78719,78721,78724,78726],{"class":205,"line":1843},[203,78714,54753],{"class":262},[203,78716,51495],{"class":213},[203,78718,914],{"class":262},[203,78720,51550],{"class":209},[203,78722,78723],{"class":262}," 30",[203,78725,51550],{"class":209},[203,78727,1380],{"class":213},[203,78729,78730,78732,78734,78736,78739,78742,78744],{"class":205,"line":1848},[203,78731,61918],{"class":262},[203,78733,51495],{"class":213},[203,78735,28179],{"class":262},[203,78737,78738],{"class":262}," ease",[203,78740,78741],{"class":262}," .5",[203,78743,909],{"class":209},[203,78745,1380],{"class":213},[203,78747,78748,78751,78753,78755,78757],{"class":205,"line":1853},[203,78749,78750],{"class":262},"      margin-bottom",[203,78752,51495],{"class":213},[203,78754,914],{"class":262},[203,78756,51550],{"class":209},[203,78758,1380],{"class":213},[203,78760,78761],{"class":205,"line":1867},[203,78762,2276],{"class":213},[203,78764,78765],{"class":205,"line":1872},[203,78766,2489],{"emptyLinePlaceholder":131},[203,78768,78769,78772,78774,78777],{"class":205,"line":2666},[203,78770,78771],{"class":2052},"    .item:nth-child",[203,78773,214],{"class":213},[203,78775,78776],{"class":262},"4n",[203,78778,12532],{"class":213},[203,78780,78781,78783,78785,78787],{"class":205,"line":2680},[203,78782,62058],{"class":262},[203,78784,51495],{"class":213},[203,78786,405],{"class":262},[203,78788,1380],{"class":213},[203,78790,78791],{"class":205,"line":2688},[203,78792,2276],{"class":213},[203,78794,78795],{"class":205,"line":2693},[203,78796,2489],{"emptyLinePlaceholder":131},[203,78798,78799,78802],{"class":205,"line":2699},[203,78800,78801],{"class":2052},"    .item:hover",[203,78803,15662],{"class":213},[203,78805,78806,78809,78811,78813,78815,78817,78819,78821,78823,78826,78828,78830,78832,78834,78836,78838,78840,78843],{"class":205,"line":2705},[203,78807,78808],{"class":262},"      box-shadow",[203,78810,51495],{"class":213},[203,78812,405],{"class":262},[203,78814,51550],{"class":209},[203,78816,4182],{"class":262},[203,78818,51550],{"class":209},[203,78820,2237],{"class":262},[203,78822,51550],{"class":209},[203,78824,78825],{"class":262}," rgba",[203,78827,214],{"class":213},[203,78829,405],{"class":262},[203,78831,12525],{"class":213},[203,78833,405],{"class":262},[203,78835,12525],{"class":213},[203,78837,405],{"class":262},[203,78839,12525],{"class":213},[203,78841,78842],{"class":262},".2",[203,78844,2808],{"class":213},[203,78846,78847,78850,78852,78855,78857,78859,78861,78864,78866,78868,78870],{"class":205,"line":2710},[203,78848,78849],{"class":262},"      transform",[203,78851,51495],{"class":213},[203,78853,78854],{"class":262},"translate3d",[203,78856,214],{"class":213},[203,78858,405],{"class":262},[203,78860,12525],{"class":213},[203,78862,78863],{"class":262},"-4",[203,78865,51550],{"class":209},[203,78867,12525],{"class":213},[203,78869,405],{"class":262},[203,78871,2808],{"class":213},[203,78873,78874,78876,78878,78880],{"class":205,"line":8038},[203,78875,62083],{"class":262},[203,78877,51495],{"class":213},[203,78879,62088],{"class":262},[203,78881,1380],{"class":213},[203,78883,78884],{"class":205,"line":8062},[203,78885,2276],{"class":213},[203,78887,78888],{"class":205,"line":8067},[203,78889,2489],{"emptyLinePlaceholder":131},[203,78891,78892,78894,78896],{"class":205,"line":8073},[203,78893,78683],{"class":2052},[203,78895,55673],{"class":51358},[203,78897,15662],{"class":213},[203,78899,78900,78902,78904,78906,78908],{"class":205,"line":8100},[203,78901,54829],{"class":262},[203,78903,51495],{"class":213},[203,78905,525],{"class":262},[203,78907,542],{"class":209},[203,78909,1380],{"class":213},[203,78911,78912],{"class":205,"line":8105},[203,78913,2276],{"class":213},[203,78915,78916],{"class":205,"line":8111},[203,78917,2489],{"emptyLinePlaceholder":131},[203,78919,78920,78922,78924],{"class":205,"line":8123},[203,78921,78683],{"class":2052},[203,78923,62362],{"class":2052},[203,78925,15662],{"class":213},[203,78927,78928,78930,78932,78934,78936],{"class":205,"line":8135},[203,78929,54980],{"class":262},[203,78931,51495],{"class":213},[203,78933,864],{"class":262},[203,78935,51550],{"class":209},[203,78937,1380],{"class":213},[203,78939,78940,78942,78944,78946,78948],{"class":205,"line":8147},[203,78941,78750],{"class":262},[203,78943,51495],{"class":213},[203,78945,660],{"class":262},[203,78947,51550],{"class":209},[203,78949,1380],{"class":213},[203,78951,78952,78954,78956,78959],{"class":205,"line":9806},[203,78953,57474],{"class":262},[203,78955,51495],{"class":213},[203,78957,78958],{"class":262},"#666",[203,78960,1380],{"class":213},[203,78962,78963],{"class":205,"line":9831},[203,78964,2276],{"class":213},[203,78966,78967],{"class":205,"line":9854},[203,78968,2489],{"emptyLinePlaceholder":131},[203,78970,78971,78973,78976],{"class":205,"line":9878},[203,78972,78683],{"class":2052},[203,78974,78975],{"class":2052}," .price",[203,78977,15662],{"class":213},[203,78979,78980,78982,78984,78986,78988],{"class":205,"line":9883},[203,78981,54980],{"class":262},[203,78983,51495],{"class":213},[203,78985,964],{"class":262},[203,78987,51550],{"class":209},[203,78989,1380],{"class":213},[203,78991,78992,78994,78996,78999],{"class":205,"line":9888},[203,78993,57474],{"class":262},[203,78995,51495],{"class":213},[203,78997,78998],{"class":262},"firebrick",[203,79000,1380],{"class":213},[203,79002,79003],{"class":205,"line":9893},[203,79004,2276],{"class":213},[203,79006,79007],{"class":205,"line":9902},[203,79008,2489],{"emptyLinePlaceholder":131},[203,79010,79011,79013,79016],{"class":205,"line":9907},[203,79012,78683],{"class":2052},[203,79014,79015],{"class":2052}," .price::before",[203,79017,15662],{"class":213},[203,79019,79020,79023,79025,79028],{"class":205,"line":9913},[203,79021,79022],{"class":262},"      content",[203,79024,51495],{"class":213},[203,79026,79027],{"class":318},"'￥'",[203,79029,1380],{"class":213},[203,79031,79032,79034,79036,79038,79040],{"class":205,"line":9934},[203,79033,54980],{"class":262},[203,79035,51495],{"class":213},[203,79037,763],{"class":262},[203,79039,51550],{"class":209},[203,79041,1380],{"class":213},[203,79043,79044],{"class":205,"line":9940},[203,79045,2276],{"class":213},[203,79047,79048],{"class":205,"line":9954},[203,79049,2489],{"emptyLinePlaceholder":131},[203,79051,79052,79055],{"class":205,"line":9960},[203,79053,79054],{"class":2052},"    .filter",[203,79056,15662],{"class":213},[203,79058,79059,79061,79063,79065],{"class":205,"line":9987},[203,79060,55067],{"class":262},[203,79062,51495],{"class":213},[203,79064,51535],{"class":262},[203,79066,1380],{"class":213},[203,79068,79069,79071,79073,79075,79077],{"class":205,"line":9996},[203,79070,54829],{"class":262},[203,79072,51495],{"class":213},[203,79074,78632],{"class":262},[203,79076,51550],{"class":209},[203,79078,1380],{"class":213},[203,79080,79081,79083,79085,79087,79089],{"class":205,"line":10002},[203,79082,54764],{"class":262},[203,79084,51495],{"class":213},[203,79086,405],{"class":262},[203,79088,51614],{"class":262},[203,79090,1380],{"class":213},[203,79092,79093,79095,79097,79099,79101,79103],{"class":205,"line":10010},[203,79094,54753],{"class":262},[203,79096,51495],{"class":213},[203,79098,870],{"class":262},[203,79100,51550],{"class":209},[203,79102,78723],{"class":262},[203,79104,79105],{"class":209},"px\n",[203,79107,79108],{"class":205,"line":10015},[203,79109,2276],{"class":213},[203,79111,79112],{"class":205,"line":16694},[203,79113,2489],{"emptyLinePlaceholder":131},[203,79115,79116,79118,79120],{"class":205,"line":16700},[203,79117,79054],{"class":2052},[203,79119,1488],{"class":51358},[203,79121,15662],{"class":213},[203,79123,79124,79126,79128,79130,79132,79134,79136],{"class":205,"line":16723},[203,79125,54753],{"class":262},[203,79127,51495],{"class":213},[203,79129,660],{"class":262},[203,79131,51550],{"class":209},[203,79133,9040],{"class":262},[203,79135,51550],{"class":209},[203,79137,1380],{"class":213},[203,79139,79140,79142,79144,79146],{"class":205,"line":16729},[203,79141,61779],{"class":262},[203,79143,51495],{"class":213},[203,79145,61876],{"class":262},[203,79147,1380],{"class":213},[203,79149,79150,79152,79154,79156],{"class":205,"line":16752},[203,79151,57474],{"class":262},[203,79153,51495],{"class":213},[203,79155,78958],{"class":262},[203,79157,1380],{"class":213},[203,79159,79160,79162,79164,79166],{"class":205,"line":16766},[203,79161,64028],{"class":262},[203,79163,51495],{"class":213},[203,79165,54795],{"class":262},[203,79167,1380],{"class":213},[203,79169,79170,79172,79174,79176,79178],{"class":205,"line":16786},[203,79171,61808],{"class":262},[203,79173,51495],{"class":213},[203,79175,914],{"class":262},[203,79177,51550],{"class":209},[203,79179,1380],{"class":213},[203,79181,79182],{"class":205,"line":16792},[203,79183,2276],{"class":213},[203,79185,79186],{"class":205,"line":16803},[203,79187,2489],{"emptyLinePlaceholder":131},[203,79189,79190,79192,79194,79196],{"class":205,"line":16826},[203,79191,79054],{"class":2052},[203,79193,1488],{"class":51358},[203,79195,61958],{"class":2052},[203,79197,15662],{"class":213},[203,79199,79200,79202,79204,79207],{"class":205,"line":16848},[203,79201,54942],{"class":262},[203,79203,51495],{"class":213},[203,79205,79206],{"class":262},"#05943c",[203,79208,1380],{"class":213},[203,79210,79211,79213,79215,79217],{"class":205,"line":16853},[203,79212,57474],{"class":262},[203,79214,51495],{"class":213},[203,79216,60900],{"class":262},[203,79218,1380],{"class":213},[203,79220,79221],{"class":205,"line":16859},[203,79222,2276],{"class":213},[203,79224,79225,79227,79229],{"class":205,"line":16873},[203,79226,52475],{"class":213},[203,79228,5216],{"class":51358},[203,79230,51365],{"class":213},[203,79232,79233,79235,79237],{"class":205,"line":16886},[203,79234,51843],{"class":213},[203,79236,51392],{"class":51358},[203,79238,51365],{"class":213},[203,79240,79241],{"class":205,"line":16891},[203,79242,2489],{"emptyLinePlaceholder":131},[203,79244,79245,79247,79249],{"class":205,"line":16905},[203,79246,1124],{"class":213},[203,79248,51858],{"class":51358},[203,79250,51365],{"class":213},[203,79252,79253,79255,79257,79259,79261,79264],{"class":205,"line":16910},[203,79254,52202],{"class":213},[203,79256,51669],{"class":51358},[203,79258,53544],{"class":2052},[203,79260,259],{"class":213},[203,79262,79263],{"class":318},"\"filter\"",[203,79265,51365],{"class":213},[203,79267,79268,79270,79272,79274,79276,79278,79281,79283,79285,79288,79290],{"class":205,"line":16916},[203,79269,51399],{"class":213},[203,79271,452],{"class":51358},[203,79273,61115],{"class":2052},[203,79275,259],{"class":213},[203,79277,61120],{"class":318},[203,79279,79280],{"class":2052}," data-index",[203,79282,259],{"class":213},[203,79284,3767],{"class":318},[203,79286,79287],{"class":213},">0-100元\u003C\u002F",[203,79289,452],{"class":51358},[203,79291,51365],{"class":213},[203,79293,79294,79296,79298,79300,79302,79304,79306,79308,79310,79313,79315],{"class":205,"line":16921},[203,79295,51399],{"class":213},[203,79297,452],{"class":51358},[203,79299,61115],{"class":2052},[203,79301,259],{"class":213},[203,79303,61120],{"class":318},[203,79305,79280],{"class":2052},[203,79307,259],{"class":213},[203,79309,3790],{"class":318},[203,79311,79312],{"class":213},">100-300元\u003C\u002F",[203,79314,452],{"class":51358},[203,79316,51365],{"class":213},[203,79318,79319,79321,79323,79325,79327,79329,79331,79333,79335,79338,79340],{"class":205,"line":16935},[203,79320,51399],{"class":213},[203,79322,452],{"class":51358},[203,79324,61115],{"class":2052},[203,79326,259],{"class":213},[203,79328,61120],{"class":318},[203,79330,79280],{"class":2052},[203,79332,259],{"class":213},[203,79334,3803],{"class":318},[203,79336,79337],{"class":213},">300元以上\u003C\u002F",[203,79339,452],{"class":51358},[203,79341,51365],{"class":213},[203,79343,79344,79346,79348,79350,79352,79354,79357,79359],{"class":205,"line":16940},[203,79345,51399],{"class":213},[203,79347,452],{"class":51358},[203,79349,61115],{"class":2052},[203,79351,259],{"class":213},[203,79353,61120],{"class":318},[203,79355,79356],{"class":213},">全部区间\u003C\u002F",[203,79358,452],{"class":51358},[203,79360,51365],{"class":213},[203,79362,79363,79365,79367],{"class":205,"line":16945},[203,79364,52475],{"class":213},[203,79366,51669],{"class":51358},[203,79368,51365],{"class":213},[203,79370,79371,79373,79375,79377,79379,79381],{"class":205,"line":16959},[203,79372,52202],{"class":213},[203,79374,51669],{"class":51358},[203,79376,53544],{"class":2052},[203,79378,259],{"class":213},[203,79380,62666],{"class":318},[203,79382,51365],{"class":213},[203,79384,79385],{"class":205,"line":16971},[203,79386,79387],{"class":272},"    \u003C!-- \u003Cdiv class=\"item\">\n",[203,79389,79390],{"class":205,"line":16976},[203,79391,79392],{"class":272},"      \u003Cimg src=\"\" alt=\"\">\n",[203,79394,79395],{"class":205,"line":16989},[203,79396,79397],{"class":272},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[203,79399,79400],{"class":205,"line":16994},[203,79401,79402],{"class":272},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[203,79404,79405],{"class":205,"line":16999},[203,79406,79407],{"class":272},"    \u003C\u002Fdiv> -->\n",[203,79409,79410,79412,79414],{"class":205,"line":17004},[203,79411,52475],{"class":213},[203,79413,51669],{"class":51358},[203,79415,51365],{"class":213},[203,79417,79418,79420,79422],{"class":205,"line":17017},[203,79419,52202],{"class":213},[203,79421,51871],{"class":51358},[203,79423,51365],{"class":213},[203,79425,79426],{"class":205,"line":17022},[203,79427,79428],{"class":272},"    \u002F\u002F 2. 初始化数据\n",[203,79430,79431,79433,79436,79438],{"class":205,"line":32691},[203,79432,11311],{"class":209},[203,79434,79435],{"class":262}," goodsList",[203,79437,13654],{"class":209},[203,79439,55505],{"class":213},[203,79441,79442],{"class":205,"line":32697},[203,79443,79444],{"class":213},"      {\n",[203,79446,79447,79450,79453],{"class":205,"line":32703},[203,79448,79449],{"class":213},"        id: ",[203,79451,79452],{"class":318},"'4001172'",[203,79454,31524],{"class":213},[203,79456,79457,79460,79463],{"class":205,"line":32709},[203,79458,79459],{"class":213},"        name: ",[203,79461,79462],{"class":318},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[203,79464,31524],{"class":213},[203,79466,79467,79470,79473],{"class":205,"line":32715},[203,79468,79469],{"class":213},"        price: ",[203,79471,79472],{"class":318},"'289.00'",[203,79474,31524],{"class":213},[203,79476,79477,79480,79483],{"class":205,"line":32726},[203,79478,79479],{"class":213},"        picture: ",[203,79481,79482],{"class":318},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[203,79484,31524],{"class":213},[203,79486,79487],{"class":205,"line":32732},[203,79488,77950],{"class":213},[203,79490,79491],{"class":205,"line":32752},[203,79492,79444],{"class":213},[203,79494,79495,79497,79500],{"class":205,"line":32758},[203,79496,79449],{"class":213},[203,79498,79499],{"class":318},"'4001594'",[203,79501,31524],{"class":213},[203,79503,79504,79506,79509],{"class":205,"line":32769},[203,79505,79459],{"class":213},[203,79507,79508],{"class":318},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[203,79510,31524],{"class":213},[203,79512,79513,79515,79518],{"class":205,"line":32775},[203,79514,79469],{"class":213},[203,79516,79517],{"class":318},"'288.00'",[203,79519,31524],{"class":213},[203,79521,79522,79524,79527],{"class":205,"line":32781},[203,79523,79479],{"class":213},[203,79525,79526],{"class":318},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[203,79528,31524],{"class":213},[203,79530,79531],{"class":205,"line":32787},[203,79532,77950],{"class":213},[203,79534,79535],{"class":205,"line":32793},[203,79536,79444],{"class":213},[203,79538,79539,79541,79544],{"class":205,"line":32799},[203,79540,79449],{"class":213},[203,79542,79543],{"class":318},"'4001009'",[203,79545,31524],{"class":213},[203,79547,79548,79550,79553],{"class":205,"line":32805},[203,79549,79459],{"class":213},[203,79551,79552],{"class":318},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[203,79554,31524],{"class":213},[203,79556,79557,79559,79562],{"class":205,"line":32811},[203,79558,79469],{"class":213},[203,79560,79561],{"class":318},"'109.00'",[203,79563,31524],{"class":213},[203,79565,79566,79568,79571],{"class":205,"line":32831},[203,79567,79479],{"class":213},[203,79569,79570],{"class":318},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[203,79572,31524],{"class":213},[203,79574,79575],{"class":205,"line":32837},[203,79576,77950],{"class":213},[203,79578,79579],{"class":205,"line":32853},[203,79580,79444],{"class":213},[203,79582,79583,79585,79588],{"class":205,"line":32859},[203,79584,79449],{"class":213},[203,79586,79587],{"class":318},"'4001874'",[203,79589,31524],{"class":213},[203,79591,79592,79594,79597],{"class":205,"line":32873},[203,79593,79459],{"class":213},[203,79595,79596],{"class":318},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[203,79598,31524],{"class":213},[203,79600,79601,79603,79606],{"class":205,"line":32879},[203,79602,79469],{"class":213},[203,79604,79605],{"class":318},"'488.00'",[203,79607,31524],{"class":213},[203,79609,79610,79612,79615],{"class":205,"line":32894},[203,79611,79479],{"class":213},[203,79613,79614],{"class":318},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[203,79616,31524],{"class":213},[203,79618,79619],{"class":205,"line":32900},[203,79620,77950],{"class":213},[203,79622,79623],{"class":205,"line":32909},[203,79624,79444],{"class":213},[203,79626,79627,79629,79632],{"class":205,"line":32915},[203,79628,79449],{"class":213},[203,79630,79631],{"class":318},"'4001649'",[203,79633,31524],{"class":213},[203,79635,79636,79638,79641],{"class":205,"line":32924},[203,79637,79459],{"class":213},[203,79639,79640],{"class":318},"'大师监制龙泉青瓷茶叶罐'",[203,79642,31524],{"class":213},[203,79644,79645,79647,79650],{"class":205,"line":32930},[203,79646,79469],{"class":213},[203,79648,79649],{"class":318},"'139.00'",[203,79651,31524],{"class":213},[203,79653,79654,79656,79659],{"class":205,"line":32936},[203,79655,79479],{"class":213},[203,79657,79658],{"class":318},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[203,79660,31524],{"class":213},[203,79662,79663],{"class":205,"line":32945},[203,79664,77950],{"class":213},[203,79666,79667],{"class":205,"line":32951},[203,79668,79444],{"class":213},[203,79670,79671,79673,79676],{"class":205,"line":32962},[203,79672,79449],{"class":213},[203,79674,79675],{"class":318},"'3997185'",[203,79677,31524],{"class":213},[203,79679,79680,79682,79685],{"class":205,"line":32968},[203,79681,79459],{"class":213},[203,79683,79684],{"class":318},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[203,79686,31524],{"class":213},[203,79688,79689,79691,79694],{"class":205,"line":32987},[203,79690,79469],{"class":213},[203,79692,79693],{"class":318},"'108.00'",[203,79695,31524],{"class":213},[203,79697,79698,79700,79703],{"class":205,"line":32993},[203,79699,79479],{"class":213},[203,79701,79702],{"class":318},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[203,79704,31524],{"class":213},[203,79706,79707],{"class":205,"line":33004},[203,79708,77950],{"class":213},[203,79710,79711],{"class":205,"line":33010},[203,79712,79444],{"class":213},[203,79714,79715,79717,79720],{"class":205,"line":33030},[203,79716,79449],{"class":213},[203,79718,79719],{"class":318},"'3997403'",[203,79721,31524],{"class":213},[203,79723,79724,79726,79729],{"class":205,"line":33046},[203,79725,79459],{"class":213},[203,79727,79728],{"class":318},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[203,79730,31524],{"class":213},[203,79732,79733,79735,79738],{"class":205,"line":33052},[203,79734,79469],{"class":213},[203,79736,79737],{"class":318},"'100.00'",[203,79739,31524],{"class":213},[203,79741,79742,79744,79747],{"class":205,"line":33066},[203,79743,79479],{"class":213},[203,79745,79746],{"class":318},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[203,79748,31524],{"class":213},[203,79750,79751],{"class":205,"line":33072},[203,79752,77950],{"class":213},[203,79754,79755],{"class":205,"line":33078},[203,79756,79444],{"class":213},[203,79758,79759,79761,79764],{"class":205,"line":33089},[203,79760,79449],{"class":213},[203,79762,79763],{"class":318},"'3998274'",[203,79765,31524],{"class":213},[203,79767,79768,79770,79773],{"class":205,"line":33095},[203,79769,79459],{"class":213},[203,79771,79772],{"class":318},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[203,79774,31524],{"class":213},[203,79776,79777,79779,79781],{"class":205,"line":33101},[203,79778,79469],{"class":213},[203,79780,79649],{"class":318},[203,79782,31524],{"class":213},[203,79784,79785,79787,79790],{"class":205,"line":33111},[203,79786,79479],{"class":213},[203,79788,79789],{"class":318},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[203,79791,31524],{"class":213},[203,79793,79794],{"class":205,"line":33117},[203,79795,77950],{"class":213},[203,79797,79798],{"class":205,"line":33128},[203,79799,53167],{"class":213},[203,79801,79802],{"class":205,"line":33134},[203,79803,2489],{"emptyLinePlaceholder":131},[203,79805,79806],{"class":205,"line":33144},[203,79807,79808],{"class":272},"    \u002F\u002F 1.渲染函数\n",[203,79810,79811,79813,79815,79817,79819],{"class":205,"line":33149},[203,79812,70142],{"class":209},[203,79814,70145],{"class":2052},[203,79816,214],{"class":213},[203,79818,3969],{"class":5306},[203,79820,12532],{"class":213},[203,79822,79823],{"class":205,"line":33155},[203,79824,79825],{"class":272},"      \u002F\u002F 声明空字符串\n",[203,79827,79828,79831,79834,79836],{"class":205,"line":33204},[203,79829,79830],{"class":209},"      let",[203,79832,79833],{"class":213}," str ",[203,79835,259],{"class":209},[203,79837,70162],{"class":318},[203,79839,79840],{"class":205,"line":33251},[203,79841,70167],{"class":272},[203,79843,79844,79846,79849,79851,79854,79857],{"class":205,"line":33256},[203,79845,58065],{"class":213},[203,79847,79848],{"class":2052},"forEach",[203,79850,214],{"class":213},[203,79852,79853],{"class":5306},"item",[203,79855,79856],{"class":209}," =>",[203,79858,15662],{"class":213},[203,79860,79861,79863,79866,79869,79871,79874,79876,79879,79882,79884],{"class":205,"line":33262},[203,79862,61328],{"class":209},[203,79864,79865],{"class":213}," { ",[203,79867,79868],{"class":262},"name",[203,79870,12525],{"class":213},[203,79872,79873],{"class":262},"price",[203,79875,12525],{"class":213},[203,79877,79878],{"class":262},"picture",[203,79880,79881],{"class":213}," } ",[203,79883,259],{"class":209},[203,79885,79886],{"class":213}," item\n",[203,79888,79889,79892,79894],{"class":205,"line":33281},[203,79890,79891],{"class":213},"        str ",[203,79893,9567],{"class":209},[203,79895,70226],{"class":318},[203,79897,79898],{"class":205,"line":33287},[203,79899,79900],{"class":318},"          \u003Cdiv class=\"item\">\n",[203,79902,79903,79906,79908],{"class":205,"line":33307},[203,79904,79905],{"class":318},"            \u003Cimg src=\"${",[203,79907,79878],{"class":213},[203,79909,79910],{"class":318},"}\" alt=\"\">\n",[203,79912,79913,79916,79918],{"class":205,"line":33313},[203,79914,79915],{"class":318},"            \u003Cp class=\"name\">${",[203,79917,79868],{"class":213},[203,79919,79920],{"class":318},"}\u003C\u002Fp>\n",[203,79922,79923,79926,79928],{"class":205,"line":33319},[203,79924,79925],{"class":318},"            \u003Cp class=\"price\">${",[203,79927,79873],{"class":213},[203,79929,79920],{"class":318},[203,79931,79932],{"class":205,"line":33329},[203,79933,79934],{"class":318},"          \u003C\u002Fdiv>\n",[203,79936,79937],{"class":205,"line":33334},[203,79938,79939],{"class":318},"        `\n",[203,79941,79942],{"class":205,"line":33340},[203,79943,64873],{"class":213},[203,79945,79946],{"class":205,"line":33356},[203,79947,79948],{"class":272},"      \u002F\u002F 追加给List\n",[203,79950,79951,79953,79955,79957,79960,79962,79964],{"class":205,"line":33401},[203,79952,55829],{"class":213},[203,79954,54457],{"class":2052},[203,79956,214],{"class":213},[203,79958,79959],{"class":318},"'.list'",[203,79961,74307],{"class":213},[203,79963,259],{"class":209},[203,79965,74043],{"class":213},[203,79967,79968],{"class":205,"line":33407},[203,79969,2276],{"class":213},[203,79971,79972],{"class":205,"line":33413},[203,79973,79974],{"class":272},"    \u002F\u002F 页面一打开就需要渲染\n",[203,79976,79977,79980],{"class":205,"line":33419},[203,79978,79979],{"class":2052},"    render",[203,79981,79982],{"class":213},"(goodsList)\n",[203,79984,79985],{"class":205,"line":33430},[203,79986,79987],{"class":272},"    \u002F\u002F 2.过滤筛选\n",[203,79989,79990,79992,79994,79996,79999,80001,80003,80005,80007,80009,80011,80013],{"class":205,"line":33436},[203,79991,52465],{"class":213},[203,79993,54457],{"class":2052},[203,79995,214],{"class":213},[203,79997,79998],{"class":318},"'.filter'",[203,80000,30884],{"class":213},[203,80002,57871],{"class":2052},[203,80004,214],{"class":213},[203,80006,57876],{"class":318},[203,80008,12525],{"class":213},[203,80010,288],{"class":5306},[203,80012,79856],{"class":209},[203,80014,15662],{"class":213},[203,80016,80017],{"class":205,"line":33442},[203,80018,80019],{"class":272},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[203,80021,80022,80024,80026,80029,80031,80033,80035,80037],{"class":205,"line":33448},[203,80023,58286],{"class":209},[203,80025,79865],{"class":213},[203,80027,80028],{"class":262},"tagName",[203,80030,12525],{"class":213},[203,80032,31595],{"class":262},[203,80034,79881],{"class":213},[203,80036,259],{"class":209},[203,80038,80039],{"class":213}," e.target\n",[203,80041,80042],{"class":205,"line":33466},[203,80043,80044],{"class":272},"      \u002F\u002F 判断\n",[203,80046,80047,80049,80051,80053,80055],{"class":205,"line":33480},[203,80048,54538],{"class":209},[203,80050,67092],{"class":213},[203,80052,54544],{"class":209},[203,80054,68314],{"class":318},[203,80056,12532],{"class":213},[203,80058,80059],{"class":205,"line":33489},[203,80060,80061],{"class":272},"        \u002F\u002F console.log(11)\n",[203,80063,80064],{"class":205,"line":33498},[203,80065,80066],{"class":272},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[203,80068,80069],{"class":205,"line":33507},[203,80070,80071],{"class":272},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[203,80073,80074,80076,80078,80080],{"class":205,"line":33516},[203,80075,51888],{"class":209},[203,80077,51891],{"class":213},[203,80079,259],{"class":209},[203,80081,80082],{"class":213}," goodsList\n",[203,80084,80085,80087,80090,80092,80095],{"class":205,"line":33522},[203,80086,2586],{"class":209},[203,80088,80089],{"class":213}," (dataset.index ",[203,80091,54544],{"class":209},[203,80093,80094],{"class":318}," '1'",[203,80096,12532],{"class":213},[203,80098,80099,80102,80104,80107,80110,80112,80114,80116,80119,80121,80123,80126,80128,80130,80132],{"class":205,"line":33528},[203,80100,80101],{"class":213},"          arr ",[203,80103,259],{"class":209},[203,80105,80106],{"class":213}," goodsList.",[203,80108,80109],{"class":2052},"filter",[203,80111,214],{"class":213},[203,80113,79853],{"class":5306},[203,80115,79856],{"class":209},[203,80117,80118],{"class":213}," item.price ",[203,80120,1799],{"class":209},[203,80122,4182],{"class":262},[203,80124,80125],{"class":209}," &&",[203,80127,80118],{"class":213},[203,80129,1677],{"class":209},[203,80131,5844],{"class":262},[203,80133,220],{"class":213},[203,80135,80136,80139,80141,80143,80145,80147,80150],{"class":205,"line":33536},[203,80137,80138],{"class":213},"        } ",[203,80140,1790],{"class":209},[203,80142,1793],{"class":209},[203,80144,80089],{"class":213},[203,80146,54544],{"class":209},[203,80148,80149],{"class":318}," '2'",[203,80151,12532],{"class":213},[203,80153,80154,80156,80158,80160,80162,80164,80166,80168,80170,80172,80174,80176,80178,80180,80183],{"class":205,"line":33541},[203,80155,80101],{"class":213},[203,80157,259],{"class":209},[203,80159,80106],{"class":213},[203,80161,80109],{"class":2052},[203,80163,214],{"class":213},[203,80165,79853],{"class":5306},[203,80167,79856],{"class":209},[203,80169,80118],{"class":213},[203,80171,1799],{"class":209},[203,80173,5844],{"class":262},[203,80175,80125],{"class":209},[203,80177,80118],{"class":213},[203,80179,1677],{"class":209},[203,80181,80182],{"class":262}," 300",[203,80184,220],{"class":213},[203,80186,80187,80189,80191,80193,80195,80197,80200],{"class":205,"line":33547},[203,80188,80138],{"class":213},[203,80190,1790],{"class":209},[203,80192,1793],{"class":209},[203,80194,80089],{"class":213},[203,80196,54544],{"class":209},[203,80198,80199],{"class":318}," '3'",[203,80201,12532],{"class":213},[203,80203,80204,80206,80208,80210,80212,80214,80216,80218,80220,80222,80224],{"class":205,"line":33558},[203,80205,80101],{"class":213},[203,80207,259],{"class":209},[203,80209,80106],{"class":213},[203,80211,80109],{"class":2052},[203,80213,214],{"class":213},[203,80215,79853],{"class":5306},[203,80217,79856],{"class":209},[203,80219,80118],{"class":213},[203,80221,1799],{"class":209},[203,80223,80182],{"class":262},[203,80225,220],{"class":213},[203,80227,80228],{"class":205,"line":33564},[203,80229,2618],{"class":213},[203,80231,80232],{"class":205,"line":33584},[203,80233,80234],{"class":272},"        \u002F\u002F 渲染函数\n",[203,80236,80237,80239],{"class":205,"line":33590},[203,80238,70466],{"class":2052},[203,80240,52470],{"class":213},[203,80242,80243],{"class":205,"line":33596},[203,80244,52456],{"class":213},[203,80246,80247],{"class":205,"line":33602},[203,80248,2489],{"emptyLinePlaceholder":131},[203,80250,80251],{"class":205,"line":33619},[203,80252,33519],{"class":213},[203,80254,80255,80257,80259],{"class":205,"line":33625},[203,80256,52475],{"class":213},[203,80258,51871],{"class":51358},[203,80260,51365],{"class":213},[203,80262,80263,80265,80267],{"class":205,"line":33631},[203,80264,51843],{"class":213},[203,80266,51858],{"class":51358},[203,80268,51365],{"class":213},[203,80270,80271],{"class":205,"line":33637},[203,80272,2489],{"emptyLinePlaceholder":131},[203,80274,80275,80277,80279],{"class":205,"line":33643},[203,80276,51843],{"class":213},[203,80278,50693],{"class":51358},[203,80280,51365],{"class":213},[14,80282,80284],{"id":80283},"_410-深入了解对象","4.10 深入了解对象",[174,80286,80288],{"id":80287},"_4101-创建对象","4.10.1 创建对象",[19,80290,80291],{},[25,80292],{"alt":27,"src":80293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80295,80296],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[174,80298,80300],{"id":80299},"_4102-构造函数","4.10.2 构造函数",[19,80302,80303,80306],{},[363,80304,80305],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80308,80309,80312],{},[363,80310,80311],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[194,80314,80316],{"className":50691,"code":80315,"language":50693,"meta":27,"style":27},"\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",[200,80317,80318,80326,80331,80352,80365,80377,80389,80393,80398,80425,80430,80457],{"__ignoreMap":27},[203,80319,80320,80322,80324],{"class":205,"line":206},[203,80321,1124],{"class":213},[203,80323,51871],{"class":51358},[203,80325,51365],{"class":213},[203,80327,80328],{"class":205,"line":124},[203,80329,80330],{"class":272},"\u002F\u002F例：\n",[203,80332,80333,80335,80338,80340,80342,80344,80346,80348,80350],{"class":205,"line":1269},[203,80334,54507],{"class":209},[203,80336,80337],{"class":2052}," Pig",[203,80339,214],{"class":213},[203,80341,79868],{"class":5306},[203,80343,592],{"class":213},[203,80345,70279],{"class":5306},[203,80347,592],{"class":213},[203,80349,70296],{"class":5306},[203,80351,12532],{"class":213},[203,80353,80354,80357,80360,80362],{"class":205,"line":1284},[203,80355,80356],{"class":262},"    this",[203,80358,80359],{"class":213},".name",[203,80361,259],{"class":209},[203,80363,80364],{"class":213},"name\n",[203,80366,80367,80369,80372,80374],{"class":205,"line":1290},[203,80368,80356],{"class":262},[203,80370,80371],{"class":213},".age",[203,80373,259],{"class":209},[203,80375,80376],{"class":213},"age\n",[203,80378,80379,80381,80384,80386],{"class":205,"line":1304},[203,80380,80356],{"class":262},[203,80382,80383],{"class":213},".gender",[203,80385,259],{"class":209},[203,80387,80388],{"class":213},"gender    \n",[203,80390,80391],{"class":205,"line":1310},[203,80392,1654],{"class":213},[203,80394,80395],{"class":205,"line":1401},[203,80396,80397],{"class":272},"\u002F\u002F创建佩奇对象\n",[203,80399,80400,80402,80405,80407,80409,80411,80414,80416,80418,80420,80423],{"class":205,"line":1407},[203,80401,6882],{"class":209},[203,80403,80404],{"class":262}," Peppa",[203,80406,11807],{"class":209},[203,80408,80337],{"class":2052},[203,80410,214],{"class":213},[203,80412,80413],{"class":318},"'佩奇'",[203,80415,592],{"class":213},[203,80417,558],{"class":262},[203,80419,592],{"class":213},[203,80421,80422],{"class":318},"'女'",[203,80424,220],{"class":213},[203,80426,80427],{"class":205,"line":1419},[203,80428,80429],{"class":272},"\u002F\u002F创建乔治对象\n",[203,80431,80432,80434,80437,80439,80441,80443,80446,80448,80450,80452,80455],{"class":205,"line":1701},[203,80433,6882],{"class":209},[203,80435,80436],{"class":262}," George",[203,80438,11807],{"class":209},[203,80440,80337],{"class":2052},[203,80442,214],{"class":213},[203,80444,80445],{"class":318},"'乔治'",[203,80447,592],{"class":213},[203,80449,285],{"class":262},[203,80451,592],{"class":213},[203,80453,80454],{"class":318},"'男'",[203,80456,220],{"class":213},[203,80458,80459,80461,80463],{"class":205,"line":1706},[203,80460,51843],{"class":213},[203,80462,51871],{"class":51358},[203,80464,51365],{"class":213},[19,80466,80467],{},[25,80468],{"alt":27,"src":80469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,80471,80472],{},[25,80473],{"alt":27,"src":80474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,80476,80477],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,80479,80480],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,80482,80483],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,80485,80486],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,80488,80489],{},"这里用等号是因为：对象.属性=值",[19,80491,80492],{},"①利用对象字面量创建对象",[19,80494,80495],{},"const o={",[19,80497,80498],{},"name:'pink'",[19,80500,80501],{},"} ②利用new Object创建对象",[19,80503,80504],{},"const o=new Object({name:'pink'})",[19,80506,80507],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,80509,80510],{},"构造函数创建对象的执行过程：",[19,80512,80513],{},[25,80514],{"alt":27,"src":80515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[174,80517,80519],{"id":80518},"_4103-实例成员","4.10.3 实例成员",[19,80521,80522],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[157,80524,80525,80528,80531],{},[160,80526,80527],{},"实例对象的属性和方法即为实例成员",[160,80529,80530],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[160,80532,80533],{},"构造函数创建的实例对象彼此独立互不影响",[174,80535,80537],{"id":80536},"_4104-静态成员","4.10.4 静态成员",[19,80539,80540],{},[25,80541],{"alt":27,"src":80542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,80544,80545],{},"静态成员有Date.now() Math.PI Math.random()",[19,80547,80548],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,80550,80551],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,80553,80554],{},"function Pig(name) n {",[19,80556,80557],{},"this.name=name",[19,80559,1160],{},[19,80561,80562],{},"Pig.eyes=2",[19,80564,80565],{},"Pig.sayHai=function () { console.log(this) }",[19,80567,80568],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,80570,80571],{},"console.log(Pig.eyes) \u002F\u002F2",[19,80573,11422],{},[157,80575,80576,80579,80582,80585,80588],{},[160,80577,80578],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[160,80580,80581],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[160,80583,80584],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[160,80586,80587],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[160,80589,80590],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,80592,80593],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[174,80595,80597],{"id":80596},"_4105-内置构造函数","4.10.5 内置构造函数",[19,80599,80600],{},"内置构造函数包含：",[19,80602,80603],{},[25,80604],{"alt":27,"src":80605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,80607,80608],{},[25,80609],{"alt":27,"src":80610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,80612,80613],{},"这些基本数据类型，js对他们进行了包装",[51871,80615,80616],{},"\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",[22088,80618,80620],{"id":80619},"_41051-object","4.10.5.1 Object",[19,80622,80623],{},"Object 是内置的构造函数，用于创建普通对象",[19,80625,80626],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[194,80628,80630],{"className":50691,"code":80629,"language":50693,"meta":27,"style":27},"const user=new Object({name:'小明',age:15})\n",[200,80631,80632],{"__ignoreMap":27},[203,80633,80634],{"class":205,"line":206},[203,80635,80629],{"class":213},[19,80637,80638],{},"三个常用的静态方法：",[23000,80640,80642],{"id":80641},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,80644,80645],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,80647,80648],{},[25,80649],{"alt":27,"src":80650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,80652,80653],{},[25,80654],{"alt":27,"src":80655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[194,80657,80659],{"className":53125,"code":80658,"language":53127,"meta":27,"style":27},"\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",[200,80660,80661,80669,80677,80682,80687,80692,80697,80702,80707,80715],{"__ignoreMap":27},[203,80662,80663,80665,80667],{"class":205,"line":206},[203,80664,1124],{"class":213},[203,80666,51858],{"class":51358},[203,80668,51365],{"class":213},[203,80670,80671,80673,80675],{"class":205,"line":124},[203,80672,52202],{"class":213},[203,80674,51871],{"class":51358},[203,80676,51365],{"class":213},[203,80678,80679],{"class":205,"line":1269},[203,80680,80681],{"class":213},"    const o = { name: 'pink', age: 6 }\n",[203,80683,80684],{"class":205,"line":1284},[203,80685,80686],{"class":213},"    \u002F\u002F 获得所有属性名\n",[203,80688,80689],{"class":205,"line":1290},[203,80690,80691],{"class":213},"    const arr = Object.keys(o)\n",[203,80693,80694],{"class":205,"line":1304},[203,80695,80696],{"class":213},"    console.log(arr)\n",[203,80698,80699],{"class":205,"line":1310},[203,80700,80701],{"class":213},"    \u002F\u002F 获得所有属性值\n",[203,80703,80704],{"class":205,"line":1401},[203,80705,80706],{"class":213},"    console.log(Object.values(o))\n",[203,80708,80709,80711,80713],{"class":205,"line":1407},[203,80710,52475],{"class":213},[203,80712,51871],{"class":51358},[203,80714,51365],{"class":213},[203,80716,80717,80719,80721],{"class":205,"line":1419},[203,80718,51843],{"class":213},[203,80720,51858],{"class":51358},[203,80722,51365],{"class":213},[23000,80724,80726],{"id":80725},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,80728,80729],{},"Object.assign(oo,o)",[19,80731,80732],{},"后的东西添加给前 是追加",[19,80734,80735],{},[25,80736],{"alt":27,"src":80737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,80739,80740],{},[25,80741],{"alt":27,"src":80742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[194,80744,80746],{"className":53125,"code":80745,"language":53127,"meta":27,"style":27},"\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",[200,80747,80748,80756,80764,80768,80772,80776,80780,80784,80788,80793,80798,80803,80808,80813,80821],{"__ignoreMap":27},[203,80749,80750,80752,80754],{"class":205,"line":206},[203,80751,1124],{"class":213},[203,80753,51858],{"class":51358},[203,80755,51365],{"class":213},[203,80757,80758,80760,80762],{"class":205,"line":124},[203,80759,52202],{"class":213},[203,80761,51871],{"class":51358},[203,80763,51365],{"class":213},[203,80765,80766],{"class":205,"line":1269},[203,80767,80681],{"class":213},[203,80769,80770],{"class":205,"line":1284},[203,80771,80686],{"class":213},[203,80773,80774],{"class":205,"line":1290},[203,80775,80691],{"class":213},[203,80777,80778],{"class":205,"line":1304},[203,80779,80696],{"class":213},[203,80781,80782],{"class":205,"line":1310},[203,80783,80701],{"class":213},[203,80785,80786],{"class":205,"line":1401},[203,80787,80706],{"class":213},[203,80789,80790],{"class":205,"line":1407},[203,80791,80792],{"class":213},"    const oo = {}\n",[203,80794,80795],{"class":205,"line":1419},[203,80796,80797],{"class":213},"    Object.assign(oo, o)\n",[203,80799,80800],{"class":205,"line":1701},[203,80801,80802],{"class":213},"    console.log(oo)\n",[203,80804,80805],{"class":205,"line":1706},[203,80806,80807],{"class":213},"    Object.assign(o, { gender: '女' })\n",[203,80809,80810],{"class":205,"line":1712},[203,80811,80812],{"class":213},"    console.log(o)\n",[203,80814,80815,80817,80819],{"class":205,"line":1717},[203,80816,52475],{"class":213},[203,80818,51871],{"class":51358},[203,80820,51365],{"class":213},[203,80822,80823,80825,80827],{"class":205,"line":1731},[203,80824,51843],{"class":213},[203,80826,51858],{"class":51358},[203,80828,51365],{"class":213},[19,80830,80831],{},[25,80832],{"alt":27,"src":80833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22088,80835,80837],{"id":80836},"_41052-array","4.10.5.2 Array",[19,80839,80840],{},"Array 是内置的构造函数，用于创建数组",[19,80842,80843],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[194,80845,80847],{"className":50691,"code":80846,"language":50693,"meta":27,"style":27},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[200,80848,80849,80854],{"__ignoreMap":27},[203,80850,80851],{"class":205,"line":206},[203,80852,80853],{"class":213},"const arr=new Array(3,5)\n",[203,80855,80856],{"class":205,"line":124},[203,80857,80858],{"class":213},"console.log(arr)  \u002F\u002F[3,5]\n",[19,80860,80861],{},"Array的实例方法，这个方法是实例成员",[19,80863,80864],{},[25,80865],{"alt":27,"src":80866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23000,80868,80870],{"id":80869},"_410521-reduce","4.10.5.2.1 reduce",[19,80872,80873],{},[25,80874],{"alt":27,"src":80875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[194,80877,80879],{"className":53125,"code":80878,"language":53127,"meta":27,"style":27},"\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",[200,80880,80881,80889,80897,80902,80907,80912,80917,80921,80926,80931,80936,80940,80945,80950,80954,80959,80964,80969,80977],{"__ignoreMap":27},[203,80882,80883,80885,80887],{"class":205,"line":206},[203,80884,1124],{"class":213},[203,80886,51858],{"class":51358},[203,80888,51365],{"class":213},[203,80890,80891,80893,80895],{"class":205,"line":124},[203,80892,52202],{"class":213},[203,80894,51871],{"class":51358},[203,80896,51365],{"class":213},[203,80898,80899],{"class":205,"line":1269},[203,80900,80901],{"class":213},"    const arr = [1, 5, 8]\n",[203,80903,80904],{"class":205,"line":1284},[203,80905,80906],{"class":213},"    \u002F\u002F 1.没有初始值\n",[203,80908,80909],{"class":205,"line":1290},[203,80910,80911],{"class":213},"    const total = arr.reduce(function (prev, current) {\n",[203,80913,80914],{"class":205,"line":1304},[203,80915,80916],{"class":213},"      return prev + current\n",[203,80918,80919],{"class":205,"line":1310},[203,80920,33519],{"class":213},[203,80922,80923],{"class":205,"line":1401},[203,80924,80925],{"class":213},"    console.log(total)   \u002F\u002F14\n",[203,80927,80928],{"class":205,"line":1407},[203,80929,80930],{"class":213},"    \u002F\u002F 2.有初始值\n",[203,80932,80933],{"class":205,"line":1419},[203,80934,80935],{"class":213},"    const total1 = arr.reduce(function (prev, current) {\n",[203,80937,80938],{"class":205,"line":1701},[203,80939,80916],{"class":213},[203,80941,80942],{"class":205,"line":1706},[203,80943,80944],{"class":213},"    }, 10)\n",[203,80946,80947],{"class":205,"line":1712},[203,80948,80949],{"class":213},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[203,80951,80952],{"class":205,"line":1717},[203,80953,2489],{"emptyLinePlaceholder":131},[203,80955,80956],{"class":205,"line":1731},[203,80957,80958],{"class":213},"    \u002F\u002F 3.箭头函数写法\n",[203,80960,80961],{"class":205,"line":1736},[203,80962,80963],{"class":213},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[203,80965,80966],{"class":205,"line":1742},[203,80967,80968],{"class":213},"    console.log(total2)   \u002F\u002F24\n",[203,80970,80971,80973,80975],{"class":205,"line":1763},[203,80972,52475],{"class":213},[203,80974,51871],{"class":51358},[203,80976,51365],{"class":213},[203,80978,80979,80981,80983],{"class":205,"line":1768},[203,80980,51843],{"class":213},[203,80982,51858],{"class":51358},[203,80984,51365],{"class":213},[19,80986,80987],{},"执行过程：",[157,80989,80990,80993,80996],{},[160,80991,80992],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[160,80994,80995],{},"每一次循环，把返回值给作为下一次循环的上一次值",[160,80997,80998],{},"如果有起始值，则起始值作为上一次值",[194,81000,81002],{"className":53125,"code":81001,"language":53127,"meta":27,"style":27},"\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",[200,81003,81004,81012,81020,81024,81028,81032,81036,81040,81044,81049,81054,81059,81064,81069,81073,81077,81081,81085,81089,81093,81098,81102,81107,81111,81116,81121,81125,81129,81133,81141],{"__ignoreMap":27},[203,81005,81006,81008,81010],{"class":205,"line":206},[203,81007,1124],{"class":213},[203,81009,51858],{"class":51358},[203,81011,51365],{"class":213},[203,81013,81014,81016,81018],{"class":205,"line":124},[203,81015,52202],{"class":213},[203,81017,51871],{"class":51358},[203,81019,51365],{"class":213},[203,81021,81022],{"class":205,"line":1269},[203,81023,80901],{"class":213},[203,81025,81026],{"class":205,"line":1284},[203,81027,80906],{"class":213},[203,81029,81030],{"class":205,"line":1290},[203,81031,80911],{"class":213},[203,81033,81034],{"class":205,"line":1304},[203,81035,80916],{"class":213},[203,81037,81038],{"class":205,"line":1310},[203,81039,33519],{"class":213},[203,81041,81042],{"class":205,"line":1401},[203,81043,80925],{"class":213},[203,81045,81046],{"class":205,"line":1407},[203,81047,81048],{"class":213},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[203,81050,81051],{"class":205,"line":1419},[203,81052,81053],{"class":213},"    \u002F\u002F     1              5                    6\n",[203,81055,81056],{"class":205,"line":1701},[203,81057,81058],{"class":213},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[203,81060,81061],{"class":205,"line":1706},[203,81062,81063],{"class":213},"    \u002F\u002F     6              8                    14\n",[203,81065,81066],{"class":205,"line":1712},[203,81067,81068],{"class":213},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[203,81070,81071],{"class":205,"line":1717},[203,81072,80930],{"class":213},[203,81074,81075],{"class":205,"line":1731},[203,81076,80935],{"class":213},[203,81078,81079],{"class":205,"line":1736},[203,81080,80916],{"class":213},[203,81082,81083],{"class":205,"line":1742},[203,81084,80944],{"class":213},[203,81086,81087],{"class":205,"line":1763},[203,81088,80949],{"class":213},[203,81090,81091],{"class":205,"line":1768},[203,81092,81048],{"class":213},[203,81094,81095],{"class":205,"line":1782},[203,81096,81097],{"class":213},"    \u002F\u002F     10             1                     11\n",[203,81099,81100],{"class":205,"line":1787},[203,81101,81058],{"class":213},[203,81103,81104],{"class":205,"line":1816},[203,81105,81106],{"class":213},"    \u002F\u002F     11             5                    16\n",[203,81108,81109],{"class":205,"line":1821},[203,81110,81058],{"class":213},[203,81112,81113],{"class":205,"line":1838},[203,81114,81115],{"class":213},"    \u002F\u002F     16             8                    24\n",[203,81117,81118],{"class":205,"line":1843},[203,81119,81120],{"class":213},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[203,81122,81123],{"class":205,"line":1848},[203,81124,80958],{"class":213},[203,81126,81127],{"class":205,"line":1853},[203,81128,80963],{"class":213},[203,81130,81131],{"class":205,"line":1867},[203,81132,80968],{"class":213},[203,81134,81135,81137,81139],{"class":205,"line":1872},[203,81136,52475],{"class":213},[203,81138,51871],{"class":51358},[203,81140,51365],{"class":213},[203,81142,81143,81145,81147],{"class":205,"line":2666},[203,81144,51843],{"class":213},[203,81146,51858],{"class":51358},[203,81148,51365],{"class":213},[23000,81150,81152],{"id":81151},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81154,81155],{},[25,81156],{"alt":27,"src":81157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[194,81159,81161],{"className":53125,"code":81160,"language":53127,"meta":27,"style":27},"\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",[200,81162,81163,81171,81179,81184,81189,81194,81199,81203,81208,81213,81218,81223,81228,81233,81237,81242,81246,81251,81259],{"__ignoreMap":27},[203,81164,81165,81167,81169],{"class":205,"line":206},[203,81166,1124],{"class":213},[203,81168,51858],{"class":51358},[203,81170,51365],{"class":213},[203,81172,81173,81175,81177],{"class":205,"line":124},[203,81174,52202],{"class":213},[203,81176,51871],{"class":51358},[203,81178,51365],{"class":213},[203,81180,81181],{"class":205,"line":1269},[203,81182,81183],{"class":213},"    const arr = [\n",[203,81185,81186],{"class":205,"line":1284},[203,81187,81188],{"class":213},"      { name: '张三', salary: 10000 },\n",[203,81190,81191],{"class":205,"line":1290},[203,81192,81193],{"class":213},"      { name: '李四', salary: 10000 },\n",[203,81195,81196],{"class":205,"line":1304},[203,81197,81198],{"class":213},"      { name: '王五', salary: 10000 }\n",[203,81200,81201],{"class":205,"line":1310},[203,81202,53167],{"class":213},[203,81204,81205],{"class":205,"line":1401},[203,81206,81207],{"class":213},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[203,81209,81210],{"class":205,"line":1407},[203,81211,81212],{"class":213},"    \u002F\u002F prev是累计值\n",[203,81214,81215],{"class":205,"line":1419},[203,81216,81217],{"class":213},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[203,81219,81220],{"class":205,"line":1701},[203,81221,81222],{"class":213},"    console.log(total)\n",[203,81224,81225],{"class":205,"line":1706},[203,81226,81227],{"class":213},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[203,81229,81230],{"class":205,"line":1712},[203,81231,81232],{"class":213},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[203,81234,81235],{"class":205,"line":1717},[203,81236,81227],{"class":213},[203,81238,81239],{"class":205,"line":1731},[203,81240,81241],{"class":213},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[203,81243,81244],{"class":205,"line":1736},[203,81245,81227],{"class":213},[203,81247,81248],{"class":205,"line":1742},[203,81249,81250],{"class":213},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[203,81252,81253,81255,81257],{"class":205,"line":1763},[203,81254,52475],{"class":213},[203,81256,51871],{"class":51358},[203,81258,51365],{"class":213},[203,81260,81261,81263,81265],{"class":205,"line":1768},[203,81262,51843],{"class":213},[203,81264,51858],{"class":51358},[203,81266,51365],{"class":213},[23000,81268,81270],{"id":81269},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81272,81273],{},[25,81274],{"alt":27,"src":81275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81277,81278],{},[25,81279],{"alt":27,"src":81280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[157,81282,81283],{},[160,81284,81285],{},"find()",[19,81287,81288],{},"循环查找，找到第一个就ok",[19,81290,81291],{},[452,81292,81295],{"href":81293,"rel":81294},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23956],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[194,81297,81299],{"className":50691,"code":81298,"language":50693,"meta":27,"style":27},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[200,81300,81301,81306,81311],{"__ignoreMap":27},[203,81302,81303],{"class":205,"line":206},[203,81304,81305],{"class":213},"const array1 = [5, 12, 8, 130, 44]\n",[203,81307,81308],{"class":205,"line":124},[203,81309,81310],{"class":213},"const found = array1.find((element) => element > 10)\n",[203,81312,81313],{"class":205,"line":1269},[203,81314,81315],{"class":213},"console.log(found)  \u002F\u002F12\n",[19,81317,81318,81320,81321,81326,81327,81330,81331,81333,81334,81339,81340,81342,81343,81345,81346,81348,81349],{},[200,81319,81285],{}," 方法是一个",[452,81322,81325],{"href":81323,"rel":81324},"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",[23956],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[200,81328,81329],{},"callbackFn"," 函数，直到 ",[200,81332,81329],{}," 返回一个",[452,81335,81338],{"href":81336,"rel":81337},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23956],"真值","。然后 ",[200,81341,81285],{}," 返回该元素并停止迭代数组。如果 ",[200,81344,81329],{}," 从未返回真值，则 ",[200,81347,81285],{}," 返回 ",[200,81350,81351],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[194,81353,81355],{"className":53125,"code":81354,"language":53127,"meta":27,"style":27},"\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",[200,81356,81357,81365,81373,81378,81383,81388,81392,81397,81402,81406,81411,81416,81420,81424,81429,81434,81438,81442,81447,81452,81457,81462,81467,81471,81476,81481,81486,81491,81495,81500,81508],{"__ignoreMap":27},[203,81358,81359,81361,81363],{"class":205,"line":206},[203,81360,1124],{"class":213},[203,81362,51858],{"class":51358},[203,81364,51365],{"class":213},[203,81366,81367,81369,81371],{"class":205,"line":124},[203,81368,52202],{"class":213},[203,81370,51871],{"class":51358},[203,81372,51365],{"class":213},[203,81374,81375],{"class":205,"line":1269},[203,81376,81377],{"class":213},"    const arr = ['red', 'blue', 'green']\n",[203,81379,81380],{"class":205,"line":1284},[203,81381,81382],{"class":213},"    const found = arr.find(item => item === 'pink')\n",[203,81384,81385],{"class":205,"line":1290},[203,81386,81387],{"class":213},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[203,81389,81390],{"class":205,"line":1304},[203,81391,2489],{"emptyLinePlaceholder":131},[203,81393,81394],{"class":205,"line":1310},[203,81395,81396],{"class":213},"    \u002F\u002F 使用场景，用于查找数据\n",[203,81398,81399],{"class":205,"line":1401},[203,81400,81401],{"class":213},"    const arr1 = [\n",[203,81403,81404],{"class":205,"line":1407},[203,81405,79444],{"class":213},[203,81407,81408],{"class":205,"line":1419},[203,81409,81410],{"class":213},"        name: '小米',\n",[203,81412,81413],{"class":205,"line":1701},[203,81414,81415],{"class":213},"        price: 1999\n",[203,81417,81418],{"class":205,"line":1706},[203,81419,77950],{"class":213},[203,81421,81422],{"class":205,"line":1712},[203,81423,79444],{"class":213},[203,81425,81426],{"class":205,"line":1717},[203,81427,81428],{"class":213},"        name: '华为',\n",[203,81430,81431],{"class":205,"line":1731},[203,81432,81433],{"class":213},"        price: 3999\n",[203,81435,81436],{"class":205,"line":1736},[203,81437,52456],{"class":213},[203,81439,81440],{"class":205,"line":1742},[203,81441,53167],{"class":213},[203,81443,81444],{"class":205,"line":1763},[203,81445,81446],{"class":213},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[203,81448,81449],{"class":205,"line":1768},[203,81450,81451],{"class":213},"    \u002F\u002F const found1 = arr1.find(item => {\n",[203,81453,81454],{"class":205,"line":1782},[203,81455,81456],{"class":213},"    \u002F\u002F   if (item.name === '小米') {\n",[203,81458,81459],{"class":205,"line":1787},[203,81460,81461],{"class":213},"    \u002F\u002F     return item\n",[203,81463,81464],{"class":205,"line":1816},[203,81465,81466],{"class":213},"    \u002F\u002F   }\n",[203,81468,81469],{"class":205,"line":1821},[203,81470,63348],{"class":213},[203,81472,81473],{"class":205,"line":1838},[203,81474,81475],{"class":213},"    \u002F\u002F 另一种写法\n",[203,81477,81478],{"class":205,"line":1843},[203,81479,81480],{"class":213},"    const found1 = arr1.find(item => {\n",[203,81482,81483],{"class":205,"line":1848},[203,81484,81485],{"class":213},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[203,81487,81488],{"class":205,"line":1853},[203,81489,81490],{"class":213},"      return item.name = '小米'\n",[203,81492,81493],{"class":205,"line":1867},[203,81494,33519],{"class":213},[203,81496,81497],{"class":205,"line":1872},[203,81498,81499],{"class":213},"    console.log(found1)\n",[203,81501,81502,81504,81506],{"class":205,"line":2666},[203,81503,52475],{"class":213},[203,81505,51871],{"class":51358},[203,81507,51365],{"class":213},[203,81509,81510,81512,81514],{"class":205,"line":2680},[203,81511,51843],{"class":213},[203,81513,51858],{"class":51358},[203,81515,51365],{"class":213},[19,81517,81518],{},[25,81519],{"alt":27,"src":81520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,81522,81523],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[157,81525,81526],{"start":124},[160,81527,81528],{},"every()返回的是布尔值",[19,81530,81531],{},[452,81532,81535],{"href":81533,"rel":81534},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23956],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,81537,81538],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,81540,81541],{},"some是只有有一个就没问题",[19,81543,81544],{},"every是必须全是才行",[194,81546,81550],{"className":81547,"code":81548,"language":81549,"meta":27,"style":27},"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",[200,81551,81552,81568,81582,81586,81595],{"__ignoreMap":27},[203,81553,81554,81556,81559,81561,81563,81566],{"class":205,"line":206},[203,81555,54507],{"class":209},[203,81557,81558],{"class":213}," isBigEnough(element, ",[203,81560,74116],{"class":209},[203,81562,12525],{"class":213},[203,81564,81565],{"class":209},"array",[203,81567,12532],{"class":213},[203,81569,81570,81573,81576,81578,81580],{"class":205,"line":124},[203,81571,81572],{"class":209},"  return",[203,81574,81575],{"class":213}," element ",[203,81577,1799],{"class":209},[203,81579,2127],{"class":262},[203,81581,1380],{"class":213},[203,81583,81584],{"class":205,"line":1269},[203,81585,1654],{"class":213},[203,81587,81588,81591,81593],{"class":205,"line":1284},[203,81589,81590],{"class":213},"[12, 5, 8, 130, 44].every(isBigEnough); ",[203,81592,33387],{"class":209},[203,81594,54574],{"class":213},[203,81596,81597,81600,81602],{"class":205,"line":1290},[203,81598,81599],{"class":213},"[12, 54, 18, 130, 44].every(isBigEnough); ",[203,81601,33387],{"class":209},[203,81603,57998],{"class":213},[194,81605,81607],{"className":53125,"code":81606,"language":53127,"meta":27,"style":27},"\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",[200,81608,81609,81617,81625,81630,81634,81639,81644,81652],{"__ignoreMap":27},[203,81610,81611,81613,81615],{"class":205,"line":206},[203,81612,1124],{"class":213},[203,81614,51858],{"class":51358},[203,81616,51365],{"class":213},[203,81618,81619,81621,81623],{"class":205,"line":124},[203,81620,52202],{"class":213},[203,81622,51871],{"class":51358},[203,81624,51365],{"class":213},[203,81626,81627],{"class":205,"line":1269},[203,81628,81629],{"class":213},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[203,81631,81632],{"class":205,"line":1284},[203,81633,78380],{"class":213},[203,81635,81636],{"class":205,"line":1290},[203,81637,81638],{"class":213},"    const flag = arr.every(item => item >= 10)\n",[203,81640,81641],{"class":205,"line":1304},[203,81642,81643],{"class":213},"    console.log(flag)    \u002F\u002Ftrue\n",[203,81645,81646,81648,81650],{"class":205,"line":1310},[203,81647,52475],{"class":213},[203,81649,51871],{"class":51358},[203,81651,51365],{"class":213},[203,81653,81654,81656,81658],{"class":205,"line":1401},[203,81655,51843],{"class":213},[203,81657,51858],{"class":51358},[203,81659,51365],{"class":213},[194,81661,81663],{"className":53125,"code":81662,"language":53127,"meta":27,"style":27},"\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",[200,81664,81665,81673,81681,81685,81690,81695,81700,81708],{"__ignoreMap":27},[203,81666,81667,81669,81671],{"class":205,"line":206},[203,81668,1124],{"class":213},[203,81670,51858],{"class":51358},[203,81672,51365],{"class":213},[203,81674,81675,81677,81679],{"class":205,"line":124},[203,81676,52202],{"class":213},[203,81678,51871],{"class":51358},[203,81680,51365],{"class":213},[203,81682,81683],{"class":205,"line":1269},[203,81684,81629],{"class":213},[203,81686,81687],{"class":205,"line":1284},[203,81688,81689],{"class":213},"    const arr = [10, 0, 5]\n",[203,81691,81692],{"class":205,"line":1290},[203,81693,81694],{"class":213},"    const flag = arr.some(item => item >= 10)\n",[203,81696,81697],{"class":205,"line":1304},[203,81698,81699],{"class":213},"    console.log(flag)   \u002F\u002Ftrue\n",[203,81701,81702,81704,81706],{"class":205,"line":1310},[203,81703,52475],{"class":213},[203,81705,51871],{"class":51358},[203,81707,51365],{"class":213},[203,81709,81710,81712,81714],{"class":205,"line":1401},[203,81711,51843],{"class":213},[203,81713,51858],{"class":51358},[203,81715,51365],{"class":213},[23000,81717,81719],{"id":81718},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,81721,81722],{},[25,81723],{"alt":27,"src":81724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[194,81726,81728],{"className":50691,"code":81727,"language":50693,"meta":27,"style":27},"\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",[200,81729,81730,81740,81754,81758,81766,81780,81800,81812,81820,81827,81839,81851,81863,81875,81885,81895,81899,81907,81915,81919,81927,81939,81947,81969,81974,81979,82012,82020,82028,82032],{"__ignoreMap":27},[203,81731,81732,81734,81736,81738],{"class":205,"line":206},[203,81733,51355],{"class":213},[203,81735,51359],{"class":51358},[203,81737,51362],{"class":2052},[203,81739,51365],{"class":213},[203,81741,81742,81744,81746,81748,81750,81752],{"class":205,"line":124},[203,81743,1124],{"class":213},[203,81745,50693],{"class":51358},[203,81747,51374],{"class":2052},[203,81749,259],{"class":213},[203,81751,51379],{"class":318},[203,81753,51365],{"class":213},[203,81755,81756],{"class":205,"line":1269},[203,81757,2489],{"emptyLinePlaceholder":131},[203,81759,81760,81762,81764],{"class":205,"line":1284},[203,81761,1124],{"class":213},[203,81763,51392],{"class":51358},[203,81765,51365],{"class":213},[203,81767,81768,81770,81772,81774,81776,81778],{"class":205,"line":1290},[203,81769,52202],{"class":213},[203,81771,51402],{"class":51358},[203,81773,51405],{"class":2052},[203,81775,259],{"class":213},[203,81777,51410],{"class":318},[203,81779,51365],{"class":213},[203,81781,81782,81784,81786,81788,81790,81792,81794,81796,81798],{"class":205,"line":1304},[203,81783,52202],{"class":213},[203,81785,51402],{"class":51358},[203,81787,15010],{"class":2052},[203,81789,259],{"class":213},[203,81791,51449],{"class":318},[203,81793,51429],{"class":2052},[203,81795,259],{"class":213},[203,81797,51456],{"class":318},[203,81799,51365],{"class":213},[203,81801,81802,81804,81806,81808,81810],{"class":205,"line":1310},[203,81803,52202],{"class":213},[203,81805,51465],{"class":51358},[203,81807,51468],{"class":213},[203,81809,51465],{"class":51358},[203,81811,51365],{"class":213},[203,81813,81814,81816,81818],{"class":205,"line":1401},[203,81815,52202],{"class":213},[203,81817,5216],{"class":51358},[203,81819,51365],{"class":213},[203,81821,81822,81825],{"class":205,"line":1407},[203,81823,81824],{"class":51358},"    div",[203,81826,15662],{"class":213},[203,81828,81829,81831,81833,81835,81837],{"class":205,"line":1419},[203,81830,54829],{"class":262},[203,81832,51495],{"class":213},[203,81834,1811],{"class":262},[203,81836,51550],{"class":209},[203,81838,1380],{"class":213},[203,81840,81841,81843,81845,81847,81849],{"class":205,"line":1701},[203,81842,54843],{"class":262},[203,81844,51495],{"class":213},[203,81846,615],{"class":262},[203,81848,51550],{"class":209},[203,81850,1380],{"class":213},[203,81852,81853,81855,81857,81859,81861],{"class":205,"line":1706},[203,81854,57417],{"class":262},[203,81856,51495],{"class":213},[203,81858,615],{"class":262},[203,81860,51550],{"class":209},[203,81862,1380],{"class":213},[203,81864,81865,81867,81869,81871,81873],{"class":205,"line":1712},[203,81866,65191],{"class":262},[203,81868,51495],{"class":213},[203,81870,712],{"class":262},[203,81872,51550],{"class":209},[203,81874,1380],{"class":213},[203,81876,81877,81879,81881,81883],{"class":205,"line":1717},[203,81878,57344],{"class":262},[203,81880,51495],{"class":213},[203,81882,51650],{"class":262},[203,81884,1380],{"class":213},[203,81886,81887,81889,81891,81893],{"class":205,"line":1731},[203,81888,54942],{"class":262},[203,81890,51495],{"class":213},[203,81892,51703],{"class":262},[203,81894,1380],{"class":213},[203,81896,81897],{"class":205,"line":1736},[203,81898,2276],{"class":213},[203,81900,81901,81903,81905],{"class":205,"line":1742},[203,81902,52475],{"class":213},[203,81904,5216],{"class":51358},[203,81906,51365],{"class":213},[203,81908,81909,81911,81913],{"class":205,"line":1763},[203,81910,51843],{"class":213},[203,81912,51392],{"class":51358},[203,81914,51365],{"class":213},[203,81916,81917],{"class":205,"line":1768},[203,81918,2489],{"emptyLinePlaceholder":131},[203,81920,81921,81923,81925],{"class":205,"line":1782},[203,81922,1124],{"class":213},[203,81924,51858],{"class":51358},[203,81926,51365],{"class":213},[203,81928,81929,81931,81933,81935,81937],{"class":205,"line":1787},[203,81930,52202],{"class":213},[203,81932,51669],{"class":51358},[203,81934,55372],{"class":213},[203,81936,51669],{"class":51358},[203,81938,51365],{"class":213},[203,81940,81941,81943,81945],{"class":205,"line":1816},[203,81942,52202],{"class":213},[203,81944,51871],{"class":51358},[203,81946,51365],{"class":213},[203,81948,81949,81951,81954,81956,81959,81962,81964,81967],{"class":205,"line":1821},[203,81950,11311],{"class":209},[203,81952,81953],{"class":262}," spec",[203,81955,13654],{"class":209},[203,81957,81958],{"class":213}," { size: ",[203,81960,81961],{"class":318},"'40cm*40cm'",[203,81963,55522],{"class":213},[203,81965,81966],{"class":318},"'黑色'",[203,81968,55662],{"class":213},[203,81970,81971],{"class":205,"line":1838},[203,81972,81973],{"class":272},"    \u002F\u002F const arr = Object.values(spec)\n",[203,81975,81976],{"class":205,"line":1843},[203,81977,81978],{"class":272},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[203,81980,81981,81983,81985,81987,81990,81992,81994,81997,82000,82003,82005,82007,82010],{"class":205,"line":1848},[203,81982,52465],{"class":213},[203,81984,54457],{"class":2052},[203,81986,214],{"class":213},[203,81988,81989],{"class":318},"'div'",[203,81991,74307],{"class":213},[203,81993,259],{"class":209},[203,81995,81996],{"class":213}," Object.",[203,81998,81999],{"class":2052},"values",[203,82001,82002],{"class":213},"(spec).",[203,82004,74281],{"class":2052},[203,82006,214],{"class":213},[203,82008,82009],{"class":318},"'\u002F'",[203,82011,220],{"class":213},[203,82013,82014,82016,82018],{"class":205,"line":1853},[203,82015,52475],{"class":213},[203,82017,51871],{"class":51358},[203,82019,51365],{"class":213},[203,82021,82022,82024,82026],{"class":205,"line":1867},[203,82023,51843],{"class":213},[203,82025,51858],{"class":51358},[203,82027,51365],{"class":213},[203,82029,82030],{"class":205,"line":1872},[203,82031,2489],{"emptyLinePlaceholder":131},[203,82033,82034,82036,82038],{"class":205,"line":2666},[203,82035,51843],{"class":213},[203,82037,50693],{"class":51358},[203,82039,51365],{"class":213},[19,82041,82042],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23000,82044,82046],{"id":82045},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82048,82049],{},"静态方法，将伪数组转换为真数组",[19,82051,82052],{},[25,82053],{"alt":27,"src":82054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[194,82056,82058],{"className":53125,"code":82057,"language":53127,"meta":27,"style":27},"\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",[200,82059,82060,82068,82076,82088,82100,82112,82120,82128,82133,82138,82143,82148,82156],{"__ignoreMap":27},[203,82061,82062,82064,82066],{"class":205,"line":206},[203,82063,1124],{"class":213},[203,82065,51858],{"class":51358},[203,82067,51365],{"class":213},[203,82069,82070,82072,82074],{"class":205,"line":124},[203,82071,52202],{"class":213},[203,82073,1221],{"class":51358},[203,82075,51365],{"class":213},[203,82077,82078,82080,82082,82084,82086],{"class":205,"line":1269},[203,82079,51399],{"class":213},[203,82081,160],{"class":51358},[203,82083,55372],{"class":213},[203,82085,160],{"class":51358},[203,82087,51365],{"class":213},[203,82089,82090,82092,82094,82096,82098],{"class":205,"line":1284},[203,82091,51399],{"class":213},[203,82093,160],{"class":51358},[203,82095,55372],{"class":213},[203,82097,160],{"class":51358},[203,82099,51365],{"class":213},[203,82101,82102,82104,82106,82108,82110],{"class":205,"line":1290},[203,82103,51399],{"class":213},[203,82105,160],{"class":51358},[203,82107,55372],{"class":213},[203,82109,160],{"class":51358},[203,82111,51365],{"class":213},[203,82113,82114,82116,82118],{"class":205,"line":1304},[203,82115,52475],{"class":213},[203,82117,1221],{"class":51358},[203,82119,51365],{"class":213},[203,82121,82122,82124,82126],{"class":205,"line":1310},[203,82123,52202],{"class":213},[203,82125,51871],{"class":51358},[203,82127,51365],{"class":213},[203,82129,82130],{"class":205,"line":1401},[203,82131,82132],{"class":213},"    const lis = document.querySelectorAll('li')\n",[203,82134,82135],{"class":205,"line":1407},[203,82136,82137],{"class":213},"    const liss = Array.from(lis)\n",[203,82139,82140],{"class":205,"line":1419},[203,82141,82142],{"class":213},"    liss.pop()\n",[203,82144,82145],{"class":205,"line":1701},[203,82146,82147],{"class":213},"    console.log(liss)\n",[203,82149,82150,82152,82154],{"class":205,"line":1706},[203,82151,52475],{"class":213},[203,82153,51871],{"class":51358},[203,82155,51365],{"class":213},[203,82157,82158,82160,82162],{"class":205,"line":1712},[203,82159,51843],{"class":213},[203,82161,51858],{"class":51358},[203,82163,51365],{"class":213},[19,82165,82166],{},[25,82167],{"alt":27,"src":82168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22088,82170,82172],{"id":82171},"_41053-string","4.10.5.3 String",[19,82174,82175],{},[25,82176],{"alt":27,"src":82177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23000,82179,82181],{"id":82180},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[194,82183,82185],{"className":53125,"code":82184,"language":53127,"meta":27,"style":27},"\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",[200,82186,82187,82195,82203,82208,82213,82218,82222,82227,82232,82237,82245],{"__ignoreMap":27},[203,82188,82189,82191,82193],{"class":205,"line":206},[203,82190,1124],{"class":213},[203,82192,51858],{"class":51358},[203,82194,51365],{"class":213},[203,82196,82197,82199,82201],{"class":205,"line":124},[203,82198,52202],{"class":213},[203,82200,51871],{"class":51358},[203,82202,51365],{"class":213},[203,82204,82205],{"class":205,"line":1269},[203,82206,82207],{"class":213},"    \u002F\u002F 把字符串转化为数组\n",[203,82209,82210],{"class":205,"line":1284},[203,82211,82212],{"class":213},"    const str = 'pink,red'\n",[203,82214,82215],{"class":205,"line":1290},[203,82216,82217],{"class":213},"    const arr = str.split(',')\n",[203,82219,82220],{"class":205,"line":1304},[203,82221,80696],{"class":213},[203,82223,82224],{"class":205,"line":1310},[203,82225,82226],{"class":213},"    const str1 = '2025-8-25'\n",[203,82228,82229],{"class":205,"line":1401},[203,82230,82231],{"class":213},"    const arr1 = str1.split('-')\n",[203,82233,82234],{"class":205,"line":1407},[203,82235,82236],{"class":213},"    console.log(arr1)\n",[203,82238,82239,82241,82243],{"class":205,"line":1419},[203,82240,52475],{"class":213},[203,82242,51871],{"class":51358},[203,82244,51365],{"class":213},[203,82246,82247,82249,82251],{"class":205,"line":1701},[203,82248,51843],{"class":213},[203,82250,51858],{"class":51358},[203,82252,51365],{"class":213},[23000,82254,82256],{"id":82255},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82258,5271],{},[19,82260,82261],{},"substring(indexStart)",[19,82263,82264],{},"substring(indexStart, indexEnd)",[1221,82266,82267,82278,82290,82300],{},[160,82268,82269,82270,82273,82274,82277],{},"如果省略了 ",[200,82271,82272],{},"indexEnd","，则 ",[200,82275,82276],{},"substring()"," 提取字符直到字符串的末尾",[160,82279,82280,82281,82284,82285,82273,82287,82289],{},"如果 ",[200,82282,82283],{},"indexStart"," 等于 ",[200,82286,82272],{},[200,82288,82276],{}," 返回一个空字符串",[160,82291,82280,82292,82294,82295,82273,82297,82299],{},[200,82293,82283],{}," 大于 ",[200,82296,82272],{},[200,82298,82276],{}," 的效果就像交换了这两个参数一样",[160,82301,82302],{},"结束的索引号不包含想要截取的部分",[194,82304,82306],{"className":81547,"code":82305,"language":81549,"meta":27,"style":27},"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",[200,82307,82308,82320,82324,82358,82388,82392,82423,82427,82454,82484,82514,82518,82549],{"__ignoreMap":27},[203,82309,82310,82313,82315,82318],{"class":205,"line":206},[203,82311,82312],{"class":213},"const anyString ",[203,82314,259],{"class":209},[203,82316,82317],{"class":318}," \"Mozilla\"",[203,82319,1380],{"class":213},[203,82321,82322],{"class":205,"line":124},[203,82323,2489],{"emptyLinePlaceholder":131},[203,82325,82326,82329,82331,82333,82335,82338,82340,82343,82345,82347,82349,82351,82353,82355],{"class":205,"line":1269},[203,82327,82328],{"class":262},"console",[203,82330,772],{"class":213},[203,82332,58305],{"class":262},[203,82334,214],{"class":213},[203,82336,82337],{"class":262},"anyString",[203,82339,772],{"class":213},[203,82341,82342],{"class":262},"substring",[203,82344,214],{"class":213},[203,82346,405],{"class":262},[203,82348,12525],{"class":213},[203,82350,431],{"class":262},[203,82352,75311],{"class":213},[203,82354,33387],{"class":209},[203,82356,82357],{"class":318}," 'M'\n",[203,82359,82360,82362,82364,82366,82368,82370,82372,82374,82376,82378,82380,82382,82384,82386],{"class":205,"line":1284},[203,82361,82328],{"class":262},[203,82363,772],{"class":213},[203,82365,58305],{"class":262},[203,82367,214],{"class":213},[203,82369,82337],{"class":262},[203,82371,772],{"class":213},[203,82373,82342],{"class":262},[203,82375,214],{"class":213},[203,82377,431],{"class":262},[203,82379,12525],{"class":213},[203,82381,405],{"class":262},[203,82383,75311],{"class":213},[203,82385,33387],{"class":209},[203,82387,82357],{"class":318},[203,82389,82390],{"class":205,"line":1290},[203,82391,2489],{"emptyLinePlaceholder":131},[203,82393,82394,82396,82398,82400,82402,82404,82406,82408,82410,82412,82414,82416,82418,82420],{"class":205,"line":1304},[203,82395,82328],{"class":262},[203,82397,772],{"class":213},[203,82399,58305],{"class":262},[203,82401,214],{"class":213},[203,82403,82337],{"class":262},[203,82405,772],{"class":213},[203,82407,82342],{"class":262},[203,82409,214],{"class":213},[203,82411,405],{"class":262},[203,82413,12525],{"class":213},[203,82415,558],{"class":262},[203,82417,75311],{"class":213},[203,82419,33387],{"class":209},[203,82421,82422],{"class":318}," 'Mozill'\n",[203,82424,82425],{"class":205,"line":1310},[203,82426,2489],{"emptyLinePlaceholder":131},[203,82428,82429,82431,82433,82435,82437,82439,82441,82443,82445,82447,82449,82451],{"class":205,"line":1401},[203,82430,82328],{"class":262},[203,82432,772],{"class":213},[203,82434,58305],{"class":262},[203,82436,214],{"class":213},[203,82438,82337],{"class":262},[203,82440,772],{"class":213},[203,82442,82342],{"class":262},[203,82444,214],{"class":213},[203,82446,507],{"class":262},[203,82448,75311],{"class":213},[203,82450,33387],{"class":209},[203,82452,82453],{"class":318}," 'lla'\n",[203,82455,82456,82458,82460,82462,82464,82466,82468,82470,82472,82474,82476,82478,82480,82482],{"class":205,"line":1407},[203,82457,82328],{"class":262},[203,82459,772],{"class":213},[203,82461,58305],{"class":262},[203,82463,214],{"class":213},[203,82465,82337],{"class":262},[203,82467,772],{"class":213},[203,82469,82342],{"class":262},[203,82471,214],{"class":213},[203,82473,507],{"class":262},[203,82475,12525],{"class":213},[203,82477,583],{"class":262},[203,82479,75367],{"class":213},[203,82481,33387],{"class":209},[203,82483,82453],{"class":318},[203,82485,82486,82488,82490,82492,82494,82496,82498,82500,82502,82504,82506,82508,82510,82512],{"class":205,"line":1419},[203,82487,82328],{"class":262},[203,82489,772],{"class":213},[203,82491,58305],{"class":262},[203,82493,214],{"class":213},[203,82495,82337],{"class":262},[203,82497,772],{"class":213},[203,82499,82342],{"class":262},[203,82501,214],{"class":213},[203,82503,583],{"class":262},[203,82505,12525],{"class":213},[203,82507,507],{"class":262},[203,82509,75311],{"class":213},[203,82511,33387],{"class":209},[203,82513,82453],{"class":318},[203,82515,82516],{"class":205,"line":1701},[203,82517,2489],{"emptyLinePlaceholder":131},[203,82519,82520,82522,82524,82526,82528,82530,82532,82534,82536,82538,82540,82542,82544,82546],{"class":205,"line":1706},[203,82521,82328],{"class":262},[203,82523,772],{"class":213},[203,82525,58305],{"class":262},[203,82527,214],{"class":213},[203,82529,82337],{"class":262},[203,82531,772],{"class":213},[203,82533,82342],{"class":262},[203,82535,214],{"class":213},[203,82537,405],{"class":262},[203,82539,12525],{"class":213},[203,82541,583],{"class":262},[203,82543,75311],{"class":213},[203,82545,33387],{"class":209},[203,82547,82548],{"class":318}," 'Mozilla'\n",[203,82550,82551,82553,82555,82557,82559,82561,82563,82565,82567,82569,82571,82573,82575,82577],{"class":205,"line":1712},[203,82552,82328],{"class":262},[203,82554,772],{"class":213},[203,82556,58305],{"class":262},[203,82558,214],{"class":213},[203,82560,82337],{"class":262},[203,82562,772],{"class":213},[203,82564,82342],{"class":262},[203,82566,214],{"class":213},[203,82568,405],{"class":262},[203,82570,12525],{"class":213},[203,82572,660],{"class":262},[203,82574,75311],{"class":213},[203,82576,33387],{"class":209},[203,82578,82548],{"class":318},[23000,82580,82582],{"id":82581},"_410533-startswith","4.10.5.3.3 startsWith",[19,82584,82585,82588,82589,82594,82595,82597,82598],{},[200,82586,82587],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[363,82590,82591],{},[200,82592,82593],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[200,82596,1452],{}," 或 ",[200,82599,66078],{},[194,82601,82603],{"className":77553,"code":82602,"language":77555,"meta":27,"style":27},"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",[200,82604,82605,82617,82636,82641,82661],{"__ignoreMap":27},[203,82606,82607,82609,82612,82614],{"class":205,"line":206},[203,82608,6882],{"class":209},[203,82610,82611],{"class":213}," str1 ",[203,82613,259],{"class":209},[203,82615,82616],{"class":318}," \"Saturday night plans\"\n",[203,82618,82619,82621,82623,82626,82629,82631,82634],{"class":205,"line":124},[203,82620,77590],{"class":213},[203,82622,58305],{"class":2052},[203,82624,82625],{"class":213},"(str1.",[203,82627,82628],{"class":2052},"startsWith",[203,82630,214],{"class":213},[203,82632,82633],{"class":318},"\"Sat\"",[203,82635,30555],{"class":213},[203,82637,82638],{"class":205,"line":1269},[203,82639,82640],{"class":272},"\u002F\u002F Expected output: true\n",[203,82642,82643,82645,82647,82649,82651,82653,82655,82657,82659],{"class":205,"line":1284},[203,82644,77590],{"class":213},[203,82646,58305],{"class":2052},[203,82648,82625],{"class":213},[203,82650,82628],{"class":2052},[203,82652,214],{"class":213},[203,82654,82633],{"class":318},[203,82656,12525],{"class":213},[203,82658,285],{"class":262},[203,82660,30555],{"class":213},[203,82662,82663],{"class":205,"line":1290},[203,82664,82665],{"class":272},"\u002F\u002F Expected output: false\n",[194,82667,82669],{"className":50691,"code":82668,"language":50693,"meta":27,"style":27},"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",[200,82670,82671,82676,82681,82685,82690,82695],{"__ignoreMap":27},[203,82672,82673],{"class":205,"line":206},[203,82674,82675],{"class":213},"startsWith(searchString)\n",[203,82677,82678],{"class":205,"line":124},[203,82679,82680],{"class":213},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[203,82682,82683],{"class":205,"line":1269},[203,82684,2489],{"emptyLinePlaceholder":131},[203,82686,82687],{"class":205,"line":1284},[203,82688,82689],{"class":213},"const str3 = 'pink老师上课中'\n",[203,82691,82692],{"class":205,"line":1290},[203,82693,82694],{"class":213},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[203,82696,82697],{"class":205,"line":1304},[203,82698,82699],{"class":213},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23000,82701,82703],{"id":82702},"_410534-includes","4.10.5.3.4 includes",[19,82705,82706],{},"includes(searchString) includes(searchString, position)",[157,82708,82709],{},[160,82710,82711],{},"searchString:",[19,82713,82714,82715,82717,82718,82723,82724,82729,82730,21590,82733,82736,82737,82740],{},"一个要在 ",[200,82716,1389],{}," 中查找的字符串。",[452,82719,82722],{"href":82720,"rel":82721},"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",[23956],"不能是正则表达式","。所有非正则表达式的值都会被",[452,82725,82728],{"href":82726,"rel":82727},"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",[23956],"强制转换为字符串","，因此如果该参数被省略或传入 ",[200,82731,82732],{},"undefined",[200,82734,82735],{},"includes()"," 方法会在字符串中搜索 ",[200,82738,82739],{},"\"undefined\"","，这通常不是你想要的",[157,82742,82743],{"start":124},[160,82744,82745,1073],{},[200,82746,82747],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,82749,82750,82751,82754,82755],{},"在字符串中开始搜索 ",[200,82752,82753],{},"searchString"," 的位置。默认值为 ",[200,82756,405],{},[157,82758,82759],{"start":1269},[160,82760,82761],{},"返回值：",[19,82763,82764,82765,82767,82768,82772,82773],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[200,82766,82753],{}," 为空字符串的情况），则返回 ",[363,82769,82770],{},[200,82771,1452],{}," ，否则返回 ",[363,82774,82775],{},[200,82776,66078],{},[157,82778,82779],{"start":1284},[160,82780,82781],{},"异常：",[19,82783,82280,82784,13885,82786,82790],{},[200,82785,82753],{},[452,82787,82789],{"href":82720,"rel":82788},[23956],"是一个正则表达式","，则会抛出",[19,82792,82793],{},"只要是有就是true，不需要非得以谁开头结尾",[194,82795,82797],{"className":77553,"code":82796,"language":77555,"meta":27,"style":27},"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",[200,82798,82799,82810,82833,82852,82872,82894,82913],{"__ignoreMap":27},[203,82800,82801,82803,82805,82807],{"class":205,"line":206},[203,82802,6882],{"class":209},[203,82804,79833],{"class":213},[203,82806,259],{"class":209},[203,82808,82809],{"class":318}," \"To be, or not to be, that is the question.\"\n",[203,82811,82812,82814,82816,82819,82822,82824,82827,82830],{"class":205,"line":124},[203,82813,77590],{"class":213},[203,82815,58305],{"class":2052},[203,82817,82818],{"class":213},"(str.",[203,82820,82821],{"class":2052},"includes",[203,82823,214],{"class":213},[203,82825,82826],{"class":318},"\"To be\"",[203,82828,82829],{"class":213},"))",[203,82831,82832],{"class":272},"  \u002F\u002F true\n",[203,82834,82835,82837,82839,82841,82843,82845,82848,82850],{"class":205,"line":1269},[203,82836,77590],{"class":213},[203,82838,58305],{"class":2052},[203,82840,82818],{"class":213},[203,82842,82821],{"class":2052},[203,82844,214],{"class":213},[203,82846,82847],{"class":318},"\"question\"",[203,82849,82829],{"class":213},[203,82851,82832],{"class":272},[203,82853,82854,82856,82858,82860,82862,82864,82867,82869],{"class":205,"line":1284},[203,82855,77590],{"class":213},[203,82857,58305],{"class":2052},[203,82859,82818],{"class":213},[203,82861,82821],{"class":2052},[203,82863,214],{"class":213},[203,82865,82866],{"class":318},"\"nonexistent\"",[203,82868,82829],{"class":213},[203,82870,82871],{"class":272},"  \u002F\u002F false\n",[203,82873,82874,82876,82878,82880,82882,82884,82886,82888,82890,82892],{"class":205,"line":1290},[203,82875,77590],{"class":213},[203,82877,58305],{"class":2052},[203,82879,82818],{"class":213},[203,82881,82821],{"class":2052},[203,82883,214],{"class":213},[203,82885,82826],{"class":318},[203,82887,12525],{"class":213},[203,82889,431],{"class":262},[203,82891,82829],{"class":213},[203,82893,82871],{"class":272},[203,82895,82896,82898,82900,82902,82904,82906,82909,82911],{"class":205,"line":1304},[203,82897,77590],{"class":213},[203,82899,58305],{"class":2052},[203,82901,82818],{"class":213},[203,82903,82821],{"class":2052},[203,82905,214],{"class":213},[203,82907,82908],{"class":318},"\"TO BE\"",[203,82910,82829],{"class":213},[203,82912,82871],{"class":272},[203,82914,82915,82917,82919,82921,82923,82925,82927,82929],{"class":205,"line":1310},[203,82916,77590],{"class":213},[203,82918,58305],{"class":2052},[203,82920,82818],{"class":213},[203,82922,82821],{"class":2052},[203,82924,214],{"class":213},[203,82926,7742],{"class":318},[203,82928,82829],{"class":213},[203,82930,82832],{"class":272},[23000,82932,82934],{"id":82933},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[194,82936,82938],{"className":53125,"code":82937,"language":53127,"meta":27,"style":27},"\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",[200,82939,82940,82948,82956,82961,82966,82971,82976,82981,82989],{"__ignoreMap":27},[203,82941,82942,82944,82946],{"class":205,"line":206},[203,82943,1124],{"class":213},[203,82945,51858],{"class":51358},[203,82947,51365],{"class":213},[203,82949,82950,82952,82954],{"class":205,"line":124},[203,82951,52202],{"class":213},[203,82953,51871],{"class":51358},[203,82955,51365],{"class":213},[203,82957,82958],{"class":205,"line":1269},[203,82959,82960],{"class":213},"    const num = 10\n",[203,82962,82963],{"class":205,"line":1284},[203,82964,82965],{"class":213},"    \u002F\u002F 强制转换\n",[203,82967,82968],{"class":205,"line":1290},[203,82969,82970],{"class":213},"    console.log(String(num))\n",[203,82972,82973],{"class":205,"line":1304},[203,82974,82975],{"class":213},"    \u002F\u002F toString()方法转换\n",[203,82977,82978],{"class":205,"line":1310},[203,82979,82980],{"class":213},"    console.log(num.toString())\n",[203,82982,82983,82985,82987],{"class":205,"line":1401},[203,82984,52475],{"class":213},[203,82986,51871],{"class":51358},[203,82988,51365],{"class":213},[203,82990,82991,82993,82995],{"class":205,"line":1407},[203,82992,51843],{"class":213},[203,82994,51858],{"class":51358},[203,82996,51365],{"class":213},[23000,82998,83000],{"id":82999},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83002,83003],{},[25,83004],{"alt":27,"src":83005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[194,83007,83009],{"className":50691,"code":83008,"language":50693,"meta":27,"style":27},"\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",[200,83010,83011,83021,83035,83039,83047,83061,83081,83093,83101,83105,83113,83125,83133,83145,83150,83155,83160,83207,83223,83231,83239,83243],{"__ignoreMap":27},[203,83012,83013,83015,83017,83019],{"class":205,"line":206},[203,83014,51355],{"class":213},[203,83016,51359],{"class":51358},[203,83018,51362],{"class":2052},[203,83020,51365],{"class":213},[203,83022,83023,83025,83027,83029,83031,83033],{"class":205,"line":124},[203,83024,1124],{"class":213},[203,83026,50693],{"class":51358},[203,83028,51374],{"class":2052},[203,83030,259],{"class":213},[203,83032,51379],{"class":318},[203,83034,51365],{"class":213},[203,83036,83037],{"class":205,"line":1269},[203,83038,2489],{"emptyLinePlaceholder":131},[203,83040,83041,83043,83045],{"class":205,"line":1284},[203,83042,1124],{"class":213},[203,83044,51392],{"class":51358},[203,83046,51365],{"class":213},[203,83048,83049,83051,83053,83055,83057,83059],{"class":205,"line":1290},[203,83050,52202],{"class":213},[203,83052,51402],{"class":51358},[203,83054,51405],{"class":2052},[203,83056,259],{"class":213},[203,83058,51410],{"class":318},[203,83060,51365],{"class":213},[203,83062,83063,83065,83067,83069,83071,83073,83075,83077,83079],{"class":205,"line":1304},[203,83064,52202],{"class":213},[203,83066,51402],{"class":51358},[203,83068,15010],{"class":2052},[203,83070,259],{"class":213},[203,83072,51449],{"class":318},[203,83074,51429],{"class":2052},[203,83076,259],{"class":213},[203,83078,51456],{"class":318},[203,83080,51365],{"class":213},[203,83082,83083,83085,83087,83089,83091],{"class":205,"line":1310},[203,83084,52202],{"class":213},[203,83086,51465],{"class":51358},[203,83088,51468],{"class":213},[203,83090,51465],{"class":51358},[203,83092,51365],{"class":213},[203,83094,83095,83097,83099],{"class":205,"line":1401},[203,83096,51843],{"class":213},[203,83098,51392],{"class":51358},[203,83100,51365],{"class":213},[203,83102,83103],{"class":205,"line":1407},[203,83104,2489],{"emptyLinePlaceholder":131},[203,83106,83107,83109,83111],{"class":205,"line":1419},[203,83108,1124],{"class":213},[203,83110,51858],{"class":51358},[203,83112,51365],{"class":213},[203,83114,83115,83117,83119,83121,83123],{"class":205,"line":1701},[203,83116,52202],{"class":213},[203,83118,51669],{"class":51358},[203,83120,55372],{"class":213},[203,83122,51669],{"class":51358},[203,83124,51365],{"class":213},[203,83126,83127,83129,83131],{"class":205,"line":1706},[203,83128,52202],{"class":213},[203,83130,51871],{"class":51358},[203,83132,51365],{"class":213},[203,83134,83135,83137,83140,83142],{"class":205,"line":1712},[203,83136,11311],{"class":209},[203,83138,83139],{"class":262}," gift",[203,83141,13654],{"class":209},[203,83143,83144],{"class":318}," '50g的茶叶，清洗球'\n",[203,83146,83147],{"class":205,"line":1717},[203,83148,83149],{"class":272},"    \u002F\u002F 1.把字符串拆分为数组\n",[203,83151,83152],{"class":205,"line":1731},[203,83153,83154],{"class":272},"    \u002F\u002F console.log(gift.split(','))\n",[203,83156,83157],{"class":205,"line":1736},[203,83158,83159],{"class":272},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[203,83161,83162,83164,83166,83168,83171,83174,83176,83179,83181,83183,83185,83187,83189,83192,83194,83197,83199,83201,83203,83205],{"class":205,"line":1742},[203,83163,11311],{"class":209},[203,83165,73977],{"class":262},[203,83167,13654],{"class":209},[203,83169,83170],{"class":213}," gift.",[203,83172,83173],{"class":2052},"split",[203,83175,214],{"class":213},[203,83177,83178],{"class":318},"'，'",[203,83180,30884],{"class":213},[203,83182,74102],{"class":2052},[203,83184,214],{"class":213},[203,83186,79853],{"class":5306},[203,83188,79856],{"class":209},[203,83190,83191],{"class":318}," `\u003Cspan>【赠品】${",[203,83193,79853],{"class":213},[203,83195,83196],{"class":318},"}\u003C\u002Fspan>\u003Cbr>`",[203,83198,30884],{"class":213},[203,83200,74281],{"class":2052},[203,83202,214],{"class":213},[203,83204,74286],{"class":318},[203,83206,220],{"class":213},[203,83208,83209,83211,83213,83215,83217,83219,83221],{"class":205,"line":1763},[203,83210,52465],{"class":213},[203,83212,54457],{"class":2052},[203,83214,214],{"class":213},[203,83216,81989],{"class":318},[203,83218,74307],{"class":213},[203,83220,259],{"class":209},[203,83222,74043],{"class":213},[203,83224,83225,83227,83229],{"class":205,"line":1768},[203,83226,52475],{"class":213},[203,83228,51871],{"class":51358},[203,83230,51365],{"class":213},[203,83232,83233,83235,83237],{"class":205,"line":1782},[203,83234,51843],{"class":213},[203,83236,51858],{"class":51358},[203,83238,51365],{"class":213},[203,83240,83241],{"class":205,"line":1787},[203,83242,2489],{"emptyLinePlaceholder":131},[203,83244,83245,83247,83249],{"class":205,"line":1816},[203,83246,51843],{"class":213},[203,83248,50693],{"class":51358},[203,83250,51365],{"class":213},[22088,83252,83254],{"id":83253},"_41054-number","4.10.5.4 Number",[19,83256,83257],{},[25,83258],{"alt":27,"src":83259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83261,83262],{},"整数也可以进行toFixed来保留小数",[19,83264,83265],{},"比如：",[19,83267,83268],{},"const price=10",[19,83270,83271],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22088,83273,83275],{"id":83274},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83277,83278],{},[25,83279],{"alt":27,"src":83280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[194,83282,83284],{"className":50691,"code":83283,"language":50693,"meta":27,"style":27},"\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",[200,83285,83286,83296,83310,83314,83322,83336,83356,83368,83376,83382,83392,83402,83412,83416,83420,83426,83438,83452,83456,83460,83466,83478,83494,83504,83520,83524,83528,83534,83544,83554,83558,83562,83570,83582,83594,83606,83610,83614,83622,83634,83638,83642,83653,83663,83675,83687,83697,83701,83705,83713,83722,83734,83744,83754,83758,83762,83770,83779,83786,83796,83808,83812,83816,83825,83835,83846,83858,83870,83874,83878,83887,83897,83908,83912,83916,83922,83934,83946,83956,83966,83984,83996,84000,84004,84013,84025,84035,84045,84057,84061,84069,84077,84081,84089,84103,84111,84125,84153,84161,84169,84179,84183,84191,84199,84208,84216,84225,84235,84239,84243,84251,84259,84268,84276,84284,84297,84301,84305,84313,84321,84330,84338,84346,84361,84365,84369,84377,84385,84394,84402,84410,84424,84432,84436,84440,84445,84471,84476,84513,84518,84541,84546,84600,84605,84641,84645,84651,84656,84665,84679,84688,84707,84716,84726,84731,84736,84749,84754,84808,84834,84842,84850,84854],{"__ignoreMap":27},[203,83287,83288,83290,83292,83294],{"class":205,"line":206},[203,83289,51355],{"class":213},[203,83291,51359],{"class":51358},[203,83293,51362],{"class":2052},[203,83295,51365],{"class":213},[203,83297,83298,83300,83302,83304,83306,83308],{"class":205,"line":124},[203,83299,1124],{"class":213},[203,83301,50693],{"class":51358},[203,83303,51374],{"class":2052},[203,83305,259],{"class":213},[203,83307,51379],{"class":318},[203,83309,51365],{"class":213},[203,83311,83312],{"class":205,"line":1269},[203,83313,2489],{"emptyLinePlaceholder":131},[203,83315,83316,83318,83320],{"class":205,"line":1284},[203,83317,1124],{"class":213},[203,83319,51392],{"class":51358},[203,83321,51365],{"class":213},[203,83323,83324,83326,83328,83330,83332,83334],{"class":205,"line":1290},[203,83325,52202],{"class":213},[203,83327,51402],{"class":51358},[203,83329,51405],{"class":2052},[203,83331,259],{"class":213},[203,83333,51410],{"class":318},[203,83335,51365],{"class":213},[203,83337,83338,83340,83342,83344,83346,83348,83350,83352,83354],{"class":205,"line":1304},[203,83339,52202],{"class":213},[203,83341,51402],{"class":51358},[203,83343,15010],{"class":2052},[203,83345,259],{"class":213},[203,83347,51449],{"class":318},[203,83349,51429],{"class":2052},[203,83351,259],{"class":213},[203,83353,51456],{"class":318},[203,83355,51365],{"class":213},[203,83357,83358,83360,83362,83364,83366],{"class":205,"line":1310},[203,83359,52202],{"class":213},[203,83361,51465],{"class":51358},[203,83363,51468],{"class":213},[203,83365,51465],{"class":51358},[203,83367,51365],{"class":213},[203,83369,83370,83372,83374],{"class":205,"line":1401},[203,83371,52202],{"class":213},[203,83373,5216],{"class":51358},[203,83375,51365],{"class":213},[203,83377,83378,83380],{"class":205,"line":1407},[203,83379,6493],{"class":51358},[203,83381,15662],{"class":213},[203,83383,83384,83386,83388,83390],{"class":205,"line":1419},[203,83385,54753],{"class":262},[203,83387,51495],{"class":213},[203,83389,405],{"class":262},[203,83391,1380],{"class":213},[203,83393,83394,83396,83398,83400],{"class":205,"line":1701},[203,83395,54764],{"class":262},[203,83397,51495],{"class":213},[203,83399,405],{"class":262},[203,83401,1380],{"class":213},[203,83403,83404,83406,83408,83410],{"class":205,"line":1706},[203,83405,72654],{"class":262},[203,83407,51495],{"class":213},[203,83409,60563],{"class":262},[203,83411,1380],{"class":213},[203,83413,83414],{"class":205,"line":1712},[203,83415,2276],{"class":213},[203,83417,83418],{"class":205,"line":1717},[203,83419,2489],{"emptyLinePlaceholder":131},[203,83421,83422,83424],{"class":205,"line":1731},[203,83423,62181],{"class":2052},[203,83425,15662],{"class":213},[203,83427,83428,83430,83432,83434,83436],{"class":205,"line":1736},[203,83429,54829],{"class":262},[203,83431,51495],{"class":213},[203,83433,78632],{"class":262},[203,83435,51550],{"class":209},[203,83437,1380],{"class":213},[203,83439,83440,83442,83444,83446,83448,83450],{"class":205,"line":1742},[203,83441,54764],{"class":262},[203,83443,51495],{"class":213},[203,83445,525],{"class":262},[203,83447,51550],{"class":209},[203,83449,51614],{"class":262},[203,83451,1380],{"class":213},[203,83453,83454],{"class":205,"line":1763},[203,83455,2276],{"class":213},[203,83457,83458],{"class":205,"line":1768},[203,83459,2489],{"emptyLinePlaceholder":131},[203,83461,83462,83464],{"class":205,"line":1782},[203,83463,78683],{"class":2052},[203,83465,15662],{"class":213},[203,83467,83468,83470,83472,83474,83476],{"class":205,"line":1787},[203,83469,54753],{"class":262},[203,83471,51495],{"class":213},[203,83473,789],{"class":262},[203,83475,51550],{"class":209},[203,83477,1380],{"class":213},[203,83479,83480,83482,83484,83486,83488,83490,83492],{"class":205,"line":1816},[203,83481,61918],{"class":262},[203,83483,51495],{"class":213},[203,83485,28179],{"class":262},[203,83487,78738],{"class":262},[203,83489,78741],{"class":262},[203,83491,909],{"class":209},[203,83493,1380],{"class":213},[203,83495,83496,83498,83500,83502],{"class":205,"line":1821},[203,83497,55067],{"class":262},[203,83499,51495],{"class":213},[203,83501,51535],{"class":262},[203,83503,1380],{"class":213},[203,83505,83506,83508,83510,83512,83514,83516,83518],{"class":205,"line":1838},[203,83507,62035],{"class":262},[203,83509,51495],{"class":213},[203,83511,431],{"class":262},[203,83513,51550],{"class":209},[203,83515,51579],{"class":262},[203,83517,62302],{"class":262},[203,83519,1380],{"class":213},[203,83521,83522],{"class":205,"line":1843},[203,83523,2276],{"class":213},[203,83525,83526],{"class":205,"line":1848},[203,83527,2489],{"emptyLinePlaceholder":131},[203,83529,83530,83532],{"class":205,"line":1853},[203,83531,78801],{"class":2052},[203,83533,15662],{"class":213},[203,83535,83536,83538,83540,83542],{"class":205,"line":1867},[203,83537,62083],{"class":262},[203,83539,51495],{"class":213},[203,83541,62088],{"class":262},[203,83543,1380],{"class":213},[203,83545,83546,83548,83550,83552],{"class":205,"line":1872},[203,83547,54942],{"class":262},[203,83549,51495],{"class":213},[203,83551,61876],{"class":262},[203,83553,1380],{"class":213},[203,83555,83556],{"class":205,"line":2666},[203,83557,2276],{"class":213},[203,83559,83560],{"class":205,"line":2680},[203,83561,2489],{"emptyLinePlaceholder":131},[203,83563,83564,83566,83568],{"class":205,"line":2688},[203,83565,78683],{"class":2052},[203,83567,55673],{"class":51358},[203,83569,15662],{"class":213},[203,83571,83572,83574,83576,83578,83580],{"class":205,"line":2693},[203,83573,54829],{"class":262},[203,83575,51495],{"class":213},[203,83577,826],{"class":262},[203,83579,51550],{"class":209},[203,83581,1380],{"class":213},[203,83583,83584,83586,83588,83590,83592],{"class":205,"line":2699},[203,83585,54843],{"class":262},[203,83587,51495],{"class":213},[203,83589,826],{"class":262},[203,83591,51550],{"class":209},[203,83593,1380],{"class":213},[203,83595,83596,83598,83600,83602,83604],{"class":205,"line":2705},[203,83597,61808],{"class":262},[203,83599,51495],{"class":213},[203,83601,533],{"class":262},[203,83603,51550],{"class":209},[203,83605,1380],{"class":213},[203,83607,83608],{"class":205,"line":2710},[203,83609,2276],{"class":213},[203,83611,83612],{"class":205,"line":8038},[203,83613,2489],{"emptyLinePlaceholder":131},[203,83615,83616,83618,83620],{"class":205,"line":8062},[203,83617,78683],{"class":2052},[203,83619,62362],{"class":2052},[203,83621,15662],{"class":213},[203,83623,83624,83626,83628,83630,83632],{"class":205,"line":8067},[203,83625,54829],{"class":262},[203,83627,51495],{"class":213},[203,83629,1811],{"class":262},[203,83631,51550],{"class":209},[203,83633,1380],{"class":213},[203,83635,83636],{"class":205,"line":8073},[203,83637,2276],{"class":213},[203,83639,83640],{"class":205,"line":8100},[203,83641,2489],{"emptyLinePlaceholder":131},[203,83643,83644,83646,83648,83651],{"class":205,"line":8105},[203,83645,78683],{"class":2052},[203,83647,62362],{"class":2052},[203,83649,83650],{"class":2052}," .tag",[203,83652,15662],{"class":213},[203,83654,83655,83657,83659,83661],{"class":205,"line":8111},[203,83656,55067],{"class":262},[203,83658,51495],{"class":213},[203,83660,60927],{"class":262},[203,83662,1380],{"class":213},[203,83664,83665,83667,83669,83671,83673],{"class":205,"line":8123},[203,83666,54753],{"class":262},[203,83668,51495],{"class":213},[203,83670,291],{"class":262},[203,83672,51550],{"class":209},[203,83674,1380],{"class":213},[203,83676,83677,83679,83681,83683,83685],{"class":205,"line":8135},[203,83678,54980],{"class":262},[203,83680,51495],{"class":213},[203,83682,712],{"class":262},[203,83684,51550],{"class":209},[203,83686,1380],{"class":213},[203,83688,83689,83691,83693,83695],{"class":205,"line":8147},[203,83690,57474],{"class":262},[203,83692,51495],{"class":213},[203,83694,62128],{"class":262},[203,83696,1380],{"class":213},[203,83698,83699],{"class":205,"line":9806},[203,83700,2276],{"class":213},[203,83702,83703],{"class":205,"line":9831},[203,83704,2489],{"emptyLinePlaceholder":131},[203,83706,83707,83709,83711],{"class":205,"line":9854},[203,83708,78683],{"class":2052},[203,83710,78975],{"class":2052},[203,83712,31524],{"class":213},[203,83714,83715,83717,83720],{"class":205,"line":9878},[203,83716,78683],{"class":2052},[203,83718,83719],{"class":2052}," .sub-total",[203,83721,15662],{"class":213},[203,83723,83724,83726,83728,83730,83732],{"class":205,"line":9883},[203,83725,54980],{"class":262},[203,83727,51495],{"class":213},[203,83729,864],{"class":262},[203,83731,51550],{"class":209},[203,83733,1380],{"class":213},[203,83735,83736,83738,83740,83742],{"class":205,"line":9888},[203,83737,57474],{"class":262},[203,83739,51495],{"class":213},[203,83741,78998],{"class":262},[203,83743,1380],{"class":213},[203,83745,83746,83748,83750,83752],{"class":205,"line":9893},[203,83747,61895],{"class":262},[203,83749,51495],{"class":213},[203,83751,431],{"class":262},[203,83753,1380],{"class":213},[203,83755,83756],{"class":205,"line":9902},[203,83757,2276],{"class":213},[203,83759,83760],{"class":205,"line":9907},[203,83761,2489],{"emptyLinePlaceholder":131},[203,83763,83764,83766,83768],{"class":205,"line":9913},[203,83765,78683],{"class":2052},[203,83767,79015],{"class":2052},[203,83769,31524],{"class":213},[203,83771,83772,83774,83777],{"class":205,"line":9934},[203,83773,78683],{"class":2052},[203,83775,83776],{"class":2052}," .sub-total::before",[203,83778,31524],{"class":213},[203,83780,83781,83784],{"class":205,"line":9940},[203,83782,83783],{"class":2052},"    .amount::before",[203,83785,15662],{"class":213},[203,83787,83788,83790,83792,83794],{"class":205,"line":9954},[203,83789,79022],{"class":262},[203,83791,51495],{"class":213},[203,83793,79027],{"class":318},[203,83795,1380],{"class":213},[203,83797,83798,83800,83802,83804,83806],{"class":205,"line":9960},[203,83799,54980],{"class":262},[203,83801,51495],{"class":213},[203,83803,712],{"class":262},[203,83805,51550],{"class":209},[203,83807,1380],{"class":213},[203,83809,83810],{"class":205,"line":9987},[203,83811,2276],{"class":213},[203,83813,83814],{"class":205,"line":9996},[203,83815,2489],{"emptyLinePlaceholder":131},[203,83817,83818,83820,83823],{"class":205,"line":10002},[203,83819,78683],{"class":2052},[203,83821,83822],{"class":2052}," .spec",[203,83824,15662],{"class":213},[203,83826,83827,83829,83831,83833],{"class":205,"line":10010},[203,83828,61895],{"class":262},[203,83830,51495],{"class":213},[203,83832,291],{"class":262},[203,83834,1380],{"class":213},[203,83836,83837,83839,83841,83844],{"class":205,"line":10015},[203,83838,57474],{"class":262},[203,83840,51495],{"class":213},[203,83842,83843],{"class":262},"#888",[203,83845,1380],{"class":213},[203,83847,83848,83850,83852,83854,83856],{"class":205,"line":16694},[203,83849,54980],{"class":262},[203,83851,51495],{"class":213},[203,83853,763],{"class":262},[203,83855,51550],{"class":209},[203,83857,1380],{"class":213},[203,83859,83860,83862,83864,83866,83868],{"class":205,"line":16700},[203,83861,62058],{"class":262},[203,83863,51495],{"class":213},[203,83865,914],{"class":262},[203,83867,51550],{"class":209},[203,83869,1380],{"class":213},[203,83871,83872],{"class":205,"line":16723},[203,83873,2276],{"class":213},[203,83875,83876],{"class":205,"line":16729},[203,83877,2489],{"emptyLinePlaceholder":131},[203,83879,83880,83882,83885],{"class":205,"line":16752},[203,83881,78683],{"class":2052},[203,83883,83884],{"class":2052}," .count",[203,83886,15662],{"class":213},[203,83888,83889,83891,83893,83895],{"class":205,"line":16766},[203,83890,61895],{"class":262},[203,83892,51495],{"class":213},[203,83894,431],{"class":262},[203,83896,1380],{"class":213},[203,83898,83899,83901,83903,83906],{"class":205,"line":16786},[203,83900,57474],{"class":262},[203,83902,51495],{"class":213},[203,83904,83905],{"class":262},"#aaa",[203,83907,1380],{"class":213},[203,83909,83910],{"class":205,"line":16792},[203,83911,2276],{"class":213},[203,83913,83914],{"class":205,"line":16803},[203,83915,2489],{"emptyLinePlaceholder":131},[203,83917,83918,83920],{"class":205,"line":16826},[203,83919,72533],{"class":2052},[203,83921,15662],{"class":213},[203,83923,83924,83926,83928,83930,83932],{"class":205,"line":16848},[203,83925,54829],{"class":262},[203,83927,51495],{"class":213},[203,83929,78632],{"class":262},[203,83931,51550],{"class":209},[203,83933,1380],{"class":213},[203,83935,83936,83938,83940,83942,83944],{"class":205,"line":16853},[203,83937,54764],{"class":262},[203,83939,51495],{"class":213},[203,83941,405],{"class":262},[203,83943,51614],{"class":262},[203,83945,1380],{"class":213},[203,83947,83948,83950,83952,83954],{"class":205,"line":16859},[203,83949,55067],{"class":262},[203,83951,51495],{"class":213},[203,83953,51535],{"class":262},[203,83955,1380],{"class":213},[203,83957,83958,83960,83962,83964],{"class":205,"line":16873},[203,83959,55078],{"class":262},[203,83961,51495],{"class":213},[203,83963,51638],{"class":262},[203,83965,1380],{"class":213},[203,83967,83968,83971,83973,83975,83977,83979,83982],{"class":205,"line":16886},[203,83969,83970],{"class":262},"      border-top",[203,83972,51495],{"class":213},[203,83974,431],{"class":262},[203,83976,51550],{"class":209},[203,83978,51579],{"class":262},[203,83980,83981],{"class":262}," #4e4e4e",[203,83983,1380],{"class":213},[203,83985,83986,83988,83990,83992,83994],{"class":205,"line":16891},[203,83987,54753],{"class":262},[203,83989,51495],{"class":213},[203,83991,914],{"class":262},[203,83993,51550],{"class":209},[203,83995,1380],{"class":213},[203,83997,83998],{"class":205,"line":16905},[203,83999,2276],{"class":213},[203,84001,84002],{"class":205,"line":16910},[203,84003,2489],{"emptyLinePlaceholder":131},[203,84005,84006,84008,84011],{"class":205,"line":16916},[203,84007,72533],{"class":2052},[203,84009,84010],{"class":2052}," .amount",[203,84012,15662],{"class":213},[203,84014,84015,84017,84019,84021,84023],{"class":205,"line":16921},[203,84016,54980],{"class":262},[203,84018,51495],{"class":213},[203,84020,864],{"class":262},[203,84022,51550],{"class":209},[203,84024,1380],{"class":213},[203,84026,84027,84029,84031,84033],{"class":205,"line":16935},[203,84028,57474],{"class":262},[203,84030,51495],{"class":213},[203,84032,78998],{"class":262},[203,84034,1380],{"class":213},[203,84036,84037,84039,84041,84043],{"class":205,"line":16940},[203,84038,62392],{"class":262},[203,84040,51495],{"class":213},[203,84042,51547],{"class":262},[203,84044,1380],{"class":213},[203,84046,84047,84049,84051,84053,84055],{"class":205,"line":16945},[203,84048,61808],{"class":262},[203,84050,51495],{"class":213},[203,84052,870],{"class":262},[203,84054,51550],{"class":209},[203,84056,1380],{"class":213},[203,84058,84059],{"class":205,"line":16959},[203,84060,2276],{"class":213},[203,84062,84063,84065,84067],{"class":205,"line":16971},[203,84064,52475],{"class":213},[203,84066,5216],{"class":51358},[203,84068,51365],{"class":213},[203,84070,84071,84073,84075],{"class":205,"line":16976},[203,84072,51843],{"class":213},[203,84074,51392],{"class":51358},[203,84076,51365],{"class":213},[203,84078,84079],{"class":205,"line":16989},[203,84080,2489],{"emptyLinePlaceholder":131},[203,84082,84083,84085,84087],{"class":205,"line":16994},[203,84084,1124],{"class":213},[203,84086,51858],{"class":51358},[203,84088,51365],{"class":213},[203,84090,84091,84093,84095,84097,84099,84101],{"class":205,"line":16999},[203,84092,52202],{"class":213},[203,84094,51669],{"class":51358},[203,84096,53544],{"class":2052},[203,84098,259],{"class":213},[203,84100,62666],{"class":318},[203,84102,51365],{"class":213},[203,84104,84105,84107,84109],{"class":205,"line":17004},[203,84106,52475],{"class":213},[203,84108,51669],{"class":51358},[203,84110,51365],{"class":213},[203,84112,84113,84115,84117,84119,84121,84123],{"class":205,"line":17017},[203,84114,52202],{"class":213},[203,84116,51669],{"class":51358},[203,84118,53544],{"class":2052},[203,84120,259],{"class":213},[203,84122,62638],{"class":318},[203,84124,51365],{"class":213},[203,84126,84127,84129,84131,84134,84136,84138,84140,84143,84145,84147,84149,84151],{"class":205,"line":17022},[203,84128,51399],{"class":213},[203,84130,51669],{"class":51358},[203,84132,84133],{"class":213},">合计：\u003C",[203,84135,203],{"class":51358},[203,84137,53544],{"class":2052},[203,84139,259],{"class":213},[203,84141,84142],{"class":318},"\"amount\"",[203,84144,55372],{"class":213},[203,84146,203],{"class":51358},[203,84148,55372],{"class":213},[203,84150,51669],{"class":51358},[203,84152,51365],{"class":213},[203,84154,84155,84157,84159],{"class":205,"line":32691},[203,84156,52475],{"class":213},[203,84158,51669],{"class":51358},[203,84160,51365],{"class":213},[203,84162,84163,84165,84167],{"class":205,"line":32697},[203,84164,52202],{"class":213},[203,84166,51871],{"class":51358},[203,84168,51365],{"class":213},[203,84170,84171,84173,84175,84177],{"class":205,"line":32703},[203,84172,11311],{"class":209},[203,84174,79435],{"class":262},[203,84176,13654],{"class":209},[203,84178,55505],{"class":213},[203,84180,84181],{"class":205,"line":32709},[203,84182,79444],{"class":213},[203,84184,84185,84187,84189],{"class":205,"line":32715},[203,84186,79449],{"class":213},[203,84188,79452],{"class":318},[203,84190,31524],{"class":213},[203,84192,84193,84195,84197],{"class":205,"line":32726},[203,84194,79459],{"class":213},[203,84196,79462],{"class":318},[203,84198,31524],{"class":213},[203,84200,84201,84203,84206],{"class":205,"line":32732},[203,84202,79469],{"class":213},[203,84204,84205],{"class":262},"289.9",[203,84207,31524],{"class":213},[203,84209,84210,84212,84214],{"class":205,"line":32752},[203,84211,79479],{"class":213},[203,84213,79482],{"class":318},[203,84215,31524],{"class":213},[203,84217,84218,84221,84223],{"class":205,"line":32758},[203,84219,84220],{"class":213},"        count: ",[203,84222,291],{"class":262},[203,84224,31524],{"class":213},[203,84226,84227,84230,84233],{"class":205,"line":32769},[203,84228,84229],{"class":213},"        spec: { color: ",[203,84231,84232],{"class":318},"'白色'",[203,84234,55662],{"class":213},[203,84236,84237],{"class":205,"line":32775},[203,84238,77950],{"class":213},[203,84240,84241],{"class":205,"line":32781},[203,84242,79444],{"class":213},[203,84244,84245,84247,84249],{"class":205,"line":32787},[203,84246,79449],{"class":213},[203,84248,79543],{"class":318},[203,84250,31524],{"class":213},[203,84252,84253,84255,84257],{"class":205,"line":32793},[203,84254,79459],{"class":213},[203,84256,79552],{"class":318},[203,84258,31524],{"class":213},[203,84260,84261,84263,84266],{"class":205,"line":32799},[203,84262,79469],{"class":213},[203,84264,84265],{"class":262},"109.8",[203,84267,31524],{"class":213},[203,84269,84270,84272,84274],{"class":205,"line":32805},[203,84271,79479],{"class":213},[203,84273,79570],{"class":318},[203,84275,31524],{"class":213},[203,84277,84278,84280,84282],{"class":205,"line":32811},[203,84279,84220],{"class":213},[203,84281,285],{"class":262},[203,84283,31524],{"class":213},[203,84285,84286,84289,84291,84293,84295],{"class":205,"line":32831},[203,84287,84288],{"class":213},"        spec: { size: ",[203,84290,81961],{"class":318},[203,84292,55522],{"class":213},[203,84294,81966],{"class":318},[203,84296,55662],{"class":213},[203,84298,84299],{"class":205,"line":32837},[203,84300,77950],{"class":213},[203,84302,84303],{"class":205,"line":32853},[203,84304,79444],{"class":213},[203,84306,84307,84309,84311],{"class":205,"line":32859},[203,84308,79449],{"class":213},[203,84310,79587],{"class":318},[203,84312,31524],{"class":213},[203,84314,84315,84317,84319],{"class":205,"line":32873},[203,84316,79459],{"class":213},[203,84318,79596],{"class":318},[203,84320,31524],{"class":213},[203,84322,84323,84325,84328],{"class":205,"line":32879},[203,84324,79469],{"class":213},[203,84326,84327],{"class":262},"488",[203,84329,31524],{"class":213},[203,84331,84332,84334,84336],{"class":205,"line":32894},[203,84333,79479],{"class":213},[203,84335,79614],{"class":318},[203,84337,31524],{"class":213},[203,84339,84340,84342,84344],{"class":205,"line":32900},[203,84341,84220],{"class":213},[203,84343,431],{"class":262},[203,84345,31524],{"class":213},[203,84347,84348,84350,84353,84356,84359],{"class":205,"line":32909},[203,84349,84229],{"class":213},[203,84351,84352],{"class":318},"'青色'",[203,84354,84355],{"class":213},", sum: ",[203,84357,84358],{"class":318},"'一大四小'",[203,84360,55662],{"class":213},[203,84362,84363],{"class":205,"line":32915},[203,84364,77950],{"class":213},[203,84366,84367],{"class":205,"line":32924},[203,84368,79444],{"class":213},[203,84370,84371,84373,84375],{"class":205,"line":32930},[203,84372,79449],{"class":213},[203,84374,79631],{"class":318},[203,84376,31524],{"class":213},[203,84378,84379,84381,84383],{"class":205,"line":32936},[203,84380,79459],{"class":213},[203,84382,79640],{"class":318},[203,84384,31524],{"class":213},[203,84386,84387,84389,84392],{"class":205,"line":32945},[203,84388,79469],{"class":213},[203,84390,84391],{"class":262},"139",[203,84393,31524],{"class":213},[203,84395,84396,84398,84400],{"class":205,"line":32951},[203,84397,79479],{"class":213},[203,84399,79658],{"class":318},[203,84401,31524],{"class":213},[203,84403,84404,84406,84408],{"class":205,"line":32962},[203,84405,84220],{"class":213},[203,84407,431],{"class":262},[203,84409,31524],{"class":213},[203,84411,84412,84414,84417,84419,84422],{"class":205,"line":32968},[203,84413,84288],{"class":213},[203,84415,84416],{"class":318},"'小号'",[203,84418,55522],{"class":213},[203,84420,84421],{"class":318},"'紫色'",[203,84423,55528],{"class":213},[203,84425,84426,84429],{"class":205,"line":32987},[203,84427,84428],{"class":213},"        gift: ",[203,84430,84431],{"class":318},"'50g茶叶,清洗球'\n",[203,84433,84434],{"class":205,"line":32993},[203,84435,52456],{"class":213},[203,84437,84438],{"class":205,"line":33004},[203,84439,53167],{"class":213},[203,84441,84442],{"class":205,"line":33010},[203,84443,84444],{"class":272},"    \u002F\u002F  1.根据数据渲染页面\n",[203,84446,84447,84449,84451,84453,84455,84457,84459,84461,84463,84465,84467,84469],{"class":205,"line":33030},[203,84448,52465],{"class":213},[203,84450,54457],{"class":2052},[203,84452,214],{"class":213},[203,84454,79959],{"class":318},[203,84456,74307],{"class":213},[203,84458,259],{"class":209},[203,84460,80106],{"class":213},[203,84462,74102],{"class":2052},[203,84464,214],{"class":213},[203,84466,79853],{"class":5306},[203,84468,79856],{"class":209},[203,84470,15662],{"class":213},[203,84472,84473],{"class":205,"line":33046},[203,84474,84475],{"class":272},"      \u002F\u002F 对象解构\n",[203,84477,84478,84480,84482,84484,84486,84488,84490,84493,84495,84497,84499,84502,84504,84507,84509,84511],{"class":205,"line":33052},[203,84479,58286],{"class":209},[203,84481,79865],{"class":213},[203,84483,79878],{"class":262},[203,84485,12525],{"class":213},[203,84487,79868],{"class":262},[203,84489,12525],{"class":213},[203,84491,84492],{"class":262},"count",[203,84494,12525],{"class":213},[203,84496,79873],{"class":262},[203,84498,12525],{"class":213},[203,84500,84501],{"class":262},"spec",[203,84503,12525],{"class":213},[203,84505,84506],{"class":262},"gift",[203,84508,79881],{"class":213},[203,84510,259],{"class":209},[203,84512,79886],{"class":213},[203,84514,84515],{"class":205,"line":33066},[203,84516,84517],{"class":272},"      \u002F\u002F 规格文字模块处理\n",[203,84519,84520,84522,84525,84527,84529,84531,84533,84535,84537,84539],{"class":205,"line":33072},[203,84521,58286],{"class":209},[203,84523,84524],{"class":262}," text",[203,84526,13654],{"class":209},[203,84528,81996],{"class":213},[203,84530,81999],{"class":2052},[203,84532,82002],{"class":213},[203,84534,74281],{"class":2052},[203,84536,214],{"class":213},[203,84538,82009],{"class":318},[203,84540,220],{"class":213},[203,84542,84543],{"class":205,"line":33078},[203,84544,84545],{"class":272},"      \u002F\u002F 处理赠品模块\n",[203,84547,84548,84550,84552,84554,84557,84559,84561,84563,84565,84568,84570,84572,84574,84576,84578,84581,84583,84586,84588,84590,84592,84594,84596,84598],{"class":205,"line":33089},[203,84549,58286],{"class":209},[203,84551,73977],{"class":262},[203,84553,13654],{"class":209},[203,84555,84556],{"class":213}," gift ",[203,84558,1200],{"class":209},[203,84560,83170],{"class":213},[203,84562,83173],{"class":2052},[203,84564,214],{"class":213},[203,84566,84567],{"class":318},"','",[203,84569,30884],{"class":213},[203,84571,74102],{"class":2052},[203,84573,214],{"class":213},[203,84575,79853],{"class":5306},[203,84577,79856],{"class":209},[203,84579,84580],{"class":318}," `\u003Cspan class=\"tag\">【赠品】${",[203,84582,79853],{"class":213},[203,84584,84585],{"class":318},"}\u003C\u002Fspan>`",[203,84587,30884],{"class":213},[203,84589,74281],{"class":2052},[203,84591,214],{"class":213},[203,84593,74286],{"class":318},[203,84595,13804],{"class":213},[203,84597,1073],{"class":209},[203,84599,70162],{"class":318},[203,84601,84602],{"class":205,"line":33095},[203,84603,84604],{"class":272},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[203,84606,84607,84609,84612,84614,84617,84619,84621,84623,84626,84628,84630,84632,84635,84637,84639],{"class":205,"line":33101},[203,84608,58286],{"class":209},[203,84610,84611],{"class":262}," subtotal",[203,84613,13654],{"class":209},[203,84615,84616],{"class":213}," ((price ",[203,84618,669],{"class":209},[203,84620,5844],{"class":262},[203,84622,6608],{"class":209},[203,84624,84625],{"class":213}," count) ",[203,84627,798],{"class":209},[203,84629,5844],{"class":262},[203,84631,30884],{"class":213},[203,84633,84634],{"class":2052},"toFixed",[203,84636,214],{"class":213},[203,84638,291],{"class":262},[203,84640,220],{"class":213},[203,84642,84643],{"class":205,"line":33111},[203,84644,2489],{"emptyLinePlaceholder":131},[203,84646,84647,84649],{"class":205,"line":33117},[203,84648,74040],{"class":209},[203,84650,70226],{"class":318},[203,84652,84653],{"class":205,"line":33128},[203,84654,84655],{"class":318},"        \u003Cdiv class=\"item\">\n",[203,84657,84658,84661,84663],{"class":205,"line":33134},[203,84659,84660],{"class":318},"          \u003Cimg src=\"${",[203,84662,79878],{"class":213},[203,84664,79910],{"class":318},[203,84666,84667,84670,84672,84675,84677],{"class":205,"line":33144},[203,84668,84669],{"class":318},"          \u003Cp class=\"name\">${",[203,84671,79868],{"class":213},[203,84673,84674],{"class":318},"}${",[203,84676,1389],{"class":213},[203,84678,79920],{"class":318},[203,84680,84681,84684,84686],{"class":205,"line":33149},[203,84682,84683],{"class":318},"          \u003Cp class=\"spec\">${",[203,84685,5277],{"class":213},[203,84687,79920],{"class":318},[203,84689,84690,84693,84695,84697,84699,84701,84703,84705],{"class":205,"line":33155},[203,84691,84692],{"class":318},"          \u003Cp class=\"price\">${",[203,84694,79873],{"class":213},[203,84696,772],{"class":318},[203,84698,84634],{"class":2052},[203,84700,214],{"class":318},[203,84702,291],{"class":262},[203,84704,643],{"class":318},[203,84706,79920],{"class":318},[203,84708,84709,84712,84714],{"class":205,"line":33204},[203,84710,84711],{"class":318},"          \u003Cp class=\"count\">x${",[203,84713,84492],{"class":213},[203,84715,79920],{"class":318},[203,84717,84718,84721,84724],{"class":205,"line":33251},[203,84719,84720],{"class":318},"          \u003Cp class=\"sub-total\">${",[203,84722,84723],{"class":213},"subtotal",[203,84725,79920],{"class":318},[203,84727,84728],{"class":205,"line":33256},[203,84729,84730],{"class":318},"        \u003C\u002Fdiv> \n",[203,84732,84733],{"class":205,"line":33262},[203,84734,84735],{"class":318},"             `\n",[203,84737,84738,84741,84743,84745,84747],{"class":205,"line":33281},[203,84739,84740],{"class":213},"    }).",[203,84742,74281],{"class":2052},[203,84744,214],{"class":213},[203,84746,74286],{"class":318},[203,84748,220],{"class":213},[203,84750,84751],{"class":205,"line":33287},[203,84752,84753],{"class":272},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[203,84755,84756,84758,84760,84762,84764,84767,84769,84772,84774,84776,84778,84781,84784,84786,84789,84791,84793,84795,84798,84800,84802,84804,84806],{"class":205,"line":33307},[203,84757,11311],{"class":209},[203,84759,62843],{"class":262},[203,84761,13654],{"class":209},[203,84763,80106],{"class":213},[203,84765,84766],{"class":2052},"reduce",[203,84768,2465],{"class":213},[203,84770,84771],{"class":5306},"prev",[203,84773,12525],{"class":213},[203,84775,79853],{"class":5306},[203,84777,13804],{"class":213},[203,84779,84780],{"class":209},"=>",[203,84782,84783],{"class":213}," prev ",[203,84785,695],{"class":209},[203,84787,84788],{"class":213}," (item.price ",[203,84790,669],{"class":209},[203,84792,5844],{"class":262},[203,84794,6608],{"class":209},[203,84796,84797],{"class":213}," item.count) ",[203,84799,798],{"class":209},[203,84801,5844],{"class":262},[203,84803,12525],{"class":213},[203,84805,405],{"class":262},[203,84807,220],{"class":213},[203,84809,84810,84812,84814,84816,84819,84821,84823,84826,84828,84830,84832],{"class":205,"line":33313},[203,84811,52465],{"class":213},[203,84813,54457],{"class":2052},[203,84815,214],{"class":213},[203,84817,84818],{"class":318},"'.amount'",[203,84820,74307],{"class":213},[203,84822,259],{"class":209},[203,84824,84825],{"class":213}," total.",[203,84827,84634],{"class":2052},[203,84829,214],{"class":213},[203,84831,291],{"class":262},[203,84833,220],{"class":213},[203,84835,84836,84838,84840],{"class":205,"line":33319},[203,84837,52475],{"class":213},[203,84839,51871],{"class":51358},[203,84841,51365],{"class":213},[203,84843,84844,84846,84848],{"class":205,"line":33329},[203,84845,51843],{"class":213},[203,84847,51858],{"class":51358},[203,84849,51365],{"class":213},[203,84851,84852],{"class":205,"line":33334},[203,84853,2489],{"emptyLinePlaceholder":131},[203,84855,84856,84858,84860],{"class":205,"line":33340},[203,84857,51843],{"class":213},[203,84859,50693],{"class":51358},[203,84861,51365],{"class":213},[14,84863,84865],{"id":84864},"_411-编程思想","4.11 编程思想",[174,84867,84869],{"id":84868},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,84871,84872,84875],{},[363,84873,84874],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,84877,84878],{},"调用就可以了",[19,84880,84881],{},[25,84882],{"alt":27,"src":84883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[174,84885,84887],{"id":84886},"_4112-面向对象","4.11.2 面向对象",[19,84889,84890],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,84892,84893],{},[25,84894],{"alt":27,"src":84895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,84897,84898],{},"面向对象的特性：",[1221,84900,84901,84904,84907],{},[160,84902,84903],{},"封装性",[160,84905,84906],{},"继承性",[160,84908,84909],{},"多态性",[174,84911,84913],{"id":84912},"_4113-两者比较","4.11.3 两者比较",[19,84915,84916],{},[25,84917],{"alt":27,"src":84918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,84920,84922],{"id":84921},"_412-构造函数回顾","4.12 构造函数回顾",[19,84924,84925],{},[25,84926],{"alt":27,"src":84927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,84929,84930],{},[25,84931],{"alt":27,"src":84932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,84934,84935],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,84937,84938],{},[25,84939],{"alt":27,"src":84940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,84942,84944],{"id":84943},"_413-原型","4.13 原型",[174,84946,84948],{"id":84947},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,84950,84951],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,84953,84954],{},[25,84955],{"alt":27,"src":84956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,84958,84959],{},[25,84960],{"alt":27,"src":84961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,84963,84964],{},"原型是构造函数的属性，它也是一个对象",[19,84966,84967],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,84969,84970],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[194,84972,84974],{"className":53125,"code":84973,"language":53127,"meta":27,"style":27},"\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",[200,84975,84976,84984,84989,84997,85002,85007,85012,85017,85022,85026,85030,85034,85039,85044,85048,85053,85058,85063,85068,85073,85077,85085],{"__ignoreMap":27},[203,84977,84978,84980,84982],{"class":205,"line":206},[203,84979,1124],{"class":213},[203,84981,51858],{"class":51358},[203,84983,51365],{"class":213},[203,84985,84986],{"class":205,"line":124},[203,84987,84988],{"class":272},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[203,84990,84991,84993,84995],{"class":205,"line":1269},[203,84992,52202],{"class":213},[203,84994,51871],{"class":51358},[203,84996,51365],{"class":213},[203,84998,84999],{"class":205,"line":1284},[203,85000,85001],{"class":213},"    function Star(uname, age) {\n",[203,85003,85004],{"class":205,"line":1290},[203,85005,85006],{"class":213},"      this.uname = uname,\n",[203,85008,85009],{"class":205,"line":1304},[203,85010,85011],{"class":213},"        this.age = age\n",[203,85013,85014],{"class":205,"line":1310},[203,85015,85016],{"class":213},"      \u002F\u002F this.sing = function () {\n",[203,85018,85019],{"class":205,"line":1401},[203,85020,85021],{"class":213},"      \u002F\u002F   console.log('唱歌')\n",[203,85023,85024],{"class":205,"line":1407},[203,85025,2489],{"emptyLinePlaceholder":131},[203,85027,85028],{"class":205,"line":1419},[203,85029,60095],{"class":213},[203,85031,85032],{"class":205,"line":1701},[203,85033,2276],{"class":213},[203,85035,85036],{"class":205,"line":1706},[203,85037,85038],{"class":213},"    Star.prototype.sing = function () {\n",[203,85040,85041],{"class":205,"line":1712},[203,85042,85043],{"class":213},"      console.log('唱歌')\n",[203,85045,85046],{"class":205,"line":1717},[203,85047,2276],{"class":213},[203,85049,85050],{"class":205,"line":1731},[203,85051,85052],{"class":213},"    \u002F\u002F console.dir(Star.prototype)\n",[203,85054,85055],{"class":205,"line":1736},[203,85056,85057],{"class":213},"    const pink = new Star('pink', 18)\n",[203,85059,85060],{"class":205,"line":1742},[203,85061,85062],{"class":213},"    const red = new Star('red', 20)\n",[203,85064,85065],{"class":205,"line":1763},[203,85066,85067],{"class":213},"    pink.sing()\n",[203,85069,85070],{"class":205,"line":1768},[203,85071,85072],{"class":213},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[203,85074,85075],{"class":205,"line":1782},[203,85076,2489],{"emptyLinePlaceholder":131},[203,85078,85079,85081,85083],{"class":205,"line":1787},[203,85080,52475],{"class":213},[203,85082,51871],{"class":51358},[203,85084,51365],{"class":213},[203,85086,85087,85089,85091],{"class":205,"line":1816},[203,85088,51843],{"class":213},[203,85090,51858],{"class":51358},[203,85092,51365],{"class":213},[19,85094,85095],{},[25,85096],{"alt":27,"src":85097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[194,85099,85101],{"className":53125,"code":85100,"language":53127,"meta":27,"style":27},"\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",[200,85102,85103,85111,85119,85124,85129,85134,85139,85143,85148,85153,85158,85162,85167,85171,85175,85180,85184,85192],{"__ignoreMap":27},[203,85104,85105,85107,85109],{"class":205,"line":206},[203,85106,1124],{"class":213},[203,85108,51858],{"class":51358},[203,85110,51365],{"class":213},[203,85112,85113,85115,85117],{"class":205,"line":124},[203,85114,52202],{"class":213},[203,85116,51871],{"class":51358},[203,85118,51365],{"class":213},[203,85120,85121],{"class":205,"line":1269},[203,85122,85123],{"class":213},"    let that\n",[203,85125,85126],{"class":205,"line":1284},[203,85127,85128],{"class":213},"    function Star(uname) {\n",[203,85130,85131],{"class":205,"line":1290},[203,85132,85133],{"class":213},"      this.uname = uname\n",[203,85135,85136],{"class":205,"line":1304},[203,85137,85138],{"class":213},"      that = this\n",[203,85140,85141],{"class":205,"line":1310},[203,85142,2276],{"class":213},[203,85144,85145],{"class":205,"line":1401},[203,85146,85147],{"class":213},"    \u002F\u002F 实例对象是 ldh\n",[203,85149,85150],{"class":205,"line":1407},[203,85151,85152],{"class":213},"    const ldh = new Star('刘德华')\n",[203,85154,85155],{"class":205,"line":1419},[203,85156,85157],{"class":213},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[203,85159,85160],{"class":205,"line":1701},[203,85161,2489],{"emptyLinePlaceholder":131},[203,85163,85164],{"class":205,"line":1706},[203,85165,85166],{"class":213},"    Star.sing = function () {\n",[203,85168,85169],{"class":205,"line":1712},[203,85170,85043],{"class":213},[203,85172,85173],{"class":205,"line":1717},[203,85174,2276],{"class":213},[203,85176,85177],{"class":205,"line":1731},[203,85178,85179],{"class":213},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[203,85181,85182],{"class":205,"line":1736},[203,85183,2489],{"emptyLinePlaceholder":131},[203,85185,85186,85188,85190],{"class":205,"line":1742},[203,85187,52475],{"class":213},[203,85189,51871],{"class":51358},[203,85191,51365],{"class":213},[203,85193,85194,85196,85198],{"class":205,"line":1763},[203,85195,51843],{"class":213},[203,85197,51858],{"class":51358},[203,85199,51365],{"class":213},[19,85201,85202],{},"构造函数的this指向的是实例对象；",[19,85204,85205],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[174,85207,85209],{"id":85208},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85211,85212],{},[25,85213],{"alt":27,"src":85214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[194,85216,85218],{"className":53125,"code":85217,"language":53127,"meta":27,"style":27},"\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",[200,85219,85220,85228,85236,85241,85246,85251,85256,85261,85266,85271,85276,85281,85286,85290,85295,85300,85305,85310,85314,85319,85324,85329,85334,85338,85343,85348,85353,85358,85362,85367,85371,85379],{"__ignoreMap":27},[203,85221,85222,85224,85226],{"class":205,"line":206},[203,85223,1124],{"class":213},[203,85225,51858],{"class":51358},[203,85227,51365],{"class":213},[203,85229,85230,85232,85234],{"class":205,"line":124},[203,85231,52202],{"class":213},[203,85233,51871],{"class":51358},[203,85235,51365],{"class":213},[203,85237,85238],{"class":205,"line":1269},[203,85239,85240],{"class":213},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[203,85242,85243],{"class":205,"line":1284},[203,85244,85245],{"class":213},"    const arr = [1, 2, 3]\n",[203,85247,85248],{"class":205,"line":1290},[203,85249,85250],{"class":213},"    \u002F\u002F 自己定义数组的扩展方法\n",[203,85252,85253],{"class":205,"line":1304},[203,85254,85255],{"class":213},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[203,85257,85258],{"class":205,"line":1310},[203,85259,85260],{"class":213},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[203,85262,85263],{"class":205,"line":1401},[203,85264,85265],{"class":213},"    \u002F\u002F ①.最大值\n",[203,85267,85268],{"class":205,"line":1407},[203,85269,85270],{"class":213},"    Array.prototype.max = function () {\n",[203,85272,85273],{"class":205,"line":1419},[203,85274,85275],{"class":213},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[203,85277,85278],{"class":205,"line":1701},[203,85279,85280],{"class":213},"      return Math.max(...this)\n",[203,85282,85283],{"class":205,"line":1706},[203,85284,85285],{"class":213},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[203,85287,85288],{"class":205,"line":1712},[203,85289,2276],{"class":213},[203,85291,85292],{"class":205,"line":1717},[203,85293,85294],{"class":213},"    console.log(arr.max())\n",[203,85296,85297],{"class":205,"line":1731},[203,85298,85299],{"class":213},"    \u002F\u002F ②最小值\n",[203,85301,85302],{"class":205,"line":1736},[203,85303,85304],{"class":213},"    Array.prototype.min = function () {\n",[203,85306,85307],{"class":205,"line":1742},[203,85308,85309],{"class":213},"      return Math.min(...this)\n",[203,85311,85312],{"class":205,"line":1763},[203,85313,2276],{"class":213},[203,85315,85316],{"class":205,"line":1768},[203,85317,85318],{"class":213},"    console.log(arr.min())\n",[203,85320,85321],{"class":205,"line":1782},[203,85322,85323],{"class":213},"    \u002F\u002F③求和\n",[203,85325,85326],{"class":205,"line":1787},[203,85327,85328],{"class":213},"    Array.prototype.sum = function () {\n",[203,85330,85331],{"class":205,"line":1816},[203,85332,85333],{"class":213},"      return this.reduce((prev, current) => prev + current, 0)\n",[203,85335,85336],{"class":205,"line":1821},[203,85337,2276],{"class":213},[203,85339,85340],{"class":205,"line":1838},[203,85341,85342],{"class":213},"    console.log(arr.sum())\n",[203,85344,85345],{"class":205,"line":1843},[203,85346,85347],{"class":213},"    \u002F\u002F ③排序\n",[203,85349,85350],{"class":205,"line":1848},[203,85351,85352],{"class":213},"    Array.prototype.rever = function () {\n",[203,85354,85355],{"class":205,"line":1853},[203,85356,85357],{"class":213},"      return this.reverse()\n",[203,85359,85360],{"class":205,"line":1867},[203,85361,2276],{"class":213},[203,85363,85364],{"class":205,"line":1872},[203,85365,85366],{"class":213},"    console.log(arr.rever())\n",[203,85368,85369],{"class":205,"line":2666},[203,85370,2489],{"emptyLinePlaceholder":131},[203,85372,85373,85375,85377],{"class":205,"line":2680},[203,85374,52475],{"class":213},[203,85376,51871],{"class":51358},[203,85378,51365],{"class":213},[203,85380,85381,85383,85385],{"class":205,"line":2688},[203,85382,51843],{"class":213},[203,85384,51858],{"class":51358},[203,85386,51365],{"class":213},[19,85388,85389],{},[25,85390],{"alt":27,"src":85391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[174,85393,85395],{"id":85394},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85397,85398],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85400,85401],{},[25,85402],{"alt":27,"src":85403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[194,85405,85407],{"className":53125,"code":85406,"language":53127,"meta":27,"style":27},"\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",[200,85408,85409,85417,85425,85430,85435,85439,85444,85449,85454,85462],{"__ignoreMap":27},[203,85410,85411,85413,85415],{"class":205,"line":206},[203,85412,1124],{"class":213},[203,85414,51858],{"class":51358},[203,85416,51365],{"class":213},[203,85418,85419,85421,85423],{"class":205,"line":124},[203,85420,52202],{"class":213},[203,85422,51871],{"class":51358},[203,85424,51365],{"class":213},[203,85426,85427],{"class":205,"line":1269},[203,85428,85429],{"class":213},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[203,85431,85432],{"class":205,"line":1284},[203,85433,85434],{"class":213},"    function Star() {\n",[203,85436,85437],{"class":205,"line":1290},[203,85438,2276],{"class":213},[203,85440,85441],{"class":205,"line":1304},[203,85442,85443],{"class":213},"    const ldh = new Star()\n",[203,85445,85446],{"class":205,"line":1310},[203,85447,85448],{"class":213},"    console.log(Star.prototype)\n",[203,85450,85451],{"class":205,"line":1401},[203,85452,85453],{"class":213},"    console.log(Star.prototype.constructor === Star)\n",[203,85455,85456,85458,85460],{"class":205,"line":1407},[203,85457,52475],{"class":213},[203,85459,51871],{"class":51358},[203,85461,51365],{"class":213},[203,85463,85464,85466,85468],{"class":205,"line":1419},[203,85465,51843],{"class":213},[203,85467,51858],{"class":51358},[203,85469,51365],{"class":213},[19,85471,85472],{},[25,85473],{"alt":27,"src":85474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,85476,85477],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[194,85479,85481],{"className":53125,"code":85480,"language":53127,"meta":27,"style":27},"  \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",[200,85482,85483,85491,85495,85499,85503,85508,85513,85518,85522,85527,85532,85537,85542,85547,85552,85556,85560,85565,85570,85575,85579,85584,85589,85593,85597,85601],{"__ignoreMap":27},[203,85484,85485,85487,85489],{"class":205,"line":206},[203,85486,52202],{"class":213},[203,85488,51871],{"class":51358},[203,85490,51365],{"class":213},[203,85492,85493],{"class":205,"line":124},[203,85494,85429],{"class":213},[203,85496,85497],{"class":205,"line":1269},[203,85498,85434],{"class":213},[203,85500,85501],{"class":205,"line":1284},[203,85502,2276],{"class":213},[203,85504,85505],{"class":205,"line":1290},[203,85506,85507],{"class":213},"    \u002F\u002F const ldh = new Star()\n",[203,85509,85510],{"class":205,"line":1304},[203,85511,85512],{"class":213},"    \u002F\u002F console.log(Star.prototype)\n",[203,85514,85515],{"class":205,"line":1310},[203,85516,85517],{"class":213},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[203,85519,85520],{"class":205,"line":1401},[203,85521,2489],{"emptyLinePlaceholder":131},[203,85523,85524],{"class":205,"line":1407},[203,85525,85526],{"class":213},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[203,85528,85529],{"class":205,"line":1419},[203,85530,85531],{"class":213},"    \u002F\u002F Star.prototype.sing = function () {\n",[203,85533,85534],{"class":205,"line":1701},[203,85535,85536],{"class":213},"    \u002F\u002F   console.log('唱歌')\n",[203,85538,85539],{"class":205,"line":1706},[203,85540,85541],{"class":213},"    \u002F\u002F }\n",[203,85543,85544],{"class":205,"line":1712},[203,85545,85546],{"class":213},"    \u002F\u002F Star.prototype.dance = function () {\n",[203,85548,85549],{"class":205,"line":1717},[203,85550,85551],{"class":213},"    \u002F\u002F   console.log('跳舞')\n",[203,85553,85554],{"class":205,"line":1731},[203,85555,85541],{"class":213},[203,85557,85558],{"class":205,"line":1736},[203,85559,85448],{"class":213},[203,85561,85562],{"class":205,"line":1742},[203,85563,85564],{"class":213},"    Star.prototype = {\n",[203,85566,85567],{"class":205,"line":1763},[203,85568,85569],{"class":213},"      sing: function () {\n",[203,85571,85572],{"class":205,"line":1768},[203,85573,85574],{"class":213},"        console.log('唱歌')\n",[203,85576,85577],{"class":205,"line":1782},[203,85578,77950],{"class":213},[203,85580,85581],{"class":205,"line":1787},[203,85582,85583],{"class":213},"      dance: function () {\n",[203,85585,85586],{"class":205,"line":1816},[203,85587,85588],{"class":213},"        console.log('跳舞')\n",[203,85590,85591],{"class":205,"line":1821},[203,85592,52456],{"class":213},[203,85594,85595],{"class":205,"line":1838},[203,85596,2276],{"class":213},[203,85598,85599],{"class":205,"line":1843},[203,85600,85448],{"class":213},[203,85602,85603,85605,85607],{"class":205,"line":1848},[203,85604,52475],{"class":213},[203,85606,51871],{"class":51358},[203,85608,51365],{"class":213},[19,85610,85611],{},"进行输出结果后会发现：",[19,85613,85614],{},[25,85615],{"alt":27,"src":85616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,85618,85619],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,85621,85622],{},"所以，要重新指回创造这个原型对象的构造函数",[194,85624,85626],{"className":71271,"code":85625,"language":71273,"meta":27,"style":27},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[200,85627,85628,85642,85647,85652,85663,85676,85681,85692,85706,85710],{"__ignoreMap":27},[203,85629,85630,85633,85635,85638,85640],{"class":205,"line":206},[203,85631,85632],{"class":262},"Star",[203,85634,772],{"class":213},[203,85636,85637],{"class":262},"prototype",[203,85639,13654],{"class":209},[203,85641,15662],{"class":213},[203,85643,85644],{"class":205,"line":124},[203,85645,85646],{"class":272},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[203,85648,85649],{"class":205,"line":1269},[203,85650,85651],{"class":213},"  constructor: Star,\n",[203,85653,85654,85657,85659,85661],{"class":205,"line":1284},[203,85655,85656],{"class":2052},"  sing",[203,85658,51495],{"class":213},[203,85660,54507],{"class":209},[203,85662,54510],{"class":213},[203,85664,85665,85667,85669,85671,85674],{"class":205,"line":1290},[203,85666,73811],{"class":213},[203,85668,58305],{"class":2052},[203,85670,214],{"class":213},[203,85672,85673],{"class":318},"'唱歌'",[203,85675,220],{"class":213},[203,85677,85678],{"class":205,"line":1304},[203,85679,85680],{"class":213},"   },\n",[203,85682,85683,85686,85688,85690],{"class":205,"line":1310},[203,85684,85685],{"class":2052},"   dance",[203,85687,51495],{"class":213},[203,85689,54507],{"class":209},[203,85691,54510],{"class":213},[203,85693,85694,85697,85699,85701,85704],{"class":205,"line":1401},[203,85695,85696],{"class":213},"     console.",[203,85698,58305],{"class":2052},[203,85700,214],{"class":213},[203,85702,85703],{"class":318},"'跳舞'",[203,85705,220],{"class":213},[203,85707,85708],{"class":205,"line":1407},[203,85709,4398],{"class":213},[203,85711,85712],{"class":205,"line":1419},[203,85713,1654],{"class":213},[19,85715,85716],{},[25,85717],{"alt":27,"src":85718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,85720,85721],{},"总结1：",[19,85723,85724],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,85726,85727],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,85729,85730],{},"constructor指的是他的来源",[19,85732,85733],{},[25,85734],{"alt":27,"src":85735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,85737,85738],{},[25,85739],{"alt":27,"src":85740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,85742,85743],{},"总结2：",[19,85745,85746],{},[25,85747],{"alt":27,"src":85748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,85750,85751],{},[25,85752],{"alt":27,"src":85753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,85755,85756],{},[25,85757],{"alt":27,"src":85758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[174,85760,85762],{"id":85761},"_4134-对象原型","4.13.4 对象原型",[19,85764,85765],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,85767,85768],{},"对象原型就是__proto__这个属性",[19,85770,85771],{},[25,85772],{"alt":27,"src":85773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,85775,85776],{},[25,85777],{"alt":27,"src":85778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,85780,85781],{},[25,85782],{"alt":27,"src":85783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,85785,85786],{},[25,85787],{"alt":27,"src":85788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[194,85790,85792],{"className":53125,"code":85791,"language":53127,"meta":27,"style":27},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[200,85793,85794,85802,85810,85814,85818,85822,85827,85835],{"__ignoreMap":27},[203,85795,85796,85798,85800],{"class":205,"line":206},[203,85797,1124],{"class":213},[203,85799,51858],{"class":51358},[203,85801,51365],{"class":213},[203,85803,85804,85806,85808],{"class":205,"line":124},[203,85805,52202],{"class":213},[203,85807,51871],{"class":51358},[203,85809,51365],{"class":213},[203,85811,85812],{"class":205,"line":1269},[203,85813,85434],{"class":213},[203,85815,85816],{"class":205,"line":1284},[203,85817,2276],{"class":213},[203,85819,85820],{"class":205,"line":1290},[203,85821,85443],{"class":213},[203,85823,85824],{"class":205,"line":1304},[203,85825,85826],{"class":213},"    console.log(ldh)\n",[203,85828,85829,85831,85833],{"class":205,"line":1310},[203,85830,52475],{"class":213},[203,85832,51871],{"class":51358},[203,85834,51365],{"class":213},[203,85836,85837,85839,85841],{"class":205,"line":1401},[203,85838,51843],{"class":213},[203,85840,51858],{"class":51358},[203,85842,51365],{"class":213},[19,85844,85845],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,85847,85848],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,85850,85851],{},[25,85852],{"alt":27,"src":85853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,85855,85856],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,85858,85859],{},"对象原型指向原型对象",[19,85861,85862],{},[25,85863],{"alt":27,"src":85864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,85866,85867],{},[25,85868],{"alt":27,"src":85869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,85871,85872],{},[25,85873],{"alt":27,"src":85874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[174,85876,85878],{"id":85877},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,85880,85881],{},[25,85882],{"alt":27,"src":85883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[157,85885,85886,85889,85892,85895],{},[160,85887,85888],{},"构造函数通过new的形式实例化得到实例对象",[160,85890,85891],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[160,85893,85894],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[160,85896,85897],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,85899,85900],{},[25,85901],{"alt":27,"src":85902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,85904,85905],{},"题目梳理：",[19,85907,85908],{},[25,85909],{"alt":27,"src":85910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[174,85912,85914],{"id":85913},"_4136-原型继承","4.13.6 原型继承",[19,85916,85917],{},[25,85918],{"alt":27,"src":85919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,85921,85922],{},[25,85923],{"alt":27,"src":85924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,85926,85927],{},[25,85928],{"alt":27,"src":85929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,85931,85932],{},[25,85933],{"alt":27,"src":85934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,85936,85937],{},[25,85938],{"alt":27,"src":85939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,85941,85942],{},[25,85943],{"alt":27,"src":85944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,85946,85947],{},[25,85948],{"alt":27,"src":85949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,85951,85952],{},[25,85953],{"alt":27,"src":85954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,85956,85957],{},"回顾：构造函数每次new得到对象都是不同的",[174,85959,85961],{"id":85960},"_4137-原型链","4.13.7 原型链",[19,85963,85964],{},[25,85965],{"alt":27,"src":85966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,85968,85969],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,85971,85972],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,85974,85975],{},"大哥是Object",[19,85977,85978],{},[25,85979],{"alt":27,"src":85980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,85982,85983],{},[25,85984],{"alt":27,"src":85985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,85987,85988],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,85990,85991],{},"万物皆对象",[174,85993,85995],{"id":85994},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,85997,85998],{},"模态框",[19,86000,86001],{},"以后遇见这个效果直接使用这个就行",[19,86003,86004],{},[25,86005],{"alt":27,"src":86006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86008,86009],{},[25,86010],{"alt":27,"src":86011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86013,86014],{},[25,86015],{"alt":27,"src":86016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86018,86019],{},[25,86020],{"alt":27,"src":86021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86023,86024],{},"补充知识点：",[157,86026,86027],{},[160,86028,86029],{},"append()",[19,86031,86032],{},[25,86033],{"alt":27,"src":86034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[194,86036,86038],{"className":50691,"code":86037,"language":50693,"meta":27,"style":27},"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",[200,86039,86040,86045,86050,86055,86059,86063,86067,86072,86077,86082,86086],{"__ignoreMap":27},[203,86041,86042],{"class":205,"line":206},[203,86043,86044],{"class":213},"append(param1)\n",[203,86046,86047],{"class":205,"line":124},[203,86048,86049],{"class":213},"append(param1, param2)\n",[203,86051,86052],{"class":205,"line":1269},[203,86053,86054],{"class":213},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[203,86056,86057],{"class":205,"line":1284},[203,86058,2489],{"emptyLinePlaceholder":131},[203,86060,86061],{"class":205,"line":1290},[203,86062,2489],{"emptyLinePlaceholder":131},[203,86064,86065],{"class":205,"line":1304},[203,86066,2489],{"emptyLinePlaceholder":131},[203,86068,86069],{"class":205,"line":1310},[203,86070,86071],{"class":213},"let div = document.createElement(\"div\");\n",[203,86073,86074],{"class":205,"line":1401},[203,86075,86076],{"class":213},"let p = document.createElement(\"p\");\n",[203,86078,86079],{"class":205,"line":1407},[203,86080,86081],{"class":213},"div.append(p);\n",[203,86083,86084],{"class":205,"line":1419},[203,86085,2489],{"emptyLinePlaceholder":131},[203,86087,86088,86091,86093],{"class":205,"line":1701},[203,86089,86090],{"class":213},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[203,86092,19],{"class":51358},[203,86094,86095],{"class":213},"> ]\n",[157,86097,86098],{"start":124},[160,86099,86100],{},"remove()",[19,86102,86103],{},"自己删自己",[19,86105,86106],{},[25,86107],{"alt":27,"src":86108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[194,86110,86112],{"className":50691,"code":86111,"language":50693,"meta":27,"style":27},"\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",[200,86113,86114,86124,86138,86142,86150,86164,86184,86196,86204,86211,86223,86236,86271,86283,86294,86306,86318,86330,86357,86367,86371,86375,86384,86396,86410,86420,86432,86436,86440,86450,86461,86471,86481,86494,86507,86517,86521,86525,86534,86544,86556,86560,86564,86573,86583,86593,86605,86609,86613,86623,86639,86650,86660,86670,86682,86694,86706,86710,86714,86727,86738,86742,86750,86758,86762,86770,86790,86810,86818,86823,86849,86854,86859,86878,86883,86895,86900,86911,86921,86931,86936,86941,86945,86950,86955,86960,86980,86985,87005,87010,87024,87029,87034,87039,87055,87059,87064,87093,87098,87103,87108,87119,87123,87127,87131,87136,87161,87166,87191,87196,87205,87209,87214,87239,87243,87268,87272,87281,87285,87290,87308,87318,87322,87330,87338,87342],{"__ignoreMap":27},[203,86115,86116,86118,86120,86122],{"class":205,"line":206},[203,86117,51355],{"class":213},[203,86119,51359],{"class":51358},[203,86121,51362],{"class":2052},[203,86123,51365],{"class":213},[203,86125,86126,86128,86130,86132,86134,86136],{"class":205,"line":124},[203,86127,1124],{"class":213},[203,86129,50693],{"class":51358},[203,86131,51374],{"class":2052},[203,86133,259],{"class":213},[203,86135,51379],{"class":318},[203,86137,51365],{"class":213},[203,86139,86140],{"class":205,"line":1269},[203,86141,2489],{"emptyLinePlaceholder":131},[203,86143,86144,86146,86148],{"class":205,"line":1284},[203,86145,1124],{"class":213},[203,86147,51392],{"class":51358},[203,86149,51365],{"class":213},[203,86151,86152,86154,86156,86158,86160,86162],{"class":205,"line":1290},[203,86153,52202],{"class":213},[203,86155,51402],{"class":51358},[203,86157,51405],{"class":2052},[203,86159,259],{"class":213},[203,86161,51410],{"class":318},[203,86163,51365],{"class":213},[203,86165,86166,86168,86170,86172,86174,86176,86178,86180,86182],{"class":205,"line":1304},[203,86167,52202],{"class":213},[203,86169,51402],{"class":51358},[203,86171,15010],{"class":2052},[203,86173,259],{"class":213},[203,86175,51449],{"class":318},[203,86177,51429],{"class":2052},[203,86179,259],{"class":213},[203,86181,51456],{"class":318},[203,86183,51365],{"class":213},[203,86185,86186,86188,86190,86192,86194],{"class":205,"line":1310},[203,86187,52202],{"class":213},[203,86189,51465],{"class":51358},[203,86191,51468],{"class":213},[203,86193,51465],{"class":51358},[203,86195,51365],{"class":213},[203,86197,86198,86200,86202],{"class":205,"line":1401},[203,86199,52202],{"class":213},[203,86201,5216],{"class":51358},[203,86203,51365],{"class":213},[203,86205,86206,86209],{"class":205,"line":1407},[203,86207,86208],{"class":2052},"    .modal",[203,86210,15662],{"class":213},[203,86212,86213,86215,86217,86219,86221],{"class":205,"line":1419},[203,86214,54829],{"class":262},[203,86216,51495],{"class":213},[203,86218,4062],{"class":262},[203,86220,51550],{"class":209},[203,86222,1380],{"class":213},[203,86224,86225,86228,86230,86232,86234],{"class":205,"line":1701},[203,86226,86227],{"class":262},"      min-height",[203,86229,51495],{"class":213},[203,86231,525],{"class":262},[203,86233,51550],{"class":209},[203,86235,1380],{"class":213},[203,86237,86238,86240,86242,86244,86246,86248,86250,86252,86254,86256,86258,86260,86262,86264,86266,86269],{"class":205,"line":1706},[203,86239,78808],{"class":262},[203,86241,51495],{"class":213},[203,86243,405],{"class":262},[203,86245,4182],{"class":262},[203,86247,2127],{"class":262},[203,86249,51550],{"class":209},[203,86251,78825],{"class":262},[203,86253,214],{"class":213},[203,86255,405],{"class":262},[203,86257,12525],{"class":213},[203,86259,405],{"class":262},[203,86261,12525],{"class":213},[203,86263,405],{"class":262},[203,86265,12525],{"class":213},[203,86267,86268],{"class":262},"0.1",[203,86270,2808],{"class":213},[203,86272,86273,86275,86277,86279,86281],{"class":205,"line":1712},[203,86274,55192],{"class":262},[203,86276,51495],{"class":213},[203,86278,507],{"class":262},[203,86280,51550],{"class":209},[203,86282,1380],{"class":213},[203,86284,86285,86287,86289,86292],{"class":205,"line":1717},[203,86286,54817],{"class":262},[203,86288,51495],{"class":213},[203,86290,86291],{"class":262},"fixed",[203,86293,1380],{"class":213},[203,86295,86296,86299,86301,86304],{"class":205,"line":1731},[203,86297,86298],{"class":262},"      z-index",[203,86300,51495],{"class":213},[203,86302,86303],{"class":262},"999",[203,86305,1380],{"class":213},[203,86307,86308,86310,86312,86314,86316],{"class":205,"line":1736},[203,86309,54896],{"class":262},[203,86311,51495],{"class":213},[203,86313,870],{"class":262},[203,86315,542],{"class":209},[203,86317,1380],{"class":213},[203,86319,86320,86322,86324,86326,86328],{"class":205,"line":1742},[203,86321,55005],{"class":262},[203,86323,51495],{"class":213},[203,86325,870],{"class":262},[203,86327,542],{"class":209},[203,86329,1380],{"class":213},[203,86331,86332,86334,86336,86338,86340,86343,86345,86347,86349,86351,86353,86355],{"class":205,"line":1763},[203,86333,78849],{"class":262},[203,86335,51495],{"class":213},[203,86337,78854],{"class":262},[203,86339,214],{"class":213},[203,86341,86342],{"class":262},"-50",[203,86344,542],{"class":209},[203,86346,12525],{"class":213},[203,86348,86342],{"class":262},[203,86350,542],{"class":209},[203,86352,12525],{"class":213},[203,86354,405],{"class":262},[203,86356,2808],{"class":213},[203,86358,86359,86361,86363,86365],{"class":205,"line":1768},[203,86360,54942],{"class":262},[203,86362,51495],{"class":213},[203,86364,60900],{"class":262},[203,86366,1380],{"class":213},[203,86368,86369],{"class":205,"line":1782},[203,86370,2276],{"class":213},[203,86372,86373],{"class":205,"line":1787},[203,86374,2489],{"emptyLinePlaceholder":131},[203,86376,86377,86379,86382],{"class":205,"line":1816},[203,86378,86208],{"class":2052},[203,86380,86381],{"class":2052}," .header",[203,86383,15662],{"class":213},[203,86385,86386,86388,86390,86392,86394],{"class":205,"line":1821},[203,86387,57417],{"class":262},[203,86389,51495],{"class":213},[203,86391,615],{"class":262},[203,86393,51550],{"class":209},[203,86395,1380],{"class":213},[203,86397,86398,86400,86402,86404,86406,86408],{"class":205,"line":1838},[203,86399,54753],{"class":262},[203,86401,51495],{"class":213},[203,86403,405],{"class":262},[203,86405,2127],{"class":262},[203,86407,51550],{"class":209},[203,86409,1380],{"class":213},[203,86411,86412,86414,86416,86418],{"class":205,"line":1843},[203,86413,54817],{"class":262},[203,86415,51495],{"class":213},[203,86417,54822],{"class":262},[203,86419,1380],{"class":213},[203,86421,86422,86424,86426,86428,86430],{"class":205,"line":1848},[203,86423,54980],{"class":262},[203,86425,51495],{"class":213},[203,86427,914],{"class":262},[203,86429,51550],{"class":209},[203,86431,1380],{"class":213},[203,86433,86434],{"class":205,"line":1853},[203,86435,2276],{"class":213},[203,86437,86438],{"class":205,"line":1867},[203,86439,2489],{"emptyLinePlaceholder":131},[203,86441,86442,86444,86446,86448],{"class":205,"line":1872},[203,86443,86208],{"class":2052},[203,86445,86381],{"class":2052},[203,86447,3121],{"class":51358},[203,86449,15662],{"class":213},[203,86451,86452,86455,86457,86459],{"class":205,"line":2666},[203,86453,86454],{"class":262},"      font-style",[203,86456,51495],{"class":213},[203,86458,63899],{"class":262},[203,86460,1380],{"class":213},[203,86462,86463,86465,86467,86469],{"class":205,"line":2680},[203,86464,57474],{"class":262},[203,86466,51495],{"class":213},[203,86468,62128],{"class":262},[203,86470,1380],{"class":213},[203,86472,86473,86475,86477,86479],{"class":205,"line":2688},[203,86474,54817],{"class":262},[203,86476,51495],{"class":213},[203,86478,54889],{"class":262},[203,86480,1380],{"class":213},[203,86482,86483,86486,86488,86490,86492],{"class":205,"line":2693},[203,86484,86485],{"class":262},"      right",[203,86487,51495],{"class":213},[203,86489,789],{"class":262},[203,86491,51550],{"class":209},[203,86493,1380],{"class":213},[203,86495,86496,86498,86500,86503,86505],{"class":205,"line":2699},[203,86497,55005],{"class":262},[203,86499,51495],{"class":213},[203,86501,86502],{"class":262},"-2",[203,86504,51550],{"class":209},[203,86506,1380],{"class":213},[203,86508,86509,86511,86513,86515],{"class":205,"line":2705},[203,86510,62083],{"class":262},[203,86512,51495],{"class":213},[203,86514,62088],{"class":262},[203,86516,1380],{"class":213},[203,86518,86519],{"class":205,"line":2710},[203,86520,2276],{"class":213},[203,86522,86523],{"class":205,"line":8038},[203,86524,2489],{"emptyLinePlaceholder":131},[203,86526,86527,86529,86532],{"class":205,"line":8062},[203,86528,86208],{"class":2052},[203,86530,86531],{"class":2052}," .body",[203,86533,15662],{"class":213},[203,86535,86536,86538,86540,86542],{"class":205,"line":8067},[203,86537,57344],{"class":262},[203,86539,51495],{"class":213},[203,86541,51650],{"class":262},[203,86543,1380],{"class":213},[203,86545,86546,86548,86550,86552,86554],{"class":205,"line":8073},[203,86547,54753],{"class":262},[203,86549,51495],{"class":213},[203,86551,660],{"class":262},[203,86553,51550],{"class":209},[203,86555,1380],{"class":213},[203,86557,86558],{"class":205,"line":8100},[203,86559,2276],{"class":213},[203,86561,86562],{"class":205,"line":8105},[203,86563,2489],{"emptyLinePlaceholder":131},[203,86565,86566,86568,86571],{"class":205,"line":8111},[203,86567,86208],{"class":2052},[203,86569,86570],{"class":2052}," .footer",[203,86572,15662],{"class":213},[203,86574,86575,86577,86579,86581],{"class":205,"line":8123},[203,86576,55067],{"class":262},[203,86578,51495],{"class":213},[203,86580,51535],{"class":262},[203,86582,1380],{"class":213},[203,86584,86585,86587,86589,86591],{"class":205,"line":8135},[203,86586,55078],{"class":262},[203,86588,51495],{"class":213},[203,86590,51638],{"class":262},[203,86592,1380],{"class":213},[203,86594,86595,86597,86599,86601,86603],{"class":205,"line":8147},[203,86596,54753],{"class":262},[203,86598,51495],{"class":213},[203,86600,660],{"class":262},[203,86602,51550],{"class":209},[203,86604,1380],{"class":213},[203,86606,86607],{"class":205,"line":9806},[203,86608,2276],{"class":213},[203,86610,86611],{"class":205,"line":9831},[203,86612,2489],{"emptyLinePlaceholder":131},[203,86614,86615,86617,86619,86621],{"class":205,"line":9854},[203,86616,86208],{"class":2052},[203,86618,86570],{"class":2052},[203,86620,1488],{"class":51358},[203,86622,15662],{"class":213},[203,86624,86625,86627,86629,86631,86633,86635,86637],{"class":205,"line":9878},[203,86626,54753],{"class":262},[203,86628,51495],{"class":213},[203,86630,285],{"class":262},[203,86632,51550],{"class":209},[203,86634,2172],{"class":262},[203,86636,51550],{"class":209},[203,86638,1380],{"class":213},[203,86640,86641,86643,86645,86648],{"class":205,"line":9883},[203,86642,61779],{"class":262},[203,86644,51495],{"class":213},[203,86646,86647],{"class":262},"#ccc",[203,86649,1380],{"class":213},[203,86651,86652,86654,86656,86658],{"class":205,"line":9888},[203,86653,64028],{"class":262},[203,86655,51495],{"class":213},[203,86657,54795],{"class":262},[203,86659,1380],{"class":213},[203,86661,86662,86664,86666,86668],{"class":205,"line":9893},[203,86663,57474],{"class":262},[203,86665,51495],{"class":213},[203,86667,60900],{"class":262},[203,86669,1380],{"class":213},[203,86671,86672,86674,86676,86678,86680],{"class":205,"line":9902},[203,86673,55192],{"class":262},[203,86675,51495],{"class":213},[203,86677,291],{"class":262},[203,86679,51550],{"class":209},[203,86681,1380],{"class":213},[203,86683,86684,86686,86688,86690,86692],{"class":205,"line":9907},[203,86685,61808],{"class":262},[203,86687,51495],{"class":213},[203,86689,660],{"class":262},[203,86691,51550],{"class":209},[203,86693,1380],{"class":213},[203,86695,86696,86698,86700,86702,86704],{"class":205,"line":9913},[203,86697,54980],{"class":262},[203,86699,51495],{"class":213},[203,86701,763],{"class":262},[203,86703,51550],{"class":209},[203,86705,1380],{"class":213},[203,86707,86708],{"class":205,"line":9934},[203,86709,2276],{"class":213},[203,86711,86712],{"class":205,"line":9940},[203,86713,2489],{"emptyLinePlaceholder":131},[203,86715,86716,86718,86720,86722,86725],{"class":205,"line":9954},[203,86717,86208],{"class":2052},[203,86719,86570],{"class":2052},[203,86721,1488],{"class":51358},[203,86723,86724],{"class":2052},".submit",[203,86726,15662],{"class":213},[203,86728,86729,86731,86733,86736],{"class":205,"line":9960},[203,86730,54942],{"class":262},[203,86732,51495],{"class":213},[203,86734,86735],{"class":262},"#369",[203,86737,1380],{"class":213},[203,86739,86740],{"class":205,"line":9987},[203,86741,2276],{"class":213},[203,86743,86744,86746,86748],{"class":205,"line":9996},[203,86745,52475],{"class":213},[203,86747,5216],{"class":51358},[203,86749,51365],{"class":213},[203,86751,86752,86754,86756],{"class":205,"line":10002},[203,86753,51843],{"class":213},[203,86755,51392],{"class":51358},[203,86757,51365],{"class":213},[203,86759,86760],{"class":205,"line":10010},[203,86761,2489],{"emptyLinePlaceholder":131},[203,86763,86764,86766,86768],{"class":205,"line":10015},[203,86765,1124],{"class":213},[203,86767,51858],{"class":51358},[203,86769,51365],{"class":213},[203,86771,86772,86774,86776,86778,86780,86783,86786,86788],{"class":205,"line":16694},[203,86773,52202],{"class":213},[203,86775,53945],{"class":51358},[203,86777,15049],{"class":2052},[203,86779,259],{"class":213},[203,86781,86782],{"class":318},"\"delete\"",[203,86784,86785],{"class":213},">删除\u003C\u002F",[203,86787,53945],{"class":51358},[203,86789,51365],{"class":213},[203,86791,86792,86794,86796,86798,86800,86803,86806,86808],{"class":205,"line":16700},[203,86793,52202],{"class":213},[203,86795,53945],{"class":51358},[203,86797,15049],{"class":2052},[203,86799,259],{"class":213},[203,86801,86802],{"class":318},"\"login\"",[203,86804,86805],{"class":213},">登录\u003C\u002F",[203,86807,53945],{"class":51358},[203,86809,51365],{"class":213},[203,86811,86812,86814,86816],{"class":205,"line":16723},[203,86813,52202],{"class":213},[203,86815,51871],{"class":51358},[203,86817,51365],{"class":213},[203,86819,86820],{"class":205,"line":16729},[203,86821,86822],{"class":272},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[203,86824,86825,86827,86830,86832,86834,86836,86838,86840,86843,86845,86847],{"class":205,"line":16752},[203,86826,70142],{"class":209},[203,86828,86829],{"class":2052}," Modal",[203,86831,214],{"class":213},[203,86833,51465],{"class":5306},[203,86835,13654],{"class":209},[203,86837,69988],{"class":318},[203,86839,12525],{"class":213},[203,86841,86842],{"class":5306},"message",[203,86844,13654],{"class":209},[203,86846,69988],{"class":318},[203,86848,12532],{"class":213},[203,86850,86851],{"class":205,"line":16766},[203,86852,86853],{"class":272},"      \u002F\u002F 创建Model 模态框盒子\n",[203,86855,86856],{"class":205,"line":16786},[203,86857,86858],{"class":272},"      \u002F\u002F 1.1 创建div标签\n",[203,86860,86861,86863,86866,86868,86870,86872,86874,86876],{"class":205,"line":16792},[203,86862,70109],{"class":262},[203,86864,86865],{"class":213},".modalBox ",[203,86867,259],{"class":209},[203,86869,54454],{"class":213},[203,86871,70209],{"class":2052},[203,86873,214],{"class":213},[203,86875,81989],{"class":318},[203,86877,220],{"class":213},[203,86879,86880],{"class":205,"line":16803},[203,86881,86882],{"class":272},"      \u002F\u002F 1.2 给div 添加类名为model\n",[203,86884,86885,86887,86890,86892],{"class":205,"line":16826},[203,86886,70109],{"class":262},[203,86888,86889],{"class":213},".modalBox.className ",[203,86891,259],{"class":209},[203,86893,86894],{"class":318}," 'modal'\n",[203,86896,86897],{"class":205,"line":16848},[203,86898,86899],{"class":272},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[203,86901,86902,86904,86907,86909],{"class":205,"line":16853},[203,86903,70109],{"class":262},[203,86905,86906],{"class":213},".modalBox.innerHTML ",[203,86908,259],{"class":209},[203,86910,70226],{"class":318},[203,86912,86913,86916,86918],{"class":205,"line":16859},[203,86914,86915],{"class":318},"        \u003Cdiv class=\"header\">${",[203,86917,51465],{"class":213},[203,86919,86920],{"class":318},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[203,86922,86923,86926,86928],{"class":205,"line":16873},[203,86924,86925],{"class":318},"        \u003Cdiv class=\"body\">${",[203,86927,86842],{"class":213},[203,86929,86930],{"class":318},"}\u003C\u002Fdiv>\n",[203,86932,86933],{"class":205,"line":16886},[203,86934,86935],{"class":318},"      `\n",[203,86937,86938],{"class":205,"line":16891},[203,86939,86940],{"class":272},"      \u002F\u002F console.log(this.modalBox)\n",[203,86942,86943],{"class":205,"line":16905},[203,86944,2276],{"class":213},[203,86946,86947],{"class":205,"line":16910},[203,86948,86949],{"class":272},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[203,86951,86952],{"class":205,"line":16916},[203,86953,86954],{"class":272},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[203,86956,86957],{"class":205,"line":16921},[203,86958,86959],{"class":272},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[203,86961,86962,86965,86967,86969,86971,86974,86976,86978],{"class":205,"line":16935},[203,86963,86964],{"class":262},"    Modal",[203,86966,772],{"class":213},[203,86968,85637],{"class":262},[203,86970,772],{"class":213},[203,86972,86973],{"class":2052},"open",[203,86975,13654],{"class":209},[203,86977,58976],{"class":209},[203,86979,54510],{"class":213},[203,86981,86982],{"class":205,"line":16940},[203,86983,86984],{"class":272},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[203,86986,86987,86989,86992,86994,86996,86998,87000,87003],{"class":205,"line":16945},[203,86988,58286],{"class":209},[203,86990,86991],{"class":262}," box",[203,86993,13654],{"class":209},[203,86995,54454],{"class":213},[203,86997,54457],{"class":2052},[203,86999,214],{"class":213},[203,87001,87002],{"class":318},"'.modal'",[203,87004,220],{"class":213},[203,87006,87007],{"class":205,"line":16959},[203,87008,87009],{"class":272},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[203,87011,87012,87015,87017,87020,87022],{"class":205,"line":16971},[203,87013,87014],{"class":213},"      box ",[203,87016,1804],{"class":209},[203,87018,87019],{"class":213}," box.",[203,87021,57064],{"class":2052},[203,87023,2065],{"class":213},[203,87025,87026],{"class":205,"line":16976},[203,87027,87028],{"class":272},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[203,87030,87031],{"class":205,"line":16989},[203,87032,87033],{"class":272},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[203,87035,87036],{"class":205,"line":16994},[203,87037,87038],{"class":272},"      \u002F\u002F append可以增加对象\n",[203,87040,87041,87044,87047,87049,87052],{"class":205,"line":16999},[203,87042,87043],{"class":213},"      document.body.",[203,87045,87046],{"class":2052},"append",[203,87048,214],{"class":213},[203,87050,87051],{"class":262},"this",[203,87053,87054],{"class":213},".modalBox)\n",[203,87056,87057],{"class":205,"line":17004},[203,87058,2489],{"emptyLinePlaceholder":131},[203,87060,87061],{"class":205,"line":17017},[203,87062,87063],{"class":272},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[203,87065,87066,87068,87071,87073,87075,87078,87080,87082,87084,87086,87089,87091],{"class":205,"line":17022},[203,87067,70109],{"class":262},[203,87069,87070],{"class":213},".modalBox.",[203,87072,54457],{"class":2052},[203,87074,214],{"class":213},[203,87076,87077],{"class":318},"'i'",[203,87079,30884],{"class":213},[203,87081,57871],{"class":2052},[203,87083,214],{"class":213},[203,87085,57876],{"class":318},[203,87087,87088],{"class":213},", () ",[203,87090,84780],{"class":209},[203,87092,15662],{"class":213},[203,87094,87095],{"class":205,"line":32691},[203,87096,87097],{"class":272},"        \u002F\u002F 这个地方需要用到箭头函数\n",[203,87099,87100],{"class":205,"line":32697},[203,87101,87102],{"class":272},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[203,87104,87105],{"class":205,"line":32703},[203,87106,87107],{"class":272},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[203,87109,87110,87112,87114,87117],{"class":205,"line":32709},[203,87111,64784],{"class":262},[203,87113,772],{"class":213},[203,87115,87116],{"class":2052},"close",[203,87118,2065],{"class":213},[203,87120,87121],{"class":205,"line":32715},[203,87122,64873],{"class":213},[203,87124,87125],{"class":205,"line":32726},[203,87126,2276],{"class":213},[203,87128,87129],{"class":205,"line":32732},[203,87130,2489],{"emptyLinePlaceholder":131},[203,87132,87133],{"class":205,"line":32752},[203,87134,87135],{"class":272},"    \u002F\u002F 测试一下 点击 删除按钮\n",[203,87137,87138,87140,87142,87144,87147,87149,87151,87153,87155,87157,87159],{"class":205,"line":32758},[203,87139,52465],{"class":213},[203,87141,54457],{"class":2052},[203,87143,214],{"class":213},[203,87145,87146],{"class":318},"'#delete'",[203,87148,30884],{"class":213},[203,87150,57871],{"class":2052},[203,87152,214],{"class":213},[203,87154,57876],{"class":318},[203,87156,87088],{"class":213},[203,87158,84780],{"class":209},[203,87160,15662],{"class":213},[203,87162,87163],{"class":205,"line":32769},[203,87164,87165],{"class":272},"      \u002F\u002F 先调用Model构造函数\n",[203,87167,87168,87170,87173,87175,87177,87179,87181,87184,87186,87189],{"class":205,"line":32775},[203,87169,58286],{"class":209},[203,87171,87172],{"class":262}," del",[203,87174,13654],{"class":209},[203,87176,11668],{"class":209},[203,87178,86829],{"class":2052},[203,87180,214],{"class":213},[203,87182,87183],{"class":318},"'温馨的提示'",[203,87185,12525],{"class":213},[203,87187,87188],{"class":318},"'您没有删除权限操作'",[203,87190,220],{"class":213},[203,87192,87193],{"class":205,"line":32781},[203,87194,87195],{"class":272},"      \u002F\u002F 实例对象调用open方法\n",[203,87197,87198,87201,87203],{"class":205,"line":32787},[203,87199,87200],{"class":213},"      del.",[203,87202,86973],{"class":2052},[203,87204,2065],{"class":213},[203,87206,87207],{"class":205,"line":32793},[203,87208,33519],{"class":213},[203,87210,87211],{"class":205,"line":32799},[203,87212,87213],{"class":272},"    \u002F\u002F 测试一下 点击 登录按钮\n",[203,87215,87216,87218,87220,87222,87225,87227,87229,87231,87233,87235,87237],{"class":205,"line":32805},[203,87217,52465],{"class":213},[203,87219,54457],{"class":2052},[203,87221,214],{"class":213},[203,87223,87224],{"class":318},"'#login'",[203,87226,30884],{"class":213},[203,87228,57871],{"class":2052},[203,87230,214],{"class":213},[203,87232,57876],{"class":318},[203,87234,87088],{"class":213},[203,87236,84780],{"class":209},[203,87238,15662],{"class":213},[203,87240,87241],{"class":205,"line":32811},[203,87242,87165],{"class":272},[203,87244,87245,87247,87250,87252,87254,87256,87258,87261,87263,87266],{"class":205,"line":32831},[203,87246,58286],{"class":209},[203,87248,87249],{"class":262}," log",[203,87251,13654],{"class":209},[203,87253,11668],{"class":209},[203,87255,86829],{"class":2052},[203,87257,214],{"class":213},[203,87259,87260],{"class":318},"'友情提示'",[203,87262,12525],{"class":213},[203,87264,87265],{"class":318},"'您还没有登录呢'",[203,87267,220],{"class":213},[203,87269,87270],{"class":205,"line":32837},[203,87271,87195],{"class":272},[203,87273,87274,87277,87279],{"class":205,"line":32853},[203,87275,87276],{"class":213},"      log.",[203,87278,86973],{"class":2052},[203,87280,2065],{"class":213},[203,87282,87283],{"class":205,"line":32859},[203,87284,33519],{"class":213},[203,87286,87287],{"class":205,"line":32873},[203,87288,87289],{"class":272},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[203,87291,87292,87294,87296,87298,87300,87302,87304,87306],{"class":205,"line":32879},[203,87293,86964],{"class":262},[203,87295,772],{"class":213},[203,87297,85637],{"class":262},[203,87299,772],{"class":213},[203,87301,87116],{"class":2052},[203,87303,13654],{"class":209},[203,87305,58976],{"class":209},[203,87307,54510],{"class":213},[203,87309,87310,87312,87314,87316],{"class":205,"line":32894},[203,87311,70109],{"class":262},[203,87313,87070],{"class":213},[203,87315,57064],{"class":2052},[203,87317,2065],{"class":213},[203,87319,87320],{"class":205,"line":32900},[203,87321,2276],{"class":213},[203,87323,87324,87326,87328],{"class":205,"line":32909},[203,87325,52475],{"class":213},[203,87327,51871],{"class":51358},[203,87329,51365],{"class":213},[203,87331,87332,87334,87336],{"class":205,"line":32915},[203,87333,51843],{"class":213},[203,87335,51858],{"class":51358},[203,87337,51365],{"class":213},[203,87339,87340],{"class":205,"line":32924},[203,87341,2489],{"emptyLinePlaceholder":131},[203,87343,87344,87346,87348],{"class":205,"line":32930},[203,87345,51843],{"class":213},[203,87347,50693],{"class":51358},[203,87349,51365],{"class":213},[19,87351,87352],{},[25,87353],{"alt":27,"src":87354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87356,87358],{"id":87357},"_414-深浅拷贝","4.14 深浅拷贝",[174,87360,87362],{"id":87361},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87364,87365],{},[25,87366],{"alt":27,"src":87367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87369,87370],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87372,87373],{},[25,87374],{"alt":27,"src":87375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87377,87378],{},[25,87379],{"alt":27,"src":87380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87382,87383],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87385,87386],{},[25,87387],{"alt":27,"src":87388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87390,11422],{},[19,87392,87393],{},[25,87394],{"alt":27,"src":87395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[174,87397,87399],{"id":87398},"_4142-深拷贝","4.14.2 深拷贝",[19,87401,87402],{},"深拷贝：拷贝的是对象，不是地址",[19,87404,87405],{},"常用的三种方法：",[157,87407,87408,87411,87414],{},[160,87409,87410],{},"通过递归实现深拷贝",[160,87412,87413],{},"lodash\u002FcloneDeep",[160,87415,87416],{},"通过JSON.stringify()实现",[22088,87418,87420],{"id":87419},"_41421-递归函数","4.14.2.1 递归函数",[19,87422,87423],{},[25,87424],{"alt":27,"src":87425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[157,87427,87428],{},[160,87429,87430],{},"死递归占溢出：",[194,87432,87434],{"className":53125,"code":87433,"language":53127,"meta":27,"style":27},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[200,87435,87436,87444,87452,87456,87461,87465,87470,87478],{"__ignoreMap":27},[203,87437,87438,87440,87442],{"class":205,"line":206},[203,87439,1124],{"class":213},[203,87441,51858],{"class":51358},[203,87443,51365],{"class":213},[203,87445,87446,87448,87450],{"class":205,"line":124},[203,87447,52202],{"class":213},[203,87449,51871],{"class":51358},[203,87451,51365],{"class":213},[203,87453,87454],{"class":205,"line":1269},[203,87455,77201],{"class":213},[203,87457,87458],{"class":205,"line":1284},[203,87459,87460],{"class":213},"      fn()\n",[203,87462,87463],{"class":205,"line":1290},[203,87464,2276],{"class":213},[203,87466,87467],{"class":205,"line":1304},[203,87468,87469],{"class":213},"    fn()\n",[203,87471,87472,87474,87476],{"class":205,"line":1310},[203,87473,52475],{"class":213},[203,87475,51871],{"class":51358},[203,87477,51365],{"class":213},[203,87479,87480,87482,87484],{"class":205,"line":1401},[203,87481,51843],{"class":213},[203,87483,51858],{"class":51358},[203,87485,51365],{"class":213},[157,87487,87488],{"start":124},[160,87489,87490],{},"递归函数要加判断条件：",[19,87492,87493],{},[25,87494],{"alt":27,"src":87495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[157,87497,87498],{"start":1269},[160,87499,87500],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[194,87502,87504],{"className":50691,"code":87503,"language":50693,"meta":27,"style":27},"\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",[200,87505,87506,87516,87530,87534,87542,87556,87576,87588,87596,87600,87608,87620,87628,87636,87661,87673,87677,87684,87692,87700,87704],{"__ignoreMap":27},[203,87507,87508,87510,87512,87514],{"class":205,"line":206},[203,87509,51355],{"class":213},[203,87511,51359],{"class":51358},[203,87513,51362],{"class":2052},[203,87515,51365],{"class":213},[203,87517,87518,87520,87522,87524,87526,87528],{"class":205,"line":124},[203,87519,1124],{"class":213},[203,87521,50693],{"class":51358},[203,87523,51374],{"class":2052},[203,87525,259],{"class":213},[203,87527,51379],{"class":318},[203,87529,51365],{"class":213},[203,87531,87532],{"class":205,"line":1269},[203,87533,2489],{"emptyLinePlaceholder":131},[203,87535,87536,87538,87540],{"class":205,"line":1284},[203,87537,1124],{"class":213},[203,87539,51392],{"class":51358},[203,87541,51365],{"class":213},[203,87543,87544,87546,87548,87550,87552,87554],{"class":205,"line":1290},[203,87545,52202],{"class":213},[203,87547,51402],{"class":51358},[203,87549,51405],{"class":2052},[203,87551,259],{"class":213},[203,87553,51410],{"class":318},[203,87555,51365],{"class":213},[203,87557,87558,87560,87562,87564,87566,87568,87570,87572,87574],{"class":205,"line":1304},[203,87559,52202],{"class":213},[203,87561,51402],{"class":51358},[203,87563,15010],{"class":2052},[203,87565,259],{"class":213},[203,87567,51449],{"class":318},[203,87569,51429],{"class":2052},[203,87571,259],{"class":213},[203,87573,51456],{"class":318},[203,87575,51365],{"class":213},[203,87577,87578,87580,87582,87584,87586],{"class":205,"line":1310},[203,87579,52202],{"class":213},[203,87581,51465],{"class":51358},[203,87583,51468],{"class":213},[203,87585,51465],{"class":51358},[203,87587,51365],{"class":213},[203,87589,87590,87592,87594],{"class":205,"line":1401},[203,87591,51843],{"class":213},[203,87593,51392],{"class":51358},[203,87595,51365],{"class":213},[203,87597,87598],{"class":205,"line":1407},[203,87599,2489],{"emptyLinePlaceholder":131},[203,87601,87602,87604,87606],{"class":205,"line":1419},[203,87603,1124],{"class":213},[203,87605,51858],{"class":51358},[203,87607,51365],{"class":213},[203,87609,87610,87612,87614,87616,87618],{"class":205,"line":1701},[203,87611,52202],{"class":213},[203,87613,51669],{"class":51358},[203,87615,55372],{"class":213},[203,87617,51669],{"class":51358},[203,87619,51365],{"class":213},[203,87621,87622,87624,87626],{"class":205,"line":1706},[203,87623,52202],{"class":213},[203,87625,51871],{"class":51358},[203,87627,51365],{"class":213},[203,87629,87630,87632,87634],{"class":205,"line":1712},[203,87631,70142],{"class":209},[203,87633,73831],{"class":2052},[203,87635,10943],{"class":213},[203,87637,87638,87640,87642,87644,87646,87648,87650,87652,87654,87656,87659],{"class":205,"line":1717},[203,87639,55829],{"class":213},[203,87641,54457],{"class":2052},[203,87643,214],{"class":213},[203,87645,81989],{"class":318},[203,87647,74307],{"class":213},[203,87649,259],{"class":209},[203,87651,11668],{"class":209},[203,87653,73847],{"class":2052},[203,87655,17351],{"class":213},[203,87657,87658],{"class":2052},"toLocaleString",[203,87660,2065],{"class":213},[203,87662,87663,87666,87669,87671],{"class":205,"line":1731},[203,87664,87665],{"class":2052},"      setTimeout",[203,87667,87668],{"class":213},"(getTime, ",[203,87670,6500],{"class":262},[203,87672,220],{"class":213},[203,87674,87675],{"class":205,"line":1736},[203,87676,2276],{"class":213},[203,87678,87679,87682],{"class":205,"line":1742},[203,87680,87681],{"class":2052},"    getTime",[203,87683,2065],{"class":213},[203,87685,87686,87688,87690],{"class":205,"line":1763},[203,87687,52475],{"class":213},[203,87689,51871],{"class":51358},[203,87691,51365],{"class":213},[203,87693,87694,87696,87698],{"class":205,"line":1768},[203,87695,51843],{"class":213},[203,87697,51858],{"class":51358},[203,87699,51365],{"class":213},[203,87701,87702],{"class":205,"line":1782},[203,87703,2489],{"emptyLinePlaceholder":131},[203,87705,87706,87708,87710],{"class":205,"line":1787},[203,87707,51843],{"class":213},[203,87709,50693],{"class":51358},[203,87711,51365],{"class":213},[19,87713,87714],{},[25,87715],{"alt":27,"src":87716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[157,87718,87719],{"start":1284},[160,87720,87410],{},[19,87722,87723],{},[25,87724],{"alt":27,"src":87725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,87727,87728],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,87730,39247],{},[19,87732,87733],{},"这个是简易版的递归函数深拷贝",[19,87735,87736],{},"一定要注意先数组再对象，因为万物皆可对象",[194,87738,87740],{"className":50691,"code":87739,"language":50693,"meta":27,"style":27},"\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",[200,87741,87742,87752,87766,87770,87778,87792,87812,87824,87832,87836,87844,87852,87862,87871,87879,87895,87899,87907,87911,87915,87927,87932,87951,87967,87972,87977,87982,87997,88002,88007,88016,88024,88041,88049,88055,88063,88068,88073,88082,88086,88090,88094,88105,88114,88124,88138,88148,88156,88164,88172,88176],{"__ignoreMap":27},[203,87743,87744,87746,87748,87750],{"class":205,"line":206},[203,87745,51355],{"class":213},[203,87747,51359],{"class":51358},[203,87749,51362],{"class":2052},[203,87751,51365],{"class":213},[203,87753,87754,87756,87758,87760,87762,87764],{"class":205,"line":124},[203,87755,1124],{"class":213},[203,87757,50693],{"class":51358},[203,87759,51374],{"class":2052},[203,87761,259],{"class":213},[203,87763,51379],{"class":318},[203,87765,51365],{"class":213},[203,87767,87768],{"class":205,"line":1269},[203,87769,2489],{"emptyLinePlaceholder":131},[203,87771,87772,87774,87776],{"class":205,"line":1284},[203,87773,1124],{"class":213},[203,87775,51392],{"class":51358},[203,87777,51365],{"class":213},[203,87779,87780,87782,87784,87786,87788,87790],{"class":205,"line":1290},[203,87781,52202],{"class":213},[203,87783,51402],{"class":51358},[203,87785,51405],{"class":2052},[203,87787,259],{"class":213},[203,87789,51410],{"class":318},[203,87791,51365],{"class":213},[203,87793,87794,87796,87798,87800,87802,87804,87806,87808,87810],{"class":205,"line":1304},[203,87795,52202],{"class":213},[203,87797,51402],{"class":51358},[203,87799,15010],{"class":2052},[203,87801,259],{"class":213},[203,87803,51449],{"class":318},[203,87805,51429],{"class":2052},[203,87807,259],{"class":213},[203,87809,51456],{"class":318},[203,87811,51365],{"class":213},[203,87813,87814,87816,87818,87820,87822],{"class":205,"line":1310},[203,87815,52202],{"class":213},[203,87817,51465],{"class":51358},[203,87819,51468],{"class":213},[203,87821,51465],{"class":51358},[203,87823,51365],{"class":213},[203,87825,87826,87828,87830],{"class":205,"line":1401},[203,87827,51843],{"class":213},[203,87829,51392],{"class":51358},[203,87831,51365],{"class":213},[203,87833,87834],{"class":205,"line":1407},[203,87835,2489],{"emptyLinePlaceholder":131},[203,87837,87838,87840,87842],{"class":205,"line":1419},[203,87839,1124],{"class":213},[203,87841,51858],{"class":51358},[203,87843,51365],{"class":213},[203,87845,87846,87848,87850],{"class":205,"line":1701},[203,87847,52202],{"class":213},[203,87849,51871],{"class":51358},[203,87851,51365],{"class":213},[203,87853,87854,87856,87858,87860],{"class":205,"line":1706},[203,87855,11311],{"class":209},[203,87857,70029],{"class":262},[203,87859,13654],{"class":209},[203,87861,15662],{"class":213},[203,87863,87864,87866,87869],{"class":205,"line":1712},[203,87865,71674],{"class":213},[203,87867,87868],{"class":318},"'pink'",[203,87870,31524],{"class":213},[203,87872,87873,87875,87877],{"class":205,"line":1717},[203,87874,71684],{"class":213},[203,87876,864],{"class":262},[203,87878,31524],{"class":213},[203,87880,87881,87884,87887,87889,87892],{"class":205,"line":1731},[203,87882,87883],{"class":213},"      hobby: [",[203,87885,87886],{"class":318},"'乒乓球'",[203,87888,12525],{"class":213},[203,87890,87891],{"class":318},"'足球'",[203,87893,87894],{"class":213},"],\n",[203,87896,87897],{"class":205,"line":1736},[203,87898,77930],{"class":213},[203,87900,87901,87904],{"class":205,"line":1742},[203,87902,87903],{"class":213},"        baby: ",[203,87905,87906],{"class":318},"'小pink'\n",[203,87908,87909],{"class":205,"line":1763},[203,87910,52456],{"class":213},[203,87912,87913],{"class":205,"line":1768},[203,87914,2276],{"class":213},[203,87916,87917,87919,87922,87924],{"class":205,"line":1782},[203,87918,11311],{"class":209},[203,87920,87921],{"class":262}," o",[203,87923,13654],{"class":209},[203,87925,87926],{"class":213}," {}\n",[203,87928,87929],{"class":205,"line":1787},[203,87930,87931],{"class":272},"    \u002F\u002F 拷贝函数\n",[203,87933,87934,87936,87939,87941,87944,87946,87949],{"class":205,"line":1816},[203,87935,70142],{"class":209},[203,87937,87938],{"class":2052}," deepCopy",[203,87940,214],{"class":213},[203,87942,87943],{"class":5306},"newObj",[203,87945,12525],{"class":213},[203,87947,87948],{"class":5306},"oldObj",[203,87950,12532],{"class":213},[203,87952,87953,87955,87957,87959,87962,87964],{"class":205,"line":1821},[203,87954,52342],{"class":209},[203,87956,1747],{"class":213},[203,87958,51905],{"class":209},[203,87960,87961],{"class":213}," k ",[203,87963,26101],{"class":209},[203,87965,87966],{"class":213}," oldObj) {\n",[203,87968,87969],{"class":205,"line":1838},[203,87970,87971],{"class":272},"        \u002F\u002F 处理数组的问题\n",[203,87973,87974],{"class":205,"line":1843},[203,87975,87976],{"class":272},"        \u002F\u002F 判断是否属于数组\n",[203,87978,87979],{"class":205,"line":1848},[203,87980,87981],{"class":272},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[203,87983,87984,87986,87989,87992,87995],{"class":205,"line":1853},[203,87985,2586],{"class":209},[203,87987,87988],{"class":213}," (oldObj[k] ",[203,87990,87991],{"class":209},"instanceof",[203,87993,87994],{"class":2052}," Array",[203,87996,12532],{"class":213},[203,87998,87999],{"class":205,"line":1867},[203,88000,88001],{"class":272},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[203,88003,88004],{"class":205,"line":1872},[203,88005,88006],{"class":272},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[203,88008,88009,88012,88014],{"class":205,"line":2666},[203,88010,88011],{"class":213},"          newObj[k] ",[203,88013,259],{"class":209},[203,88015,51896],{"class":213},[203,88017,88018,88021],{"class":205,"line":2680},[203,88019,88020],{"class":2052},"          deepCopy",[203,88022,88023],{"class":213},"(newObj[k], oldObj[k])\n",[203,88025,88026,88028,88030,88032,88034,88036,88039],{"class":205,"line":2688},[203,88027,80138],{"class":213},[203,88029,1790],{"class":209},[203,88031,1793],{"class":209},[203,88033,87988],{"class":213},[203,88035,87991],{"class":209},[203,88037,88038],{"class":2052}," Object",[203,88040,12532],{"class":213},[203,88042,88043,88045,88047],{"class":205,"line":2693},[203,88044,88011],{"class":213},[203,88046,259],{"class":209},[203,88048,87926],{"class":213},[203,88050,88051,88053],{"class":205,"line":2699},[203,88052,88020],{"class":2052},[203,88054,88023],{"class":213},[203,88056,88057,88059,88061],{"class":205,"line":2705},[203,88058,80138],{"class":213},[203,88060,1790],{"class":209},[203,88062,15662],{"class":213},[203,88064,88065],{"class":205,"line":2710},[203,88066,88067],{"class":272},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[203,88069,88070],{"class":205,"line":8038},[203,88071,88072],{"class":272},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[203,88074,88075,88077,88079],{"class":205,"line":8062},[203,88076,88011],{"class":213},[203,88078,259],{"class":209},[203,88080,88081],{"class":213}," oldObj[k]\n",[203,88083,88084],{"class":205,"line":8067},[203,88085,2618],{"class":213},[203,88087,88088],{"class":205,"line":8073},[203,88089,52456],{"class":213},[203,88091,88092],{"class":205,"line":8100},[203,88093,2276],{"class":213},[203,88095,88096,88099,88102],{"class":205,"line":8105},[203,88097,88098],{"class":2052},"    deepCopy",[203,88100,88101],{"class":213},"(o, obj) ",[203,88103,88104],{"class":272},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[203,88106,88107,88109,88111],{"class":205,"line":8111},[203,88108,73811],{"class":213},[203,88110,58305],{"class":2052},[203,88112,88113],{"class":213},"(o)\n",[203,88115,88116,88119,88121],{"class":205,"line":8123},[203,88117,88118],{"class":213},"    o.age ",[203,88120,259],{"class":209},[203,88122,88123],{"class":262}," 20\n",[203,88125,88126,88129,88131,88133,88135],{"class":205,"line":8135},[203,88127,88128],{"class":213},"    o.hobby[",[203,88130,405],{"class":262},[203,88132,4532],{"class":213},[203,88134,259],{"class":209},[203,88136,88137],{"class":318}," '篮球'\n",[203,88139,88140,88143,88145],{"class":205,"line":8147},[203,88141,88142],{"class":213},"    o.family ",[203,88144,259],{"class":209},[203,88146,88147],{"class":318}," '老pink'\n",[203,88149,88150,88152,88154],{"class":205,"line":9806},[203,88151,73811],{"class":213},[203,88153,58305],{"class":2052},[203,88155,70094],{"class":213},[203,88157,88158,88160,88162],{"class":205,"line":9831},[203,88159,52475],{"class":213},[203,88161,51871],{"class":51358},[203,88163,51365],{"class":213},[203,88165,88166,88168,88170],{"class":205,"line":9854},[203,88167,51843],{"class":213},[203,88169,51858],{"class":51358},[203,88171,51365],{"class":213},[203,88173,88174],{"class":205,"line":9878},[203,88175,2489],{"emptyLinePlaceholder":131},[203,88177,88178,88180,88182],{"class":205,"line":9883},[203,88179,51843],{"class":213},[203,88181,50693],{"class":51358},[203,88183,51365],{"class":213},[19,88185,88186],{},[25,88187],{"alt":27,"src":88188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22088,88190,88192,88193],{"id":88191},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[363,88194,88195],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88197,88198],{},[452,88199,88200],{"href":88200,"rel":88201},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23956],[19,88203,88204],{},"lodash里边的方法都要加上一个下划线_",[19,88206,88207],{},"_.cloneDeep()",[194,88209,88211],{"className":50691,"code":88210,"language":50693,"meta":27,"style":27},"\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",[200,88212,88213,88223,88237,88241,88249,88263,88283,88295,88303,88307,88315,88320,88339,88347,88357,88365,88373,88385,88389,88395,88399,88403,88419,88427,88436,88444,88452,88460,88464],{"__ignoreMap":27},[203,88214,88215,88217,88219,88221],{"class":205,"line":206},[203,88216,51355],{"class":213},[203,88218,51359],{"class":51358},[203,88220,51362],{"class":2052},[203,88222,51365],{"class":213},[203,88224,88225,88227,88229,88231,88233,88235],{"class":205,"line":124},[203,88226,1124],{"class":213},[203,88228,50693],{"class":51358},[203,88230,51374],{"class":2052},[203,88232,259],{"class":213},[203,88234,51379],{"class":318},[203,88236,51365],{"class":213},[203,88238,88239],{"class":205,"line":1269},[203,88240,2489],{"emptyLinePlaceholder":131},[203,88242,88243,88245,88247],{"class":205,"line":1284},[203,88244,1124],{"class":213},[203,88246,51392],{"class":51358},[203,88248,51365],{"class":213},[203,88250,88251,88253,88255,88257,88259,88261],{"class":205,"line":1290},[203,88252,52202],{"class":213},[203,88254,51402],{"class":51358},[203,88256,51405],{"class":2052},[203,88258,259],{"class":213},[203,88260,51410],{"class":318},[203,88262,51365],{"class":213},[203,88264,88265,88267,88269,88271,88273,88275,88277,88279,88281],{"class":205,"line":1304},[203,88266,52202],{"class":213},[203,88268,51402],{"class":51358},[203,88270,15010],{"class":2052},[203,88272,259],{"class":213},[203,88274,51449],{"class":318},[203,88276,51429],{"class":2052},[203,88278,259],{"class":213},[203,88280,51456],{"class":318},[203,88282,51365],{"class":213},[203,88284,88285,88287,88289,88291,88293],{"class":205,"line":1310},[203,88286,52202],{"class":213},[203,88288,51465],{"class":51358},[203,88290,51468],{"class":213},[203,88292,51465],{"class":51358},[203,88294,51365],{"class":213},[203,88296,88297,88299,88301],{"class":205,"line":1401},[203,88298,51843],{"class":213},[203,88300,51392],{"class":51358},[203,88302,51365],{"class":213},[203,88304,88305],{"class":205,"line":1407},[203,88306,2489],{"emptyLinePlaceholder":131},[203,88308,88309,88311,88313],{"class":205,"line":1419},[203,88310,1124],{"class":213},[203,88312,51858],{"class":51358},[203,88314,51365],{"class":213},[203,88316,88317],{"class":205,"line":1701},[203,88318,88319],{"class":272},"  \u003C!-- 先引用这个库 -->\n",[203,88321,88322,88324,88326,88328,88330,88333,88335,88337],{"class":205,"line":1706},[203,88323,52202],{"class":213},[203,88325,51871],{"class":51358},[203,88327,55297],{"class":2052},[203,88329,259],{"class":213},[203,88331,88332],{"class":318},"\"lodash.min.js\"",[203,88334,55372],{"class":213},[203,88336,51871],{"class":51358},[203,88338,51365],{"class":213},[203,88340,88341,88343,88345],{"class":205,"line":1712},[203,88342,52202],{"class":213},[203,88344,51871],{"class":51358},[203,88346,51365],{"class":213},[203,88348,88349,88351,88353,88355],{"class":205,"line":1717},[203,88350,11311],{"class":209},[203,88352,70029],{"class":262},[203,88354,13654],{"class":209},[203,88356,15662],{"class":213},[203,88358,88359,88361,88363],{"class":205,"line":1731},[203,88360,71674],{"class":213},[203,88362,87868],{"class":318},[203,88364,31524],{"class":213},[203,88366,88367,88369,88371],{"class":205,"line":1736},[203,88368,71684],{"class":213},[203,88370,864],{"class":262},[203,88372,31524],{"class":213},[203,88374,88375,88377,88379,88381,88383],{"class":205,"line":1742},[203,88376,87883],{"class":213},[203,88378,87886],{"class":318},[203,88380,12525],{"class":213},[203,88382,87891],{"class":318},[203,88384,87894],{"class":213},[203,88386,88387],{"class":205,"line":1763},[203,88388,77930],{"class":213},[203,88390,88391,88393],{"class":205,"line":1768},[203,88392,87903],{"class":213},[203,88394,87906],{"class":318},[203,88396,88397],{"class":205,"line":1782},[203,88398,52456],{"class":213},[203,88400,88401],{"class":205,"line":1787},[203,88402,2276],{"class":213},[203,88404,88405,88407,88409,88411,88414,88417],{"class":205,"line":1816},[203,88406,11311],{"class":209},[203,88408,87921],{"class":262},[203,88410,13654],{"class":209},[203,88412,88413],{"class":213}," _.",[203,88415,88416],{"class":2052},"cloneDeep",[203,88418,70094],{"class":213},[203,88420,88421,88423,88425],{"class":205,"line":1821},[203,88422,73811],{"class":213},[203,88424,58305],{"class":2052},[203,88426,88113],{"class":213},[203,88428,88429,88432,88434],{"class":205,"line":1838},[203,88430,88431],{"class":213},"    o.family.baby ",[203,88433,259],{"class":209},[203,88435,88147],{"class":318},[203,88437,88438,88440,88442],{"class":205,"line":1843},[203,88439,73811],{"class":213},[203,88441,58305],{"class":2052},[203,88443,70094],{"class":213},[203,88445,88446,88448,88450],{"class":205,"line":1848},[203,88447,52475],{"class":213},[203,88449,51871],{"class":51358},[203,88451,51365],{"class":213},[203,88453,88454,88456,88458],{"class":205,"line":1853},[203,88455,51843],{"class":213},[203,88457,51858],{"class":51358},[203,88459,51365],{"class":213},[203,88461,88462],{"class":205,"line":1867},[203,88463,2489],{"emptyLinePlaceholder":131},[203,88465,88466,88468,88470],{"class":205,"line":1872},[203,88467,51843],{"class":213},[203,88469,50693],{"class":51358},[203,88471,51365],{"class":213},[19,88473,88474],{},[25,88475],{"alt":27,"src":88476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22088,88478,88480],{"id":88479},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[194,88482,88484],{"className":50691,"code":88483,"language":50693,"meta":27,"style":27},"\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",[200,88485,88486,88496,88510,88514,88522,88536,88556,88568,88576,88580,88588,88596,88606,88614,88622,88634,88638,88644,88648,88652,88657,88662,88667,88693,88701,88710,88718,88726,88734,88738],{"__ignoreMap":27},[203,88487,88488,88490,88492,88494],{"class":205,"line":206},[203,88489,51355],{"class":213},[203,88491,51359],{"class":51358},[203,88493,51362],{"class":2052},[203,88495,51365],{"class":213},[203,88497,88498,88500,88502,88504,88506,88508],{"class":205,"line":124},[203,88499,1124],{"class":213},[203,88501,50693],{"class":51358},[203,88503,51374],{"class":2052},[203,88505,259],{"class":213},[203,88507,51379],{"class":318},[203,88509,51365],{"class":213},[203,88511,88512],{"class":205,"line":1269},[203,88513,2489],{"emptyLinePlaceholder":131},[203,88515,88516,88518,88520],{"class":205,"line":1284},[203,88517,1124],{"class":213},[203,88519,51392],{"class":51358},[203,88521,51365],{"class":213},[203,88523,88524,88526,88528,88530,88532,88534],{"class":205,"line":1290},[203,88525,52202],{"class":213},[203,88527,51402],{"class":51358},[203,88529,51405],{"class":2052},[203,88531,259],{"class":213},[203,88533,51410],{"class":318},[203,88535,51365],{"class":213},[203,88537,88538,88540,88542,88544,88546,88548,88550,88552,88554],{"class":205,"line":1304},[203,88539,52202],{"class":213},[203,88541,51402],{"class":51358},[203,88543,15010],{"class":2052},[203,88545,259],{"class":213},[203,88547,51449],{"class":318},[203,88549,51429],{"class":2052},[203,88551,259],{"class":213},[203,88553,51456],{"class":318},[203,88555,51365],{"class":213},[203,88557,88558,88560,88562,88564,88566],{"class":205,"line":1310},[203,88559,52202],{"class":213},[203,88561,51465],{"class":51358},[203,88563,51468],{"class":213},[203,88565,51465],{"class":51358},[203,88567,51365],{"class":213},[203,88569,88570,88572,88574],{"class":205,"line":1401},[203,88571,51843],{"class":213},[203,88573,51392],{"class":51358},[203,88575,51365],{"class":213},[203,88577,88578],{"class":205,"line":1407},[203,88579,2489],{"emptyLinePlaceholder":131},[203,88581,88582,88584,88586],{"class":205,"line":1419},[203,88583,1124],{"class":213},[203,88585,51858],{"class":51358},[203,88587,51365],{"class":213},[203,88589,88590,88592,88594],{"class":205,"line":1701},[203,88591,52202],{"class":213},[203,88593,51871],{"class":51358},[203,88595,51365],{"class":213},[203,88597,88598,88600,88602,88604],{"class":205,"line":1706},[203,88599,11311],{"class":209},[203,88601,70029],{"class":262},[203,88603,13654],{"class":209},[203,88605,15662],{"class":213},[203,88607,88608,88610,88612],{"class":205,"line":1712},[203,88609,71674],{"class":213},[203,88611,87868],{"class":318},[203,88613,31524],{"class":213},[203,88615,88616,88618,88620],{"class":205,"line":1717},[203,88617,71684],{"class":213},[203,88619,864],{"class":262},[203,88621,31524],{"class":213},[203,88623,88624,88626,88628,88630,88632],{"class":205,"line":1731},[203,88625,87883],{"class":213},[203,88627,87886],{"class":318},[203,88629,12525],{"class":213},[203,88631,87891],{"class":318},[203,88633,87894],{"class":213},[203,88635,88636],{"class":205,"line":1736},[203,88637,77930],{"class":213},[203,88639,88640,88642],{"class":205,"line":1742},[203,88641,87903],{"class":213},[203,88643,87906],{"class":318},[203,88645,88646],{"class":205,"line":1763},[203,88647,52456],{"class":213},[203,88649,88650],{"class":205,"line":1768},[203,88651,2276],{"class":213},[203,88653,88654],{"class":205,"line":1782},[203,88655,88656],{"class":272},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[203,88658,88659],{"class":205,"line":1787},[203,88660,88661],{"class":272},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[203,88663,88664],{"class":205,"line":1816},[203,88665,88666],{"class":272},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[203,88668,88669,88671,88673,88675,88678,88680,88683,88685,88687,88689,88691],{"class":205,"line":1821},[203,88670,11311],{"class":209},[203,88672,87921],{"class":262},[203,88674,13654],{"class":209},[203,88676,88677],{"class":262}," JSON",[203,88679,772],{"class":213},[203,88681,88682],{"class":2052},"parse",[203,88684,214],{"class":213},[203,88686,71722],{"class":262},[203,88688,772],{"class":213},[203,88690,71727],{"class":2052},[203,88692,71730],{"class":213},[203,88694,88695,88697,88699],{"class":205,"line":1838},[203,88696,73811],{"class":213},[203,88698,58305],{"class":2052},[203,88700,88113],{"class":213},[203,88702,88703,88705,88707],{"class":205,"line":1843},[203,88704,88431],{"class":213},[203,88706,259],{"class":209},[203,88708,88709],{"class":318}," '123'\n",[203,88711,88712,88714,88716],{"class":205,"line":1848},[203,88713,73811],{"class":213},[203,88715,58305],{"class":2052},[203,88717,70094],{"class":213},[203,88719,88720,88722,88724],{"class":205,"line":1853},[203,88721,52475],{"class":213},[203,88723,51871],{"class":51358},[203,88725,51365],{"class":213},[203,88727,88728,88730,88732],{"class":205,"line":1867},[203,88729,51843],{"class":213},[203,88731,51858],{"class":51358},[203,88733,51365],{"class":213},[203,88735,88736],{"class":205,"line":1872},[203,88737,2489],{"emptyLinePlaceholder":131},[203,88739,88740,88742,88744],{"class":205,"line":2666},[203,88741,51843],{"class":213},[203,88743,50693],{"class":51358},[203,88745,51365],{"class":213},[19,88747,88748],{},[25,88749],{"alt":27,"src":88750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,88752,88754],{"id":88753},"_415-异常处理","4.15 异常处理",[157,88756,88757],{},[160,88758,88759],{},"throw抛异常",[19,88761,88762],{},[25,88763],{"alt":27,"src":88764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[157,88766,88767],{"start":124},[160,88768,88769],{},"try\u002Fcatch 捕获错误信息",[19,88771,88772],{},[25,88773],{"alt":27,"src":88774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[194,88776,88778],{"className":50691,"code":88777,"language":50693,"meta":27,"style":27},"\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",[200,88779,88780,88790,88804,88808,88816,88830,88850,88862,88870,88874,88882,88894,88902,88911,88918,88923,88942,88951,88962,88967,88977,88982,88987,88992,89009,89013,89018,89025,89037,89041,89053,89057,89061,89066,89071,89078,89086,89094,89098],{"__ignoreMap":27},[203,88781,88782,88784,88786,88788],{"class":205,"line":206},[203,88783,51355],{"class":213},[203,88785,51359],{"class":51358},[203,88787,51362],{"class":2052},[203,88789,51365],{"class":213},[203,88791,88792,88794,88796,88798,88800,88802],{"class":205,"line":124},[203,88793,1124],{"class":213},[203,88795,50693],{"class":51358},[203,88797,51374],{"class":2052},[203,88799,259],{"class":213},[203,88801,51379],{"class":318},[203,88803,51365],{"class":213},[203,88805,88806],{"class":205,"line":1269},[203,88807,2489],{"emptyLinePlaceholder":131},[203,88809,88810,88812,88814],{"class":205,"line":1284},[203,88811,1124],{"class":213},[203,88813,51392],{"class":51358},[203,88815,51365],{"class":213},[203,88817,88818,88820,88822,88824,88826,88828],{"class":205,"line":1290},[203,88819,52202],{"class":213},[203,88821,51402],{"class":51358},[203,88823,51405],{"class":2052},[203,88825,259],{"class":213},[203,88827,51410],{"class":318},[203,88829,51365],{"class":213},[203,88831,88832,88834,88836,88838,88840,88842,88844,88846,88848],{"class":205,"line":1304},[203,88833,52202],{"class":213},[203,88835,51402],{"class":51358},[203,88837,15010],{"class":2052},[203,88839,259],{"class":213},[203,88841,51449],{"class":318},[203,88843,51429],{"class":2052},[203,88845,259],{"class":213},[203,88847,51456],{"class":318},[203,88849,51365],{"class":213},[203,88851,88852,88854,88856,88858,88860],{"class":205,"line":1310},[203,88853,52202],{"class":213},[203,88855,51465],{"class":51358},[203,88857,51468],{"class":213},[203,88859,51465],{"class":51358},[203,88861,51365],{"class":213},[203,88863,88864,88866,88868],{"class":205,"line":1401},[203,88865,51843],{"class":213},[203,88867,51392],{"class":51358},[203,88869,51365],{"class":213},[203,88871,88872],{"class":205,"line":1407},[203,88873,2489],{"emptyLinePlaceholder":131},[203,88875,88876,88878,88880],{"class":205,"line":1419},[203,88877,1124],{"class":213},[203,88879,51858],{"class":51358},[203,88881,51365],{"class":213},[203,88883,88884,88886,88888,88890,88892],{"class":205,"line":1701},[203,88885,52202],{"class":213},[203,88887,19],{"class":51358},[203,88889,53552],{"class":213},[203,88891,19],{"class":51358},[203,88893,51365],{"class":213},[203,88895,88896,88898,88900],{"class":205,"line":1706},[203,88897,52202],{"class":213},[203,88899,51871],{"class":51358},[203,88901,51365],{"class":213},[203,88903,88904,88906,88909],{"class":205,"line":1712},[203,88905,70142],{"class":209},[203,88907,88908],{"class":2052}," fn",[203,88910,10943],{"class":213},[203,88912,88913,88916],{"class":205,"line":1717},[203,88914,88915],{"class":209},"      try",[203,88917,15662],{"class":213},[203,88919,88920],{"class":205,"line":1731},[203,88921,88922],{"class":272},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[203,88924,88925,88927,88929,88931,88933,88935,88937,88940],{"class":205,"line":1736},[203,88926,61328],{"class":209},[203,88928,6915],{"class":262},[203,88930,13654],{"class":209},[203,88932,54454],{"class":213},[203,88934,54457],{"class":2052},[203,88936,214],{"class":213},[203,88938,88939],{"class":318},"'.p'",[203,88941,220],{"class":213},[203,88943,88944,88947,88949],{"class":205,"line":1742},[203,88945,88946],{"class":213},"        p.style.color ",[203,88948,259],{"class":209},[203,88950,67109],{"class":318},[203,88952,88953,88956,88959],{"class":205,"line":1763},[203,88954,88955],{"class":213},"      } ",[203,88957,88958],{"class":209},"catch",[203,88960,88961],{"class":213}," (err) {\n",[203,88963,88964],{"class":205,"line":1768},[203,88965,88966],{"class":272},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[203,88968,88969,88972,88974],{"class":205,"line":1782},[203,88970,88971],{"class":213},"        console.",[203,88973,58305],{"class":2052},[203,88975,88976],{"class":213},"(err.message)\n",[203,88978,88979],{"class":205,"line":1787},[203,88980,88981],{"class":272},"        \u002F\u002F 想要中断程序，需要加return\n",[203,88983,88984],{"class":205,"line":1816},[203,88985,88986],{"class":272},"        \u002F\u002F return\n",[203,88988,88989],{"class":205,"line":1821},[203,88990,88991],{"class":272},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[203,88993,88994,88997,88999,89002,89004,89007],{"class":205,"line":1838},[203,88995,88996],{"class":209},"        throw",[203,88998,11668],{"class":209},[203,89000,89001],{"class":2052}," Error",[203,89003,214],{"class":213},[203,89005,89006],{"class":318},"'你看看，选择器错误了吧'",[203,89008,220],{"class":213},[203,89010,89011],{"class":205,"line":1843},[203,89012,52456],{"class":213},[203,89014,89015],{"class":205,"line":1848},[203,89016,89017],{"class":272},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[203,89019,89020,89023],{"class":205,"line":1853},[203,89021,89022],{"class":209},"      finally",[203,89024,15662],{"class":213},[203,89026,89027,89030,89032,89035],{"class":205,"line":1867},[203,89028,89029],{"class":2052},"        alert",[203,89031,214],{"class":213},[203,89033,89034],{"class":318},"'弹出对话框'",[203,89036,220],{"class":213},[203,89038,89039],{"class":205,"line":1872},[203,89040,52456],{"class":213},[203,89042,89043,89045,89047,89049,89051],{"class":205,"line":2666},[203,89044,58302],{"class":213},[203,89046,58305],{"class":2052},[203,89048,214],{"class":213},[203,89050,686],{"class":262},[203,89052,220],{"class":213},[203,89054,89055],{"class":205,"line":2680},[203,89056,2489],{"emptyLinePlaceholder":131},[203,89058,89059],{"class":205,"line":2688},[203,89060,2276],{"class":213},[203,89062,89063],{"class":205,"line":2693},[203,89064,89065],{"class":272},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[203,89067,89068],{"class":205,"line":2699},[203,89069,89070],{"class":272},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[203,89072,89073,89076],{"class":205,"line":2705},[203,89074,89075],{"class":2052},"    fn",[203,89077,2065],{"class":213},[203,89079,89080,89082,89084],{"class":205,"line":2710},[203,89081,52475],{"class":213},[203,89083,51871],{"class":51358},[203,89085,51365],{"class":213},[203,89087,89088,89090,89092],{"class":205,"line":8038},[203,89089,51843],{"class":213},[203,89091,51858],{"class":51358},[203,89093,51365],{"class":213},[203,89095,89096],{"class":205,"line":8062},[203,89097,2489],{"emptyLinePlaceholder":131},[203,89099,89100,89102,89104],{"class":205,"line":8067},[203,89101,51843],{"class":213},[203,89103,50693],{"class":51358},[203,89105,51365],{"class":213},[19,89107,89108],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[157,89110,89111],{"start":1269},[160,89112,89113],{},"debugger",[19,89115,89116],{},[25,89117],{"alt":27,"src":89118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89120,89121],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89123,89125],{"id":89124},"_416-处理this","4.16 处理this",[174,89127,89129],{"id":89128},"_4161-this的指向","4.16.1 this的指向",[157,89131,89132],{},[160,89133,89134],{},"普通函数的this",[19,89136,89137],{},[25,89138],{"alt":27,"src":89139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[157,89141,89142],{"start":124},[160,89143,89144],{},"箭头函数的this",[19,89146,89147],{},[25,89148],{"alt":27,"src":89149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89151,89152],{},[25,89153],{"alt":27,"src":89154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89156,89157],{},[25,89158],{"alt":27,"src":89159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[174,89161,89163],{"id":89162},"_4162-this的改变","4.16.2 this的改变",[19,89165,89166],{},"call() apply() bind()",[157,89168,89169],{},[160,89170,89171],{},"call()",[19,89173,89174],{},[25,89175],{"alt":27,"src":89176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89178,89179],{},"两个作用：①调用函数；②改变this指向",[194,89181,89183],{"className":53125,"code":89182,"language":53127,"meta":27,"style":27},"\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",[200,89184,89185,89193,89201,89205,89210,89214,89219,89224,89229,89233,89238,89246],{"__ignoreMap":27},[203,89186,89187,89189,89191],{"class":205,"line":206},[203,89188,1124],{"class":213},[203,89190,51858],{"class":51358},[203,89192,51365],{"class":213},[203,89194,89195,89197,89199],{"class":205,"line":124},[203,89196,52202],{"class":213},[203,89198,51871],{"class":51358},[203,89200,51365],{"class":213},[203,89202,89203],{"class":205,"line":1269},[203,89204,71581],{"class":213},[203,89206,89207],{"class":205,"line":1284},[203,89208,89209],{"class":213},"      uname: 'pink'\n",[203,89211,89212],{"class":205,"line":1290},[203,89213,2276],{"class":213},[203,89215,89216],{"class":205,"line":1304},[203,89217,89218],{"class":213},"    function fn(x, y) {\n",[203,89220,89221],{"class":205,"line":1310},[203,89222,89223],{"class":213},"      console.log(this)  \u002F\u002Fwindow\n",[203,89225,89226],{"class":205,"line":1401},[203,89227,89228],{"class":213},"      console.log(x + y)\n",[203,89230,89231],{"class":205,"line":1407},[203,89232,2276],{"class":213},[203,89234,89235],{"class":205,"line":1419},[203,89236,89237],{"class":213},"    fn.call(obj, 1, 2)\n",[203,89239,89240,89242,89244],{"class":205,"line":1701},[203,89241,52475],{"class":213},[203,89243,51871],{"class":51358},[203,89245,51365],{"class":213},[203,89247,89248,89250,89252],{"class":205,"line":1706},[203,89249,51843],{"class":213},[203,89251,51858],{"class":51358},[203,89253,51365],{"class":213},[19,89255,89256],{},[25,89257],{"alt":27,"src":89258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[157,89260,89261],{"start":124},[160,89262,89263],{},"apply()",[19,89265,89266],{},[25,89267],{"alt":27,"src":89268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89270,89179],{},[19,89272,89273],{},"call传递的是普通参数，而apply必须传递的是数组",[194,89275,89277],{"className":50691,"code":89276,"language":50693,"meta":27,"style":27},"\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",[200,89278,89279,89289,89303,89307,89315,89329,89349,89361,89369,89373,89381,89389,89399,89406,89410,89415,89431,89443,89457,89461,89466,89485,89490,89494,89499,89504,89512,89517,89539,89544,89560,89576,89588,89592,89597,89616,89624,89632,89636],{"__ignoreMap":27},[203,89280,89281,89283,89285,89287],{"class":205,"line":206},[203,89282,51355],{"class":213},[203,89284,51359],{"class":51358},[203,89286,51362],{"class":2052},[203,89288,51365],{"class":213},[203,89290,89291,89293,89295,89297,89299,89301],{"class":205,"line":124},[203,89292,1124],{"class":213},[203,89294,50693],{"class":51358},[203,89296,51374],{"class":2052},[203,89298,259],{"class":213},[203,89300,51379],{"class":318},[203,89302,51365],{"class":213},[203,89304,89305],{"class":205,"line":1269},[203,89306,2489],{"emptyLinePlaceholder":131},[203,89308,89309,89311,89313],{"class":205,"line":1284},[203,89310,1124],{"class":213},[203,89312,51392],{"class":51358},[203,89314,51365],{"class":213},[203,89316,89317,89319,89321,89323,89325,89327],{"class":205,"line":1290},[203,89318,52202],{"class":213},[203,89320,51402],{"class":51358},[203,89322,51405],{"class":2052},[203,89324,259],{"class":213},[203,89326,51410],{"class":318},[203,89328,51365],{"class":213},[203,89330,89331,89333,89335,89337,89339,89341,89343,89345,89347],{"class":205,"line":1304},[203,89332,52202],{"class":213},[203,89334,51402],{"class":51358},[203,89336,15010],{"class":2052},[203,89338,259],{"class":213},[203,89340,51449],{"class":318},[203,89342,51429],{"class":2052},[203,89344,259],{"class":213},[203,89346,51456],{"class":318},[203,89348,51365],{"class":213},[203,89350,89351,89353,89355,89357,89359],{"class":205,"line":1310},[203,89352,52202],{"class":213},[203,89354,51465],{"class":51358},[203,89356,51468],{"class":213},[203,89358,51465],{"class":51358},[203,89360,51365],{"class":213},[203,89362,89363,89365,89367],{"class":205,"line":1401},[203,89364,51843],{"class":213},[203,89366,51392],{"class":51358},[203,89368,51365],{"class":213},[203,89370,89371],{"class":205,"line":1407},[203,89372,2489],{"emptyLinePlaceholder":131},[203,89374,89375,89377,89379],{"class":205,"line":1419},[203,89376,1124],{"class":213},[203,89378,51858],{"class":51358},[203,89380,51365],{"class":213},[203,89382,89383,89385,89387],{"class":205,"line":1701},[203,89384,52202],{"class":213},[203,89386,51871],{"class":51358},[203,89388,51365],{"class":213},[203,89390,89391,89393,89395,89397],{"class":205,"line":1706},[203,89392,11311],{"class":209},[203,89394,70029],{"class":262},[203,89396,13654],{"class":209},[203,89398,15662],{"class":213},[203,89400,89401,89403],{"class":205,"line":1712},[203,89402,71684],{"class":213},[203,89404,89405],{"class":262},"18\n",[203,89407,89408],{"class":205,"line":1717},[203,89409,2276],{"class":213},[203,89411,89412],{"class":205,"line":1731},[203,89413,89414],{"class":272},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[203,89416,89417,89419,89421,89423,89425,89427,89429],{"class":205,"line":1736},[203,89418,70142],{"class":209},[203,89420,88908],{"class":2052},[203,89422,214],{"class":213},[203,89424,1034],{"class":5306},[203,89426,12525],{"class":213},[203,89428,1059],{"class":5306},[203,89430,12532],{"class":213},[203,89432,89433,89435,89437,89439,89441],{"class":205,"line":1742},[203,89434,58302],{"class":213},[203,89436,58305],{"class":2052},[203,89438,214],{"class":213},[203,89440,87051],{"class":262},[203,89442,220],{"class":213},[203,89444,89445,89447,89449,89452,89454],{"class":205,"line":1763},[203,89446,58302],{"class":213},[203,89448,58305],{"class":2052},[203,89450,89451],{"class":213},"(x ",[203,89453,695],{"class":209},[203,89455,89456],{"class":213}," y)\n",[203,89458,89459],{"class":205,"line":1768},[203,89460,2276],{"class":213},[203,89462,89463],{"class":205,"line":1782},[203,89464,89465],{"class":272},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[203,89467,89468,89471,89474,89477,89479,89481,89483],{"class":205,"line":1787},[203,89469,89470],{"class":213},"    fn.",[203,89472,89473],{"class":2052},"apply",[203,89475,89476],{"class":213},"(obj, [",[203,89478,431],{"class":262},[203,89480,12525],{"class":213},[203,89482,291],{"class":262},[203,89484,4746],{"class":213},[203,89486,89487],{"class":205,"line":1816},[203,89488,89489],{"class":272},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[203,89491,89492],{"class":205,"line":1821},[203,89493,2489],{"emptyLinePlaceholder":131},[203,89495,89496],{"class":205,"line":1838},[203,89497,89498],{"class":272},"    \u002F\u002F 使用场景：求数组最大值\n",[203,89500,89501],{"class":205,"line":1843},[203,89502,89503],{"class":272},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[203,89505,89506,89509],{"class":205,"line":1848},[203,89507,89508],{"class":272},"    \u002F\u002F console.log(max)",[203,89510,89511],{"class":272},"   \u002F\u002F3\n",[203,89513,89514],{"class":205,"line":1853},[203,89515,89516],{"class":272},"    \u002F\u002F 指向空或者Math都是可以的\n",[203,89518,89519,89521,89523,89525,89527,89529,89531,89533,89535,89537],{"class":205,"line":1867},[203,89520,11311],{"class":209},[203,89522,57753],{"class":262},[203,89524,13654],{"class":209},[203,89526,52284],{"class":213},[203,89528,525],{"class":262},[203,89530,12525],{"class":213},[203,89532,718],{"class":262},[203,89534,12525],{"class":213},[203,89536,749],{"class":262},[203,89538,33304],{"class":213},[203,89540,89541],{"class":205,"line":1872},[203,89542,89543],{"class":272},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[203,89545,89546,89548,89550,89552,89555,89557],{"class":205,"line":2666},[203,89547,11311],{"class":209},[203,89549,6041],{"class":262},[203,89551,13654],{"class":209},[203,89553,89554],{"class":213}," Math.max.",[203,89556,89473],{"class":2052},[203,89558,89559],{"class":213},"(Math, arr)\n",[203,89561,89562,89564,89567,89569,89572,89574],{"class":205,"line":2680},[203,89563,11311],{"class":209},[203,89565,89566],{"class":262}," min",[203,89568,13654],{"class":209},[203,89570,89571],{"class":213}," Math.min.",[203,89573,89473],{"class":2052},[203,89575,89559],{"class":213},[203,89577,89578,89580,89582,89585],{"class":205,"line":2688},[203,89579,73811],{"class":213},[203,89581,58305],{"class":2052},[203,89583,89584],{"class":213},"(max, min)     ",[203,89586,89587],{"class":272},"\u002F\u002F100,4\n",[203,89589,89590],{"class":205,"line":2693},[203,89591,2489],{"emptyLinePlaceholder":131},[203,89593,89594],{"class":205,"line":2699},[203,89595,89596],{"class":272},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[203,89598,89599,89601,89603,89606,89608,89610,89613],{"class":205,"line":2705},[203,89600,73811],{"class":213},[203,89602,58305],{"class":2052},[203,89604,89605],{"class":213},"(Max.",[203,89607,6105],{"class":2052},[203,89609,214],{"class":213},[203,89611,89612],{"class":209},"...",[203,89614,89615],{"class":213},"arr))\n",[203,89617,89618,89620,89622],{"class":205,"line":2710},[203,89619,52475],{"class":213},[203,89621,51871],{"class":51358},[203,89623,51365],{"class":213},[203,89625,89626,89628,89630],{"class":205,"line":8038},[203,89627,51843],{"class":213},[203,89629,51858],{"class":51358},[203,89631,51365],{"class":213},[203,89633,89634],{"class":205,"line":8062},[203,89635,2489],{"emptyLinePlaceholder":131},[203,89637,89638,89640,89642],{"class":205,"line":8067},[203,89639,51843],{"class":213},[203,89641,50693],{"class":51358},[203,89643,51365],{"class":213},[19,89645,89646],{},[25,89647],{"alt":27,"src":89648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[157,89650,89651],{"start":1269},[160,89652,89653],{},"bind()",[19,89655,89656],{},[25,89657],{"alt":27,"src":89658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,89660,89661],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,89663,89664],{},"bind的语法跟call很相似",[194,89666,89668],{"className":53125,"code":89667,"language":53127,"meta":27,"style":27},"\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",[200,89669,89670,89678,89686,89690,89695,89699,89703,89708,89712,89717,89722,89727,89732,89737,89742,89747,89751,89759],{"__ignoreMap":27},[203,89671,89672,89674,89676],{"class":205,"line":206},[203,89673,1124],{"class":213},[203,89675,51858],{"class":51358},[203,89677,51365],{"class":213},[203,89679,89680,89682,89684],{"class":205,"line":124},[203,89681,52202],{"class":213},[203,89683,51871],{"class":51358},[203,89685,51365],{"class":213},[203,89687,89688],{"class":205,"line":1269},[203,89689,71581],{"class":213},[203,89691,89692],{"class":205,"line":1284},[203,89693,89694],{"class":213},"      age: 18\n",[203,89696,89697],{"class":205,"line":1290},[203,89698,2276],{"class":213},[203,89700,89701],{"class":205,"line":1304},[203,89702,77201],{"class":213},[203,89704,89705],{"class":205,"line":1310},[203,89706,89707],{"class":213},"      console.log(this)\n",[203,89709,89710],{"class":205,"line":1401},[203,89711,2276],{"class":213},[203,89713,89714],{"class":205,"line":1407},[203,89715,89716],{"class":213},"    \u002F\u002F 1.bind 不会调用函数\n",[203,89718,89719],{"class":205,"line":1419},[203,89720,89721],{"class":213},"    \u002F\u002F 2.bind能改变this的指向\n",[203,89723,89724],{"class":205,"line":1701},[203,89725,89726],{"class":213},"    fn.bind()\n",[203,89728,89729],{"class":205,"line":1706},[203,89730,89731],{"class":213},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[203,89733,89734],{"class":205,"line":1712},[203,89735,89736],{"class":213},"    const fun = fn.bind(obj)\n",[203,89738,89739],{"class":205,"line":1717},[203,89740,89741],{"class":213},"    \u002F\u002F console.log(fun)\n",[203,89743,89744],{"class":205,"line":1731},[203,89745,89746],{"class":213},"    \u002F\u002F 调用,查看this的指向\n",[203,89748,89749],{"class":205,"line":1736},[203,89750,52709],{"class":213},[203,89752,89753,89755,89757],{"class":205,"line":1742},[203,89754,52475],{"class":213},[203,89756,51871],{"class":51358},[203,89758,51365],{"class":213},[203,89760,89761,89763,89765],{"class":205,"line":1763},[203,89762,51843],{"class":213},[203,89764,51858],{"class":51358},[203,89766,51365],{"class":213},[19,89768,89769],{},[25,89770],{"alt":27,"src":89771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[157,89773,89774],{"start":1284},[160,89775,89776],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[194,89778,89780],{"className":53125,"code":89779,"language":53127,"meta":27,"style":27},"\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",[200,89781,89782,89790,89803,89811,89816,89820,89825,89830,89835,89840,89845,89850,89855,89860,89864,89872],{"__ignoreMap":27},[203,89783,89784,89786,89788],{"class":205,"line":206},[203,89785,1124],{"class":213},[203,89787,51858],{"class":51358},[203,89789,51365],{"class":213},[203,89791,89792,89794,89796,89799,89801],{"class":205,"line":124},[203,89793,52202],{"class":213},[203,89795,53945],{"class":51358},[203,89797,89798],{"class":213},">禁用\u003C\u002F",[203,89800,53945],{"class":51358},[203,89802,51365],{"class":213},[203,89804,89805,89807,89809],{"class":205,"line":1269},[203,89806,52202],{"class":213},[203,89808,51871],{"class":51358},[203,89810,51365],{"class":213},[203,89812,89813],{"class":205,"line":1284},[203,89814,89815],{"class":213},"    const btn = document.querySelector('button')\n",[203,89817,89818],{"class":205,"line":1290},[203,89819,59074],{"class":213},[203,89821,89822],{"class":205,"line":1304},[203,89823,89824],{"class":213},"      this.disabled = true\n",[203,89826,89827],{"class":205,"line":1310},[203,89828,89829],{"class":213},"      \u002F\u002F 定时器是window进行调用的\n",[203,89831,89832],{"class":205,"line":1401},[203,89833,89834],{"class":213},"      setTimeout(function () {\n",[203,89836,89837],{"class":205,"line":1407},[203,89838,89839],{"class":213},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[203,89841,89842],{"class":205,"line":1419},[203,89843,89844],{"class":213},"        this.disabled = false\n",[203,89846,89847],{"class":205,"line":1701},[203,89848,89849],{"class":213},"      }.bind(this), 2000)\n",[203,89851,89852],{"class":205,"line":1706},[203,89853,89854],{"class":213},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[203,89856,89857],{"class":205,"line":1712},[203,89858,89859],{"class":213},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[203,89861,89862],{"class":205,"line":1717},[203,89863,33519],{"class":213},[203,89865,89866,89868,89870],{"class":205,"line":1731},[203,89867,52475],{"class":213},[203,89869,51871],{"class":51358},[203,89871,51365],{"class":213},[203,89873,89874,89876,89878],{"class":205,"line":1736},[203,89875,51843],{"class":213},[203,89877,51858],{"class":51358},[203,89879,51365],{"class":213},[157,89881,89882],{"start":1290},[160,89883,22043],{},[19,89885,89886],{},[25,89887],{"alt":27,"src":89888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,89890,89892],{"id":89891},"_417-性能优化","4.17 性能优化",[174,89894,89896],{"id":89895},"_4171-防抖","4.17.1 防抖",[19,89898,89899],{},[25,89900],{"alt":27,"src":89901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,89903,89904],{},[363,89905,89906],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,89908,89909],{},"防抖实现方式：",[1221,89911,89912],{},[160,89913,89914],{},"lodash 提供了防抖处理",[19,89916,89917],{},"_.debounce(func,[wait=0],[options={}])",[19,89919,89920],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[194,89922,89924],{"className":50691,"code":89923,"language":50693,"meta":27,"style":27},"\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",[200,89925,89926,89936,89950,89954,89962,89976,89996,90008,90016,90022,90032,90044,90056,90067,90079,90089,90099,90112,90116,90124,90132,90136,90144,90162,90180,90188,90207,90217,90226,90237,90242,90246,90251,90256,90261,90286,90294,90302,90306],{"__ignoreMap":27},[203,89927,89928,89930,89932,89934],{"class":205,"line":206},[203,89929,51355],{"class":213},[203,89931,51359],{"class":51358},[203,89933,51362],{"class":2052},[203,89935,51365],{"class":213},[203,89937,89938,89940,89942,89944,89946,89948],{"class":205,"line":124},[203,89939,1124],{"class":213},[203,89941,50693],{"class":51358},[203,89943,51374],{"class":2052},[203,89945,259],{"class":213},[203,89947,51379],{"class":318},[203,89949,51365],{"class":213},[203,89951,89952],{"class":205,"line":1269},[203,89953,2489],{"emptyLinePlaceholder":131},[203,89955,89956,89958,89960],{"class":205,"line":1284},[203,89957,1124],{"class":213},[203,89959,51392],{"class":51358},[203,89961,51365],{"class":213},[203,89963,89964,89966,89968,89970,89972,89974],{"class":205,"line":1290},[203,89965,52202],{"class":213},[203,89967,51402],{"class":51358},[203,89969,51405],{"class":2052},[203,89971,259],{"class":213},[203,89973,51410],{"class":318},[203,89975,51365],{"class":213},[203,89977,89978,89980,89982,89984,89986,89988,89990,89992,89994],{"class":205,"line":1304},[203,89979,52202],{"class":213},[203,89981,51402],{"class":51358},[203,89983,15010],{"class":2052},[203,89985,259],{"class":213},[203,89987,51449],{"class":318},[203,89989,51429],{"class":2052},[203,89991,259],{"class":213},[203,89993,51456],{"class":318},[203,89995,51365],{"class":213},[203,89997,89998,90000,90002,90004,90006],{"class":205,"line":1310},[203,89999,52202],{"class":213},[203,90001,51465],{"class":51358},[203,90003,51468],{"class":213},[203,90005,51465],{"class":51358},[203,90007,51365],{"class":213},[203,90009,90010,90012,90014],{"class":205,"line":1401},[203,90011,52202],{"class":213},[203,90013,5216],{"class":51358},[203,90015,51365],{"class":213},[203,90017,90018,90020],{"class":205,"line":1407},[203,90019,54810],{"class":2052},[203,90021,15662],{"class":213},[203,90023,90024,90026,90028,90030],{"class":205,"line":1419},[203,90025,72654],{"class":262},[203,90027,51495],{"class":213},[203,90029,60563],{"class":262},[203,90031,1380],{"class":213},[203,90033,90034,90036,90038,90040,90042],{"class":205,"line":1701},[203,90035,54829],{"class":262},[203,90037,51495],{"class":213},[203,90039,1811],{"class":262},[203,90041,51550],{"class":209},[203,90043,1380],{"class":213},[203,90045,90046,90048,90050,90052,90054],{"class":205,"line":1706},[203,90047,54843],{"class":262},[203,90049,51495],{"class":213},[203,90051,1811],{"class":262},[203,90053,51550],{"class":209},[203,90055,1380],{"class":213},[203,90057,90058,90060,90062,90065],{"class":205,"line":1712},[203,90059,54942],{"class":262},[203,90061,51495],{"class":213},[203,90063,90064],{"class":262},"gray",[203,90066,1380],{"class":213},[203,90068,90069,90071,90073,90075,90077],{"class":205,"line":1717},[203,90070,54980],{"class":262},[203,90072,51495],{"class":213},[203,90074,1039],{"class":262},[203,90076,51550],{"class":209},[203,90078,1380],{"class":213},[203,90080,90081,90083,90085,90087],{"class":205,"line":1731},[203,90082,57474],{"class":262},[203,90084,51495],{"class":213},[203,90086,60900],{"class":262},[203,90088,1380],{"class":213},[203,90090,90091,90093,90095,90097],{"class":205,"line":1736},[203,90092,57344],{"class":262},[203,90094,51495],{"class":213},[203,90096,51650],{"class":262},[203,90098,1380],{"class":213},[203,90100,90101,90104,90106,90108,90110],{"class":205,"line":1742},[203,90102,90103],{"class":262},"      padding-top",[203,90105,51495],{"class":213},[203,90107,533],{"class":262},[203,90109,51550],{"class":209},[203,90111,1380],{"class":213},[203,90113,90114],{"class":205,"line":1763},[203,90115,2276],{"class":213},[203,90117,90118,90120,90122],{"class":205,"line":1768},[203,90119,52475],{"class":213},[203,90121,5216],{"class":51358},[203,90123,51365],{"class":213},[203,90125,90126,90128,90130],{"class":205,"line":1782},[203,90127,51843],{"class":213},[203,90129,51392],{"class":51358},[203,90131,51365],{"class":213},[203,90133,90134],{"class":205,"line":1787},[203,90135,2489],{"emptyLinePlaceholder":131},[203,90137,90138,90140,90142],{"class":205,"line":1816},[203,90139,1124],{"class":213},[203,90141,51858],{"class":51358},[203,90143,51365],{"class":213},[203,90145,90146,90148,90150,90152,90154,90156,90158,90160],{"class":205,"line":1821},[203,90147,52202],{"class":213},[203,90149,51669],{"class":51358},[203,90151,53544],{"class":2052},[203,90153,259],{"class":213},[203,90155,53549],{"class":318},[203,90157,55372],{"class":213},[203,90159,51669],{"class":51358},[203,90161,51365],{"class":213},[203,90163,90164,90166,90168,90170,90172,90174,90176,90178],{"class":205,"line":1838},[203,90165,52202],{"class":213},[203,90167,51871],{"class":51358},[203,90169,55297],{"class":2052},[203,90171,259],{"class":213},[203,90173,88332],{"class":318},[203,90175,55372],{"class":213},[203,90177,51871],{"class":51358},[203,90179,51365],{"class":213},[203,90181,90182,90184,90186],{"class":205,"line":1843},[203,90183,52202],{"class":213},[203,90185,51871],{"class":51358},[203,90187,51365],{"class":213},[203,90189,90190,90192,90194,90196,90198,90200,90202,90205],{"class":205,"line":1848},[203,90191,11311],{"class":209},[203,90193,86991],{"class":262},[203,90195,13654],{"class":209},[203,90197,54454],{"class":213},[203,90199,54457],{"class":2052},[203,90201,214],{"class":213},[203,90203,90204],{"class":318},"'.box'",[203,90206,220],{"class":213},[203,90208,90209,90211,90213,90215],{"class":205,"line":1853},[203,90210,52277],{"class":209},[203,90212,9528],{"class":213},[203,90214,259],{"class":209},[203,90216,47391],{"class":262},[203,90218,90219,90221,90224],{"class":205,"line":1867},[203,90220,70142],{"class":209},[203,90222,90223],{"class":2052}," mouseMove",[203,90225,10943],{"class":213},[203,90227,90228,90231,90233,90235],{"class":205,"line":1872},[203,90229,90230],{"class":213},"      box.innerHTML ",[203,90232,259],{"class":209},[203,90234,3121],{"class":213},[203,90236,2791],{"class":209},[203,90238,90239],{"class":205,"line":2666},[203,90240,90241],{"class":272},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[203,90243,90244],{"class":205,"line":2680},[203,90245,2276],{"class":213},[203,90247,90248],{"class":205,"line":2688},[203,90249,90250],{"class":272},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[203,90252,90253],{"class":205,"line":2693},[203,90254,90255],{"class":272},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[203,90257,90258],{"class":205,"line":2699},[203,90259,90260],{"class":272},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[203,90262,90263,90266,90268,90270,90273,90276,90279,90282,90284],{"class":205,"line":2705},[203,90264,90265],{"class":213},"    box.",[203,90267,57871],{"class":2052},[203,90269,214],{"class":213},[203,90271,90272],{"class":318},"'mousemove'",[203,90274,90275],{"class":213},", _.",[203,90277,90278],{"class":2052},"debounce",[203,90280,90281],{"class":213},"(mouseMove, ",[203,90283,65132],{"class":262},[203,90285,30555],{"class":213},[203,90287,90288,90290,90292],{"class":205,"line":2710},[203,90289,52475],{"class":213},[203,90291,51871],{"class":51358},[203,90293,51365],{"class":213},[203,90295,90296,90298,90300],{"class":205,"line":8038},[203,90297,51843],{"class":213},[203,90299,51858],{"class":51358},[203,90301,51365],{"class":213},[203,90303,90304],{"class":205,"line":8062},[203,90305,2489],{"emptyLinePlaceholder":131},[203,90307,90308,90310,90312],{"class":205,"line":8067},[203,90309,51843],{"class":213},[203,90311,50693],{"class":51358},[203,90313,51365],{"class":213},[1221,90315,90316],{},[160,90317,90318],{},"手写一个防抖函数来处理",[19,90320,90321],{},"防抖的核心就是利用定时器来实现的：",[19,90323,90324],{},"①声明一个定时器变量",[19,90326,90327],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90329,90330],{},"③如果没有定时器则开启定时器，记得存到变量里面",[194,90332,90334],{"className":50691,"code":90333,"language":50693,"meta":27,"style":27},"\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",[200,90335,90336,90346,90360,90364,90372,90386,90406,90418,90426,90432,90442,90454,90466,90476,90488,90498,90508,90520,90524,90532,90540,90544,90552,90570,90588,90596,90614,90624,90632,90642,90646,90650,90654,90659,90664,90669,90674,90679,90684,90702,90709,90714,90722,90727,90740,90756,90766,90771,90775,90779,90799,90803,90808,90813,90818,90823,90831,90839,90843],{"__ignoreMap":27},[203,90337,90338,90340,90342,90344],{"class":205,"line":206},[203,90339,51355],{"class":213},[203,90341,51359],{"class":51358},[203,90343,51362],{"class":2052},[203,90345,51365],{"class":213},[203,90347,90348,90350,90352,90354,90356,90358],{"class":205,"line":124},[203,90349,1124],{"class":213},[203,90351,50693],{"class":51358},[203,90353,51374],{"class":2052},[203,90355,259],{"class":213},[203,90357,51379],{"class":318},[203,90359,51365],{"class":213},[203,90361,90362],{"class":205,"line":1269},[203,90363,2489],{"emptyLinePlaceholder":131},[203,90365,90366,90368,90370],{"class":205,"line":1284},[203,90367,1124],{"class":213},[203,90369,51392],{"class":51358},[203,90371,51365],{"class":213},[203,90373,90374,90376,90378,90380,90382,90384],{"class":205,"line":1290},[203,90375,52202],{"class":213},[203,90377,51402],{"class":51358},[203,90379,51405],{"class":2052},[203,90381,259],{"class":213},[203,90383,51410],{"class":318},[203,90385,51365],{"class":213},[203,90387,90388,90390,90392,90394,90396,90398,90400,90402,90404],{"class":205,"line":1304},[203,90389,52202],{"class":213},[203,90391,51402],{"class":51358},[203,90393,15010],{"class":2052},[203,90395,259],{"class":213},[203,90397,51449],{"class":318},[203,90399,51429],{"class":2052},[203,90401,259],{"class":213},[203,90403,51456],{"class":318},[203,90405,51365],{"class":213},[203,90407,90408,90410,90412,90414,90416],{"class":205,"line":1310},[203,90409,52202],{"class":213},[203,90411,51465],{"class":51358},[203,90413,51468],{"class":213},[203,90415,51465],{"class":51358},[203,90417,51365],{"class":213},[203,90419,90420,90422,90424],{"class":205,"line":1401},[203,90421,52202],{"class":213},[203,90423,5216],{"class":51358},[203,90425,51365],{"class":213},[203,90427,90428,90430],{"class":205,"line":1407},[203,90429,54810],{"class":2052},[203,90431,15662],{"class":213},[203,90433,90434,90436,90438,90440],{"class":205,"line":1419},[203,90435,72654],{"class":262},[203,90437,51495],{"class":213},[203,90439,60563],{"class":262},[203,90441,1380],{"class":213},[203,90443,90444,90446,90448,90450,90452],{"class":205,"line":1701},[203,90445,54829],{"class":262},[203,90447,51495],{"class":213},[203,90449,1811],{"class":262},[203,90451,51550],{"class":209},[203,90453,1380],{"class":213},[203,90455,90456,90458,90460,90462,90464],{"class":205,"line":1706},[203,90457,54843],{"class":262},[203,90459,51495],{"class":213},[203,90461,1811],{"class":262},[203,90463,51550],{"class":209},[203,90465,1380],{"class":213},[203,90467,90468,90470,90472,90474],{"class":205,"line":1712},[203,90469,54942],{"class":262},[203,90471,51495],{"class":213},[203,90473,90064],{"class":262},[203,90475,1380],{"class":213},[203,90477,90478,90480,90482,90484,90486],{"class":205,"line":1717},[203,90479,54980],{"class":262},[203,90481,51495],{"class":213},[203,90483,1039],{"class":262},[203,90485,51550],{"class":209},[203,90487,1380],{"class":213},[203,90489,90490,90492,90494,90496],{"class":205,"line":1731},[203,90491,57474],{"class":262},[203,90493,51495],{"class":213},[203,90495,60900],{"class":262},[203,90497,1380],{"class":213},[203,90499,90500,90502,90504,90506],{"class":205,"line":1736},[203,90501,57344],{"class":262},[203,90503,51495],{"class":213},[203,90505,51650],{"class":262},[203,90507,1380],{"class":213},[203,90509,90510,90512,90514,90516,90518],{"class":205,"line":1742},[203,90511,90103],{"class":262},[203,90513,51495],{"class":213},[203,90515,533],{"class":262},[203,90517,51550],{"class":209},[203,90519,1380],{"class":213},[203,90521,90522],{"class":205,"line":1763},[203,90523,2276],{"class":213},[203,90525,90526,90528,90530],{"class":205,"line":1768},[203,90527,52475],{"class":213},[203,90529,5216],{"class":51358},[203,90531,51365],{"class":213},[203,90533,90534,90536,90538],{"class":205,"line":1782},[203,90535,51843],{"class":213},[203,90537,51392],{"class":51358},[203,90539,51365],{"class":213},[203,90541,90542],{"class":205,"line":1787},[203,90543,2489],{"emptyLinePlaceholder":131},[203,90545,90546,90548,90550],{"class":205,"line":1816},[203,90547,1124],{"class":213},[203,90549,51858],{"class":51358},[203,90551,51365],{"class":213},[203,90553,90554,90556,90558,90560,90562,90564,90566,90568],{"class":205,"line":1821},[203,90555,52202],{"class":213},[203,90557,51669],{"class":51358},[203,90559,53544],{"class":2052},[203,90561,259],{"class":213},[203,90563,53549],{"class":318},[203,90565,55372],{"class":213},[203,90567,51669],{"class":51358},[203,90569,51365],{"class":213},[203,90571,90572,90574,90576,90578,90580,90582,90584,90586],{"class":205,"line":1838},[203,90573,52202],{"class":213},[203,90575,51871],{"class":51358},[203,90577,55297],{"class":2052},[203,90579,259],{"class":213},[203,90581,88332],{"class":318},[203,90583,55372],{"class":213},[203,90585,51871],{"class":51358},[203,90587,51365],{"class":213},[203,90589,90590,90592,90594],{"class":205,"line":1843},[203,90591,52202],{"class":213},[203,90593,51871],{"class":51358},[203,90595,51365],{"class":213},[203,90597,90598,90600,90602,90604,90606,90608,90610,90612],{"class":205,"line":1848},[203,90599,11311],{"class":209},[203,90601,86991],{"class":262},[203,90603,13654],{"class":209},[203,90605,54454],{"class":213},[203,90607,54457],{"class":2052},[203,90609,214],{"class":213},[203,90611,90204],{"class":318},[203,90613,220],{"class":213},[203,90615,90616,90618,90620,90622],{"class":205,"line":1853},[203,90617,52277],{"class":209},[203,90619,9528],{"class":213},[203,90621,259],{"class":209},[203,90623,47391],{"class":262},[203,90625,90626,90628,90630],{"class":205,"line":1867},[203,90627,70142],{"class":209},[203,90629,90223],{"class":2052},[203,90631,10943],{"class":213},[203,90633,90634,90636,90638,90640],{"class":205,"line":1872},[203,90635,90230],{"class":213},[203,90637,259],{"class":209},[203,90639,3121],{"class":213},[203,90641,2791],{"class":209},[203,90643,90644],{"class":205,"line":2666},[203,90645,90241],{"class":272},[203,90647,90648],{"class":205,"line":2680},[203,90649,2276],{"class":213},[203,90651,90652],{"class":205,"line":2688},[203,90653,90250],{"class":272},[203,90655,90656],{"class":205,"line":2693},[203,90657,90658],{"class":272},"    \u002F\u002F 手写防抖函数\n",[203,90660,90661],{"class":205,"line":2699},[203,90662,90663],{"class":272},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[203,90665,90666],{"class":205,"line":2705},[203,90667,90668],{"class":272},"    \u002F\u002F 1.声明定时器变量\n",[203,90670,90671],{"class":205,"line":2710},[203,90672,90673],{"class":272},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[203,90675,90676],{"class":205,"line":8038},[203,90677,90678],{"class":272},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[203,90680,90681],{"class":205,"line":8062},[203,90682,90683],{"class":272},"    \u002F\u002F 4.定时器里面写函数调用\n",[203,90685,90686,90688,90691,90693,90696,90698,90700],{"class":205,"line":8067},[203,90687,70142],{"class":209},[203,90689,90690],{"class":2052}," debounce",[203,90692,214],{"class":213},[203,90694,90695],{"class":5306},"fn",[203,90697,12525],{"class":213},[203,90699,934],{"class":5306},[203,90701,12532],{"class":213},[203,90703,90704,90706],{"class":205,"line":8073},[203,90705,79830],{"class":209},[203,90707,90708],{"class":213}," timer\n",[203,90710,90711],{"class":205,"line":8100},[203,90712,90713],{"class":272},"      \u002F\u002F return 返回一个匿名函数\n",[203,90715,90716,90718,90720],{"class":205,"line":8105},[203,90717,74040],{"class":209},[203,90719,58976],{"class":209},[203,90721,54510],{"class":213},[203,90723,90724],{"class":205,"line":8111},[203,90725,90726],{"class":272},"        \u002F\u002F 这里边写第二三四步\n",[203,90728,90729,90731,90734,90737],{"class":205,"line":8123},[203,90730,2586],{"class":209},[203,90732,90733],{"class":213}," (timer) ",[203,90735,90736],{"class":2052},"clearTimeout",[203,90738,90739],{"class":213},"(timer)\n",[203,90741,90742,90745,90747,90750,90752,90754],{"class":205,"line":8135},[203,90743,90744],{"class":213},"        timer ",[203,90746,259],{"class":209},[203,90748,90749],{"class":2052}," setTimeout",[203,90751,214],{"class":213},[203,90753,54507],{"class":209},[203,90755,54510],{"class":213},[203,90757,90758,90761,90763],{"class":205,"line":8147},[203,90759,90760],{"class":2052},"          fn",[203,90762,13140],{"class":213},[203,90764,90765],{"class":272},"\u002F\u002F加小括号调用fn }, t)\n",[203,90767,90768],{"class":205,"line":9806},[203,90769,90770],{"class":213},"        }, t)\n",[203,90772,90773],{"class":205,"line":9831},[203,90774,52456],{"class":213},[203,90776,90777],{"class":205,"line":9854},[203,90778,2276],{"class":213},[203,90780,90781,90783,90785,90787,90789,90791,90793,90795,90797],{"class":205,"line":9878},[203,90782,90265],{"class":213},[203,90784,57871],{"class":2052},[203,90786,214],{"class":213},[203,90788,90272],{"class":318},[203,90790,12525],{"class":213},[203,90792,90278],{"class":2052},[203,90794,90281],{"class":213},[203,90796,65132],{"class":262},[203,90798,30555],{"class":213},[203,90800,90801],{"class":205,"line":9883},[203,90802,2489],{"emptyLinePlaceholder":131},[203,90804,90805],{"class":205,"line":9888},[203,90806,90807],{"class":272},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[203,90809,90810],{"class":205,"line":9893},[203,90811,90812],{"class":272},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[203,90814,90815],{"class":205,"line":9902},[203,90816,90817],{"class":272},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[203,90819,90820],{"class":205,"line":9907},[203,90821,90822],{"class":272},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[203,90824,90825,90827,90829],{"class":205,"line":9913},[203,90826,52475],{"class":213},[203,90828,51871],{"class":51358},[203,90830,51365],{"class":213},[203,90832,90833,90835,90837],{"class":205,"line":9934},[203,90834,51843],{"class":213},[203,90836,51858],{"class":51358},[203,90838,51365],{"class":213},[203,90840,90841],{"class":205,"line":9940},[203,90842,2489],{"emptyLinePlaceholder":131},[203,90844,90845,90847,90849],{"class":205,"line":9954},[203,90846,51843],{"class":213},[203,90848,50693],{"class":51358},[203,90850,51365],{"class":213},[174,90852,90854],{"id":90853},"_4172-节流","4.17.2 节流",[19,90856,90857],{},[25,90858],{"alt":27,"src":90859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,90861,90862],{},[25,90863],{"alt":27,"src":90864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,90866,90867],{},[363,90868,90869],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,90871,90872],{},"实现方式：",[1221,90874,90875],{},[160,90876,90877],{},"lodash 提供的节流函数来处理",[19,90879,90880],{},"_.throttle(func,[wait=0],[options=])",[19,90882,90883],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[194,90885,90887],{"className":50691,"code":90886,"language":50693,"meta":27,"style":27},"\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",[200,90888,90889,90899,90913,90917,90925,90939,90959,90971,90979,90985,90995,91007,91019,91029,91041,91051,91061,91073,91077,91085,91093,91097,91105,91123,91141,91149,91167,91177,91185,91195,91199,91203,91207,91212,91217,91238,91246,91254,91258],{"__ignoreMap":27},[203,90890,90891,90893,90895,90897],{"class":205,"line":206},[203,90892,51355],{"class":213},[203,90894,51359],{"class":51358},[203,90896,51362],{"class":2052},[203,90898,51365],{"class":213},[203,90900,90901,90903,90905,90907,90909,90911],{"class":205,"line":124},[203,90902,1124],{"class":213},[203,90904,50693],{"class":51358},[203,90906,51374],{"class":2052},[203,90908,259],{"class":213},[203,90910,51379],{"class":318},[203,90912,51365],{"class":213},[203,90914,90915],{"class":205,"line":1269},[203,90916,2489],{"emptyLinePlaceholder":131},[203,90918,90919,90921,90923],{"class":205,"line":1284},[203,90920,1124],{"class":213},[203,90922,51392],{"class":51358},[203,90924,51365],{"class":213},[203,90926,90927,90929,90931,90933,90935,90937],{"class":205,"line":1290},[203,90928,52202],{"class":213},[203,90930,51402],{"class":51358},[203,90932,51405],{"class":2052},[203,90934,259],{"class":213},[203,90936,51410],{"class":318},[203,90938,51365],{"class":213},[203,90940,90941,90943,90945,90947,90949,90951,90953,90955,90957],{"class":205,"line":1304},[203,90942,52202],{"class":213},[203,90944,51402],{"class":51358},[203,90946,15010],{"class":2052},[203,90948,259],{"class":213},[203,90950,51449],{"class":318},[203,90952,51429],{"class":2052},[203,90954,259],{"class":213},[203,90956,51456],{"class":318},[203,90958,51365],{"class":213},[203,90960,90961,90963,90965,90967,90969],{"class":205,"line":1310},[203,90962,52202],{"class":213},[203,90964,51465],{"class":51358},[203,90966,51468],{"class":213},[203,90968,51465],{"class":51358},[203,90970,51365],{"class":213},[203,90972,90973,90975,90977],{"class":205,"line":1401},[203,90974,52202],{"class":213},[203,90976,5216],{"class":51358},[203,90978,51365],{"class":213},[203,90980,90981,90983],{"class":205,"line":1407},[203,90982,54810],{"class":2052},[203,90984,15662],{"class":213},[203,90986,90987,90989,90991,90993],{"class":205,"line":1419},[203,90988,72654],{"class":262},[203,90990,51495],{"class":213},[203,90992,60563],{"class":262},[203,90994,1380],{"class":213},[203,90996,90997,90999,91001,91003,91005],{"class":205,"line":1701},[203,90998,54829],{"class":262},[203,91000,51495],{"class":213},[203,91002,1811],{"class":262},[203,91004,51550],{"class":209},[203,91006,1380],{"class":213},[203,91008,91009,91011,91013,91015,91017],{"class":205,"line":1706},[203,91010,54843],{"class":262},[203,91012,51495],{"class":213},[203,91014,1811],{"class":262},[203,91016,51550],{"class":209},[203,91018,1380],{"class":213},[203,91020,91021,91023,91025,91027],{"class":205,"line":1712},[203,91022,54942],{"class":262},[203,91024,51495],{"class":213},[203,91026,90064],{"class":262},[203,91028,1380],{"class":213},[203,91030,91031,91033,91035,91037,91039],{"class":205,"line":1717},[203,91032,54980],{"class":262},[203,91034,51495],{"class":213},[203,91036,1039],{"class":262},[203,91038,51550],{"class":209},[203,91040,1380],{"class":213},[203,91042,91043,91045,91047,91049],{"class":205,"line":1731},[203,91044,57474],{"class":262},[203,91046,51495],{"class":213},[203,91048,60900],{"class":262},[203,91050,1380],{"class":213},[203,91052,91053,91055,91057,91059],{"class":205,"line":1736},[203,91054,57344],{"class":262},[203,91056,51495],{"class":213},[203,91058,51650],{"class":262},[203,91060,1380],{"class":213},[203,91062,91063,91065,91067,91069,91071],{"class":205,"line":1742},[203,91064,90103],{"class":262},[203,91066,51495],{"class":213},[203,91068,533],{"class":262},[203,91070,51550],{"class":209},[203,91072,1380],{"class":213},[203,91074,91075],{"class":205,"line":1763},[203,91076,2276],{"class":213},[203,91078,91079,91081,91083],{"class":205,"line":1768},[203,91080,52475],{"class":213},[203,91082,5216],{"class":51358},[203,91084,51365],{"class":213},[203,91086,91087,91089,91091],{"class":205,"line":1782},[203,91088,51843],{"class":213},[203,91090,51392],{"class":51358},[203,91092,51365],{"class":213},[203,91094,91095],{"class":205,"line":1787},[203,91096,2489],{"emptyLinePlaceholder":131},[203,91098,91099,91101,91103],{"class":205,"line":1816},[203,91100,1124],{"class":213},[203,91102,51858],{"class":51358},[203,91104,51365],{"class":213},[203,91106,91107,91109,91111,91113,91115,91117,91119,91121],{"class":205,"line":1821},[203,91108,52202],{"class":213},[203,91110,51669],{"class":51358},[203,91112,53544],{"class":2052},[203,91114,259],{"class":213},[203,91116,53549],{"class":318},[203,91118,55372],{"class":213},[203,91120,51669],{"class":51358},[203,91122,51365],{"class":213},[203,91124,91125,91127,91129,91131,91133,91135,91137,91139],{"class":205,"line":1838},[203,91126,52202],{"class":213},[203,91128,51871],{"class":51358},[203,91130,55297],{"class":2052},[203,91132,259],{"class":213},[203,91134,88332],{"class":318},[203,91136,55372],{"class":213},[203,91138,51871],{"class":51358},[203,91140,51365],{"class":213},[203,91142,91143,91145,91147],{"class":205,"line":1843},[203,91144,52202],{"class":213},[203,91146,51871],{"class":51358},[203,91148,51365],{"class":213},[203,91150,91151,91153,91155,91157,91159,91161,91163,91165],{"class":205,"line":1848},[203,91152,11311],{"class":209},[203,91154,86991],{"class":262},[203,91156,13654],{"class":209},[203,91158,54454],{"class":213},[203,91160,54457],{"class":2052},[203,91162,214],{"class":213},[203,91164,90204],{"class":318},[203,91166,220],{"class":213},[203,91168,91169,91171,91173,91175],{"class":205,"line":1853},[203,91170,52277],{"class":209},[203,91172,9528],{"class":213},[203,91174,259],{"class":209},[203,91176,47391],{"class":262},[203,91178,91179,91181,91183],{"class":205,"line":1867},[203,91180,70142],{"class":209},[203,91182,90223],{"class":2052},[203,91184,10943],{"class":213},[203,91186,91187,91189,91191,91193],{"class":205,"line":1872},[203,91188,90230],{"class":213},[203,91190,259],{"class":209},[203,91192,3121],{"class":213},[203,91194,2791],{"class":209},[203,91196,91197],{"class":205,"line":2666},[203,91198,90241],{"class":272},[203,91200,91201],{"class":205,"line":2680},[203,91202,2276],{"class":213},[203,91204,91205],{"class":205,"line":2688},[203,91206,90250],{"class":272},[203,91208,91209],{"class":205,"line":2693},[203,91210,91211],{"class":272},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[203,91213,91214],{"class":205,"line":2699},[203,91215,91216],{"class":272},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[203,91218,91219,91221,91223,91225,91227,91229,91232,91234,91236],{"class":205,"line":2705},[203,91220,90265],{"class":213},[203,91222,57871],{"class":2052},[203,91224,214],{"class":213},[203,91226,90272],{"class":318},[203,91228,90275],{"class":213},[203,91230,91231],{"class":2052},"throttle",[203,91233,90281],{"class":213},[203,91235,65132],{"class":262},[203,91237,30555],{"class":213},[203,91239,91240,91242,91244],{"class":205,"line":2710},[203,91241,52475],{"class":213},[203,91243,51871],{"class":51358},[203,91245,51365],{"class":213},[203,91247,91248,91250,91252],{"class":205,"line":8038},[203,91249,51843],{"class":213},[203,91251,51858],{"class":51358},[203,91253,51365],{"class":213},[203,91255,91256],{"class":205,"line":8062},[203,91257,2489],{"emptyLinePlaceholder":131},[203,91259,91260,91262,91264],{"class":205,"line":8067},[203,91261,51843],{"class":213},[203,91263,50693],{"class":51358},[203,91265,51365],{"class":213},[1221,91267,91268],{},[160,91269,91270],{},"手写一个节流函数来处理",[19,91272,71010],{},[19,91274,90324],{},[19,91276,91277],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91279,91280],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[194,91282,91284],{"className":50691,"code":91283,"language":50693,"meta":27,"style":27},"\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",[200,91285,91286,91296,91310,91314,91322,91336,91356,91368,91376,91382,91392,91404,91416,91426,91438,91448,91458,91470,91474,91482,91490,91494,91502,91520,91538,91546,91564,91574,91582,91592,91596,91600,91604,91609,91614,91619,91624,91629,91634,91651,91657,91665,91676,91691,91698,91703,91708,91718,91723,91728,91733,91737,91741,91745,91765,91773,91781,91785],{"__ignoreMap":27},[203,91287,91288,91290,91292,91294],{"class":205,"line":206},[203,91289,51355],{"class":213},[203,91291,51359],{"class":51358},[203,91293,51362],{"class":2052},[203,91295,51365],{"class":213},[203,91297,91298,91300,91302,91304,91306,91308],{"class":205,"line":124},[203,91299,1124],{"class":213},[203,91301,50693],{"class":51358},[203,91303,51374],{"class":2052},[203,91305,259],{"class":213},[203,91307,51379],{"class":318},[203,91309,51365],{"class":213},[203,91311,91312],{"class":205,"line":1269},[203,91313,2489],{"emptyLinePlaceholder":131},[203,91315,91316,91318,91320],{"class":205,"line":1284},[203,91317,1124],{"class":213},[203,91319,51392],{"class":51358},[203,91321,51365],{"class":213},[203,91323,91324,91326,91328,91330,91332,91334],{"class":205,"line":1290},[203,91325,52202],{"class":213},[203,91327,51402],{"class":51358},[203,91329,51405],{"class":2052},[203,91331,259],{"class":213},[203,91333,51410],{"class":318},[203,91335,51365],{"class":213},[203,91337,91338,91340,91342,91344,91346,91348,91350,91352,91354],{"class":205,"line":1304},[203,91339,52202],{"class":213},[203,91341,51402],{"class":51358},[203,91343,15010],{"class":2052},[203,91345,259],{"class":213},[203,91347,51449],{"class":318},[203,91349,51429],{"class":2052},[203,91351,259],{"class":213},[203,91353,51456],{"class":318},[203,91355,51365],{"class":213},[203,91357,91358,91360,91362,91364,91366],{"class":205,"line":1310},[203,91359,52202],{"class":213},[203,91361,51465],{"class":51358},[203,91363,51468],{"class":213},[203,91365,51465],{"class":51358},[203,91367,51365],{"class":213},[203,91369,91370,91372,91374],{"class":205,"line":1401},[203,91371,52202],{"class":213},[203,91373,5216],{"class":51358},[203,91375,51365],{"class":213},[203,91377,91378,91380],{"class":205,"line":1407},[203,91379,54810],{"class":2052},[203,91381,15662],{"class":213},[203,91383,91384,91386,91388,91390],{"class":205,"line":1419},[203,91385,72654],{"class":262},[203,91387,51495],{"class":213},[203,91389,60563],{"class":262},[203,91391,1380],{"class":213},[203,91393,91394,91396,91398,91400,91402],{"class":205,"line":1701},[203,91395,54829],{"class":262},[203,91397,51495],{"class":213},[203,91399,1811],{"class":262},[203,91401,51550],{"class":209},[203,91403,1380],{"class":213},[203,91405,91406,91408,91410,91412,91414],{"class":205,"line":1706},[203,91407,54843],{"class":262},[203,91409,51495],{"class":213},[203,91411,1811],{"class":262},[203,91413,51550],{"class":209},[203,91415,1380],{"class":213},[203,91417,91418,91420,91422,91424],{"class":205,"line":1712},[203,91419,54942],{"class":262},[203,91421,51495],{"class":213},[203,91423,90064],{"class":262},[203,91425,1380],{"class":213},[203,91427,91428,91430,91432,91434,91436],{"class":205,"line":1717},[203,91429,54980],{"class":262},[203,91431,51495],{"class":213},[203,91433,1039],{"class":262},[203,91435,51550],{"class":209},[203,91437,1380],{"class":213},[203,91439,91440,91442,91444,91446],{"class":205,"line":1731},[203,91441,57474],{"class":262},[203,91443,51495],{"class":213},[203,91445,60900],{"class":262},[203,91447,1380],{"class":213},[203,91449,91450,91452,91454,91456],{"class":205,"line":1736},[203,91451,57344],{"class":262},[203,91453,51495],{"class":213},[203,91455,51650],{"class":262},[203,91457,1380],{"class":213},[203,91459,91460,91462,91464,91466,91468],{"class":205,"line":1742},[203,91461,90103],{"class":262},[203,91463,51495],{"class":213},[203,91465,533],{"class":262},[203,91467,51550],{"class":209},[203,91469,1380],{"class":213},[203,91471,91472],{"class":205,"line":1763},[203,91473,2276],{"class":213},[203,91475,91476,91478,91480],{"class":205,"line":1768},[203,91477,52475],{"class":213},[203,91479,5216],{"class":51358},[203,91481,51365],{"class":213},[203,91483,91484,91486,91488],{"class":205,"line":1782},[203,91485,51843],{"class":213},[203,91487,51392],{"class":51358},[203,91489,51365],{"class":213},[203,91491,91492],{"class":205,"line":1787},[203,91493,2489],{"emptyLinePlaceholder":131},[203,91495,91496,91498,91500],{"class":205,"line":1816},[203,91497,1124],{"class":213},[203,91499,51858],{"class":51358},[203,91501,51365],{"class":213},[203,91503,91504,91506,91508,91510,91512,91514,91516,91518],{"class":205,"line":1821},[203,91505,52202],{"class":213},[203,91507,51669],{"class":51358},[203,91509,53544],{"class":2052},[203,91511,259],{"class":213},[203,91513,53549],{"class":318},[203,91515,55372],{"class":213},[203,91517,51669],{"class":51358},[203,91519,51365],{"class":213},[203,91521,91522,91524,91526,91528,91530,91532,91534,91536],{"class":205,"line":1838},[203,91523,52202],{"class":213},[203,91525,51871],{"class":51358},[203,91527,55297],{"class":2052},[203,91529,259],{"class":213},[203,91531,88332],{"class":318},[203,91533,55372],{"class":213},[203,91535,51871],{"class":51358},[203,91537,51365],{"class":213},[203,91539,91540,91542,91544],{"class":205,"line":1843},[203,91541,52202],{"class":213},[203,91543,51871],{"class":51358},[203,91545,51365],{"class":213},[203,91547,91548,91550,91552,91554,91556,91558,91560,91562],{"class":205,"line":1848},[203,91549,11311],{"class":209},[203,91551,86991],{"class":262},[203,91553,13654],{"class":209},[203,91555,54454],{"class":213},[203,91557,54457],{"class":2052},[203,91559,214],{"class":213},[203,91561,90204],{"class":318},[203,91563,220],{"class":213},[203,91565,91566,91568,91570,91572],{"class":205,"line":1853},[203,91567,52277],{"class":209},[203,91569,9528],{"class":213},[203,91571,259],{"class":209},[203,91573,47391],{"class":262},[203,91575,91576,91578,91580],{"class":205,"line":1867},[203,91577,70142],{"class":209},[203,91579,90223],{"class":2052},[203,91581,10943],{"class":213},[203,91583,91584,91586,91588,91590],{"class":205,"line":1872},[203,91585,90230],{"class":213},[203,91587,259],{"class":209},[203,91589,3121],{"class":213},[203,91591,2791],{"class":209},[203,91593,91594],{"class":205,"line":2666},[203,91595,90241],{"class":272},[203,91597,91598],{"class":205,"line":2680},[203,91599,2276],{"class":213},[203,91601,91602],{"class":205,"line":2688},[203,91603,90250],{"class":272},[203,91605,91606],{"class":205,"line":2693},[203,91607,91608],{"class":272},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[203,91610,91611],{"class":205,"line":2699},[203,91612,91613],{"class":272},"    \u002F\u002F 1.声明一个定时器变量\n",[203,91615,91616],{"class":205,"line":2705},[203,91617,91618],{"class":272},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[203,91620,91621],{"class":205,"line":2710},[203,91622,91623],{"class":272},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[203,91625,91626],{"class":205,"line":8038},[203,91627,91628],{"class":272},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[203,91630,91631],{"class":205,"line":8062},[203,91632,91633],{"class":272},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[203,91635,91636,91638,91641,91643,91645,91647,91649],{"class":205,"line":8067},[203,91637,70142],{"class":209},[203,91639,91640],{"class":2052}," throttle",[203,91642,214],{"class":213},[203,91644,90695],{"class":5306},[203,91646,12525],{"class":213},[203,91648,934],{"class":5306},[203,91650,12532],{"class":213},[203,91652,91653,91655],{"class":205,"line":8073},[203,91654,79830],{"class":209},[203,91656,90708],{"class":213},[203,91658,91659,91661,91663],{"class":205,"line":8100},[203,91660,74040],{"class":209},[203,91662,58976],{"class":209},[203,91664,54510],{"class":213},[203,91666,91667,91669,91671,91673],{"class":205,"line":8105},[203,91668,2586],{"class":209},[203,91670,1747],{"class":213},[203,91672,440],{"class":209},[203,91674,91675],{"class":213},"timer) {\n",[203,91677,91678,91681,91683,91685,91687,91689],{"class":205,"line":8111},[203,91679,91680],{"class":213},"          timer ",[203,91682,259],{"class":209},[203,91684,90749],{"class":2052},[203,91686,214],{"class":213},[203,91688,54507],{"class":209},[203,91690,54510],{"class":213},[203,91692,91693,91696],{"class":205,"line":8123},[203,91694,91695],{"class":2052},"            fn",[203,91697,2065],{"class":213},[203,91699,91700],{"class":205,"line":8135},[203,91701,91702],{"class":272},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[203,91704,91705],{"class":205,"line":8147},[203,91706,91707],{"class":272},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[203,91709,91710,91713,91715],{"class":205,"line":9806},[203,91711,91712],{"class":213},"            timer ",[203,91714,259],{"class":209},[203,91716,91717],{"class":262}," null\n",[203,91719,91720],{"class":205,"line":9831},[203,91721,91722],{"class":272},"            \u002F\u002F 不能用clearTimeout(timer)\n",[203,91724,91725],{"class":205,"line":9854},[203,91726,91727],{"class":272},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[203,91729,91730],{"class":205,"line":9878},[203,91731,91732],{"class":213},"          }, t)\n",[203,91734,91735],{"class":205,"line":9883},[203,91736,2618],{"class":213},[203,91738,91739],{"class":205,"line":9888},[203,91740,52456],{"class":213},[203,91742,91743],{"class":205,"line":9893},[203,91744,2276],{"class":213},[203,91746,91747,91749,91751,91753,91755,91757,91759,91761,91763],{"class":205,"line":9902},[203,91748,90265],{"class":213},[203,91750,57871],{"class":2052},[203,91752,214],{"class":213},[203,91754,90272],{"class":318},[203,91756,12525],{"class":213},[203,91758,91231],{"class":2052},[203,91760,90281],{"class":213},[203,91762,65132],{"class":262},[203,91764,30555],{"class":213},[203,91766,91767,91769,91771],{"class":205,"line":9907},[203,91768,52475],{"class":213},[203,91770,51871],{"class":51358},[203,91772,51365],{"class":213},[203,91774,91775,91777,91779],{"class":205,"line":9913},[203,91776,51843],{"class":213},[203,91778,51858],{"class":51358},[203,91780,51365],{"class":213},[203,91782,91783],{"class":205,"line":9934},[203,91784,2489],{"emptyLinePlaceholder":131},[203,91786,91787,91789,91791],{"class":205,"line":9940},[203,91788,51843],{"class":213},[203,91790,50693],{"class":51358},[203,91792,51365],{"class":213},[174,91794,91796],{"id":91795},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[194,91798,91800],{"className":53125,"code":91799,"language":53127,"meta":27,"style":27},"\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",[200,91801,91802,91810,91818,91823,91828,91833,91838,91842,91850],{"__ignoreMap":27},[203,91803,91804,91806,91808],{"class":205,"line":206},[203,91805,1124],{"class":213},[203,91807,51858],{"class":51358},[203,91809,51365],{"class":213},[203,91811,91812,91814,91816],{"class":205,"line":124},[203,91813,52202],{"class":213},[203,91815,51871],{"class":51358},[203,91817,51365],{"class":213},[203,91819,91820],{"class":205,"line":1269},[203,91821,91822],{"class":213},"    let timer = null\n",[203,91824,91825],{"class":205,"line":1284},[203,91826,91827],{"class":213},"    timer = setTimeout(() => {\n",[203,91829,91830],{"class":205,"line":1290},[203,91831,91832],{"class":213},"      clearTimeout(timer)\n",[203,91834,91835],{"class":205,"line":1304},[203,91836,91837],{"class":213},"      console.log(timer)\n",[203,91839,91840],{"class":205,"line":1310},[203,91841,60283],{"class":213},[203,91843,91844,91846,91848],{"class":205,"line":1401},[203,91845,52475],{"class":213},[203,91847,51871],{"class":51358},[203,91849,51365],{"class":213},[203,91851,91852,91854,91856],{"class":205,"line":1407},[203,91853,51843],{"class":213},[203,91855,51858],{"class":51358},[203,91857,51365],{"class":213},[19,91859,91860],{},"输出为1",[19,91862,91863],{},"在开启的定时器里边写清除定时器",[19,91865,91866],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[174,91868,91870],{"id":91869},"_4174-节流综合案例","4.17.4 节流综合案例",[19,91872,91873],{},"页面打开，可以记录上一次的视频播放位置",[19,91875,91876],{},[25,91877],{"alt":27,"src":91878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,91880,91881],{},[25,91882],{"alt":27,"src":91883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[194,91885,91887],{"className":50691,"code":91886,"language":50693,"meta":27,"style":27},"\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",[200,91888,91889,91899,91913,91917,91925,91939,91959,91979,92001,92014,92022,92028,92038,92048,92058,92062,92066,92073,92086,92098,92102,92106,92116,92128,92142,92146,92150,92157,92167,92180,92192,92202,92212,92228,92240,92244,92248,92256,92266,92278,92288,92298,92308,92312,92316,92326,92337,92341,92349,92357,92361,92369,92384,92399,92414,92435,92443,92451,92466,92488,92496,92511,92537,92563,92589,92597,92605,92624,92632,92637,92656,92661,92679,92684,92689,92697,92702,92716,92724,92729,92746,92750,92755,92777,92781,92789,92797,92801],{"__ignoreMap":27},[203,91890,91891,91893,91895,91897],{"class":205,"line":206},[203,91892,51355],{"class":213},[203,91894,51359],{"class":51358},[203,91896,51362],{"class":2052},[203,91898,51365],{"class":213},[203,91900,91901,91903,91905,91907,91909,91911],{"class":205,"line":124},[203,91902,1124],{"class":213},[203,91904,50693],{"class":51358},[203,91906,51374],{"class":2052},[203,91908,259],{"class":213},[203,91910,51379],{"class":318},[203,91912,51365],{"class":213},[203,91914,91915],{"class":205,"line":1269},[203,91916,2489],{"emptyLinePlaceholder":131},[203,91918,91919,91921,91923],{"class":205,"line":1284},[203,91920,1124],{"class":213},[203,91922,51392],{"class":51358},[203,91924,51365],{"class":213},[203,91926,91927,91929,91931,91933,91935,91937],{"class":205,"line":1290},[203,91928,52202],{"class":213},[203,91930,51402],{"class":51358},[203,91932,51405],{"class":2052},[203,91934,259],{"class":213},[203,91936,51410],{"class":318},[203,91938,59185],{"class":213},[203,91940,91941,91943,91945,91947,91949,91951,91953,91955,91957],{"class":205,"line":1304},[203,91942,52202],{"class":213},[203,91944,51402],{"class":51358},[203,91946,51421],{"class":2052},[203,91948,259],{"class":213},[203,91950,51426],{"class":318},[203,91952,51429],{"class":2052},[203,91954,259],{"class":213},[203,91956,51434],{"class":318},[203,91958,59185],{"class":213},[203,91960,91961,91963,91965,91967,91969,91971,91973,91975,91977],{"class":205,"line":1310},[203,91962,52202],{"class":213},[203,91964,51402],{"class":51358},[203,91966,15010],{"class":2052},[203,91968,259],{"class":213},[203,91970,51449],{"class":318},[203,91972,51429],{"class":2052},[203,91974,259],{"class":213},[203,91976,51456],{"class":318},[203,91978,59185],{"class":213},[203,91980,91981,91983,91985,91987,91989,91992,91994,91996,91999],{"class":205,"line":1401},[203,91982,52202],{"class":213},[203,91984,51402],{"class":51358},[203,91986,15010],{"class":2052},[203,91988,259],{"class":213},[203,91990,91991],{"class":318},"\"referrer\"",[203,91993,51429],{"class":2052},[203,91995,259],{"class":213},[203,91997,91998],{"class":318},"\"never\"",[203,92000,59185],{"class":213},[203,92002,92003,92005,92007,92010,92012],{"class":205,"line":1407},[203,92004,52202],{"class":213},[203,92006,51465],{"class":51358},[203,92008,92009],{"class":213},">综合案例\u003C\u002F",[203,92011,51465],{"class":51358},[203,92013,51365],{"class":213},[203,92015,92016,92018,92020],{"class":205,"line":1419},[203,92017,52202],{"class":213},[203,92019,5216],{"class":51358},[203,92021,51365],{"class":213},[203,92023,92024,92026],{"class":205,"line":1701},[203,92025,6493],{"class":51358},[203,92027,15662],{"class":213},[203,92029,92030,92032,92034,92036],{"class":205,"line":1706},[203,92031,54753],{"class":262},[203,92033,51495],{"class":213},[203,92035,405],{"class":262},[203,92037,1380],{"class":213},[203,92039,92040,92042,92044,92046],{"class":205,"line":1712},[203,92041,54764],{"class":262},[203,92043,51495],{"class":213},[203,92045,405],{"class":262},[203,92047,1380],{"class":213},[203,92049,92050,92052,92054,92056],{"class":205,"line":1717},[203,92051,72654],{"class":262},[203,92053,51495],{"class":213},[203,92055,60563],{"class":262},[203,92057,1380],{"class":213},[203,92059,92060],{"class":205,"line":1731},[203,92061,2276],{"class":213},[203,92063,92064],{"class":205,"line":1736},[203,92065,2489],{"emptyLinePlaceholder":131},[203,92067,92068,92071],{"class":205,"line":1742},[203,92069,92070],{"class":2052},"    .container",[203,92072,15662],{"class":213},[203,92074,92075,92077,92079,92082,92084],{"class":205,"line":1763},[203,92076,54829],{"class":262},[203,92078,51495],{"class":213},[203,92080,92081],{"class":262},"1200",[203,92083,51550],{"class":209},[203,92085,1380],{"class":213},[203,92087,92088,92090,92092,92094,92096],{"class":205,"line":1768},[203,92089,54764],{"class":262},[203,92091,51495],{"class":213},[203,92093,405],{"class":262},[203,92095,51614],{"class":262},[203,92097,1380],{"class":213},[203,92099,92100],{"class":205,"line":1782},[203,92101,2276],{"class":213},[203,92103,92104],{"class":205,"line":1787},[203,92105,2489],{"emptyLinePlaceholder":131},[203,92107,92108,92111,92114],{"class":205,"line":1816},[203,92109,92110],{"class":2052},"    .video",[203,92112,92113],{"class":51358}," video",[203,92115,15662],{"class":213},[203,92117,92118,92120,92122,92124,92126],{"class":205,"line":1821},[203,92119,54829],{"class":262},[203,92121,51495],{"class":213},[203,92123,525],{"class":262},[203,92125,542],{"class":209},[203,92127,1380],{"class":213},[203,92129,92130,92132,92134,92136,92138,92140],{"class":205,"line":1838},[203,92131,54753],{"class":262},[203,92133,51495],{"class":213},[203,92135,914],{"class":262},[203,92137,51550],{"class":209},[203,92139,4182],{"class":262},[203,92141,1380],{"class":213},[203,92143,92144],{"class":205,"line":1843},[203,92145,2276],{"class":213},[203,92147,92148],{"class":205,"line":1848},[203,92149,2489],{"emptyLinePlaceholder":131},[203,92151,92152,92155],{"class":205,"line":1853},[203,92153,92154],{"class":2052},"    .elevator",[203,92156,15662],{"class":213},[203,92158,92159,92161,92163,92165],{"class":205,"line":1867},[203,92160,54817],{"class":262},[203,92162,51495],{"class":213},[203,92164,86291],{"class":262},[203,92166,1380],{"class":213},[203,92168,92169,92171,92173,92176,92178],{"class":205,"line":1872},[203,92170,55005],{"class":262},[203,92172,51495],{"class":213},[203,92174,92175],{"class":262},"280",[203,92177,51550],{"class":209},[203,92179,1380],{"class":213},[203,92181,92182,92184,92186,92188,92190],{"class":205,"line":2666},[203,92183,86485],{"class":262},[203,92185,51495],{"class":213},[203,92187,914],{"class":262},[203,92189,51550],{"class":209},[203,92191,1380],{"class":213},[203,92193,92194,92196,92198,92200],{"class":205,"line":2680},[203,92195,86298],{"class":262},[203,92197,51495],{"class":213},[203,92199,86303],{"class":262},[203,92201,1380],{"class":213},[203,92203,92204,92206,92208,92210],{"class":205,"line":2688},[203,92205,61779],{"class":262},[203,92207,51495],{"class":213},[203,92209,60900],{"class":262},[203,92211,1380],{"class":213},[203,92213,92214,92216,92218,92220,92222,92224,92226],{"class":205,"line":2693},[203,92215,62035],{"class":262},[203,92217,51495],{"class":213},[203,92219,431],{"class":262},[203,92221,51550],{"class":209},[203,92223,51579],{"class":262},[203,92225,62302],{"class":262},[203,92227,1380],{"class":213},[203,92229,92230,92232,92234,92236,92238],{"class":205,"line":2699},[203,92231,54829],{"class":262},[203,92233,51495],{"class":213},[203,92235,1121],{"class":262},[203,92237,51550],{"class":209},[203,92239,1380],{"class":213},[203,92241,92242],{"class":205,"line":2705},[203,92243,2276],{"class":213},[203,92245,92246],{"class":205,"line":2710},[203,92247,2489],{"emptyLinePlaceholder":131},[203,92249,92250,92252,92254],{"class":205,"line":8038},[203,92251,92154],{"class":2052},[203,92253,1488],{"class":51358},[203,92255,15662],{"class":213},[203,92257,92258,92260,92262,92264],{"class":205,"line":8062},[203,92259,55067],{"class":262},[203,92261,51495],{"class":213},[203,92263,60927],{"class":262},[203,92265,1380],{"class":213},[203,92267,92268,92270,92272,92274,92276],{"class":205,"line":8067},[203,92269,54753],{"class":262},[203,92271,51495],{"class":213},[203,92273,660],{"class":262},[203,92275,51550],{"class":209},[203,92277,1380],{"class":213},[203,92279,92280,92282,92284,92286],{"class":205,"line":8073},[203,92281,64028],{"class":262},[203,92283,51495],{"class":213},[203,92285,54795],{"class":262},[203,92287,1380],{"class":213},[203,92289,92290,92292,92294,92296],{"class":205,"line":8100},[203,92291,57344],{"class":262},[203,92293,51495],{"class":213},[203,92295,51650],{"class":262},[203,92297,1380],{"class":213},[203,92299,92300,92302,92304,92306],{"class":205,"line":8105},[203,92301,57474],{"class":262},[203,92303,51495],{"class":213},[203,92305,62128],{"class":262},[203,92307,1380],{"class":213},[203,92309,92310],{"class":205,"line":8111},[203,92311,2276],{"class":213},[203,92313,92314],{"class":205,"line":8123},[203,92315,2489],{"emptyLinePlaceholder":131},[203,92317,92318,92320,92322,92324],{"class":205,"line":8135},[203,92319,92154],{"class":2052},[203,92321,1488],{"class":51358},[203,92323,64082],{"class":2052},[203,92325,15662],{"class":213},[203,92327,92328,92330,92332,92335],{"class":205,"line":8147},[203,92329,57474],{"class":262},[203,92331,51495],{"class":213},[203,92333,92334],{"class":262},"#1286ff",[203,92336,1380],{"class":213},[203,92338,92339],{"class":205,"line":9806},[203,92340,2276],{"class":213},[203,92342,92343,92345,92347],{"class":205,"line":9831},[203,92344,52475],{"class":213},[203,92346,5216],{"class":51358},[203,92348,51365],{"class":213},[203,92350,92351,92353,92355],{"class":205,"line":9854},[203,92352,51843],{"class":213},[203,92354,51392],{"class":51358},[203,92356,51365],{"class":213},[203,92358,92359],{"class":205,"line":9878},[203,92360,2489],{"emptyLinePlaceholder":131},[203,92362,92363,92365,92367],{"class":205,"line":9883},[203,92364,1124],{"class":213},[203,92366,51858],{"class":51358},[203,92368,51365],{"class":213},[203,92370,92371,92373,92375,92377,92379,92382],{"class":205,"line":9888},[203,92372,52202],{"class":213},[203,92374,51669],{"class":51358},[203,92376,53544],{"class":2052},[203,92378,259],{"class":213},[203,92380,92381],{"class":318},"\"container\"",[203,92383,51365],{"class":213},[203,92385,92386,92388,92390,92392,92394,92397],{"class":205,"line":9893},[203,92387,51399],{"class":213},[203,92389,51669],{"class":51358},[203,92391,53544],{"class":2052},[203,92393,259],{"class":213},[203,92395,92396],{"class":318},"\"header\"",[203,92398,51365],{"class":213},[203,92400,92401,92403,92405,92407,92409,92412],{"class":205,"line":9902},[203,92402,55292],{"class":213},[203,92404,452],{"class":51358},[203,92406,61115],{"class":2052},[203,92408,259],{"class":213},[203,92410,92411],{"class":318},"\"http:\u002F\u002Fpip.itcast.cn\"",[203,92413,51365],{"class":213},[203,92415,92416,92418,92420,92422,92424,92427,92429,92431,92433],{"class":205,"line":9907},[203,92417,55360],{"class":213},[203,92419,25],{"class":51358},[203,92421,55297],{"class":2052},[203,92423,259],{"class":213},[203,92425,92426],{"class":318},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[203,92428,55305],{"class":2052},[203,92430,259],{"class":213},[203,92432,7742],{"class":318},[203,92434,59185],{"class":213},[203,92436,92437,92439,92441],{"class":205,"line":9913},[203,92438,55465],{"class":213},[203,92440,452],{"class":51358},[203,92442,51365],{"class":213},[203,92444,92445,92447,92449],{"class":205,"line":9934},[203,92446,51834],{"class":213},[203,92448,51669],{"class":51358},[203,92450,51365],{"class":213},[203,92452,92453,92455,92457,92459,92461,92464],{"class":205,"line":9940},[203,92454,51399],{"class":213},[203,92456,51669],{"class":51358},[203,92458,53544],{"class":2052},[203,92460,259],{"class":213},[203,92462,92463],{"class":318},"\"video\"",[203,92465,51365],{"class":213},[203,92467,92468,92470,92472,92474,92476,92479,92482,92484,92486],{"class":205,"line":9954},[203,92469,55292],{"class":213},[203,92471,28241],{"class":51358},[203,92473,55297],{"class":2052},[203,92475,259],{"class":213},[203,92477,92478],{"class":318},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[203,92480,92481],{"class":2052}," controls",[203,92483,55372],{"class":213},[203,92485,28241],{"class":51358},[203,92487,51365],{"class":213},[203,92489,92490,92492,92494],{"class":205,"line":9960},[203,92491,51834],{"class":213},[203,92493,51669],{"class":51358},[203,92495,51365],{"class":213},[203,92497,92498,92500,92502,92504,92506,92509],{"class":205,"line":9987},[203,92499,51399],{"class":213},[203,92501,51669],{"class":51358},[203,92503,53544],{"class":2052},[203,92505,259],{"class":213},[203,92507,92508],{"class":318},"\"elevator\"",[203,92510,51365],{"class":213},[203,92512,92513,92515,92517,92519,92521,92523,92526,92528,92530,92533,92535],{"class":205,"line":9996},[203,92514,55292],{"class":213},[203,92516,452],{"class":51358},[203,92518,61115],{"class":2052},[203,92520,259],{"class":213},[203,92522,64294],{"class":318},[203,92524,92525],{"class":2052}," data-ref",[203,92527,259],{"class":213},[203,92529,92463],{"class":318},[203,92531,92532],{"class":213},">视频介绍\u003C\u002F",[203,92534,452],{"class":51358},[203,92536,51365],{"class":213},[203,92538,92539,92541,92543,92545,92547,92549,92551,92553,92556,92559,92561],{"class":205,"line":10002},[203,92540,55292],{"class":213},[203,92542,452],{"class":51358},[203,92544,61115],{"class":2052},[203,92546,259],{"class":213},[203,92548,64294],{"class":318},[203,92550,92525],{"class":2052},[203,92552,259],{"class":213},[203,92554,92555],{"class":318},"\"intro\"",[203,92557,92558],{"class":213},">课程简介\u003C\u002F",[203,92560,452],{"class":51358},[203,92562,51365],{"class":213},[203,92564,92565,92567,92569,92571,92573,92575,92577,92579,92582,92585,92587],{"class":205,"line":10010},[203,92566,55292],{"class":213},[203,92568,452],{"class":51358},[203,92570,61115],{"class":2052},[203,92572,259],{"class":213},[203,92574,64294],{"class":318},[203,92576,92525],{"class":2052},[203,92578,259],{"class":213},[203,92580,92581],{"class":318},"\"outline\"",[203,92583,92584],{"class":213},">评论列表\u003C\u002F",[203,92586,452],{"class":51358},[203,92588,51365],{"class":213},[203,92590,92591,92593,92595],{"class":205,"line":10015},[203,92592,51834],{"class":213},[203,92594,51669],{"class":51358},[203,92596,51365],{"class":213},[203,92598,92599,92601,92603],{"class":205,"line":16694},[203,92600,52475],{"class":213},[203,92602,51669],{"class":51358},[203,92604,51365],{"class":213},[203,92606,92607,92609,92611,92613,92615,92618,92620,92622],{"class":205,"line":16700},[203,92608,52202],{"class":213},[203,92610,51871],{"class":51358},[203,92612,55297],{"class":2052},[203,92614,259],{"class":213},[203,92616,92617],{"class":318},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[203,92619,55372],{"class":213},[203,92621,51871],{"class":51358},[203,92623,51365],{"class":213},[203,92625,92626,92628,92630],{"class":205,"line":16723},[203,92627,52202],{"class":213},[203,92629,51871],{"class":51358},[203,92631,51365],{"class":213},[203,92633,92634],{"class":205,"line":16729},[203,92635,92636],{"class":272},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[203,92638,92639,92641,92643,92645,92647,92649,92651,92654],{"class":205,"line":16752},[203,92640,11311],{"class":209},[203,92642,92113],{"class":262},[203,92644,13654],{"class":209},[203,92646,54454],{"class":213},[203,92648,54457],{"class":2052},[203,92650,214],{"class":213},[203,92652,92653],{"class":318},"'video'",[203,92655,220],{"class":213},[203,92657,92658],{"class":205,"line":16766},[203,92659,92660],{"class":272},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[203,92662,92663,92666,92668,92670,92672,92675,92677],{"class":205,"line":16786},[203,92664,92665],{"class":213},"    video.ontimeupdate ",[203,92667,259],{"class":209},[203,92669,88413],{"class":213},[203,92671,91231],{"class":2052},[203,92673,92674],{"class":213},"(() ",[203,92676,84780],{"class":209},[203,92678,15662],{"class":213},[203,92680,92681],{"class":205,"line":16792},[203,92682,92683],{"class":272},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[203,92685,92686],{"class":205,"line":16803},[203,92687,92688],{"class":272},"      \u002F\u002F 控制台输出当前的时间\n",[203,92690,92691,92694],{"class":205,"line":16826},[203,92692,92693],{"class":272},"      \u002F\u002F console.log(video.currentTime)",[203,92695,92696],{"class":272},"  \u002F\u002F获得当前的视频时间\n",[203,92698,92699],{"class":205,"line":16848},[203,92700,92701],{"class":272},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[203,92703,92704,92706,92708,92710,92713],{"class":205,"line":16853},[203,92705,74741],{"class":213},[203,92707,71712],{"class":2052},[203,92709,214],{"class":213},[203,92711,92712],{"class":318},"'currentTime'",[203,92714,92715],{"class":213},", video.currentTime)\n",[203,92717,92718,92720,92722],{"class":205,"line":16859},[203,92719,54593],{"class":213},[203,92721,6500],{"class":262},[203,92723,220],{"class":213},[203,92725,92726],{"class":205,"line":16873},[203,92727,92728],{"class":272},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[203,92730,92731,92734,92737,92739,92742,92744],{"class":205,"line":16886},[203,92732,92733],{"class":213},"    video.",[203,92735,92736],{"class":2052},"onloadeddata",[203,92738,13654],{"class":209},[203,92740,92741],{"class":213}," () ",[203,92743,84780],{"class":209},[203,92745,15662],{"class":213},[203,92747,92748],{"class":205,"line":16891},[203,92749,60070],{"class":272},[203,92751,92752],{"class":205,"line":16905},[203,92753,92754],{"class":272},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[203,92756,92757,92760,92762,92765,92767,92769,92771,92773,92775],{"class":205,"line":16910},[203,92758,92759],{"class":213},"      video.currentTime ",[203,92761,259],{"class":209},[203,92763,92764],{"class":213}," localStorage.",[203,92766,71743],{"class":2052},[203,92768,214],{"class":213},[203,92770,92712],{"class":318},[203,92772,13804],{"class":213},[203,92774,71415],{"class":209},[203,92776,47391],{"class":262},[203,92778,92779],{"class":205,"line":16916},[203,92780,2276],{"class":213},[203,92782,92783,92785,92787],{"class":205,"line":16921},[203,92784,52475],{"class":213},[203,92786,51871],{"class":51358},[203,92788,51365],{"class":213},[203,92790,92791,92793,92795],{"class":205,"line":16935},[203,92792,51843],{"class":213},[203,92794,51858],{"class":51358},[203,92796,51365],{"class":213},[203,92798,92799],{"class":205,"line":16940},[203,92800,2489],{"emptyLinePlaceholder":131},[203,92802,92803,92805,92807],{"class":205,"line":16945},[203,92804,51843],{"class":213},[203,92806,50693],{"class":51358},[203,92808,51365],{"class":213},[5216,92810,92811],{},"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":27,"searchDepth":124,"depth":124,"links":92813},[92814,92819,92823,92824,92825,92830,92835,92836,92837,92838,92845,92850,92851,92861,92865,92866,92870],{"id":76749,"depth":124,"text":76750,"children":92815},[92816,92817,92818],{"id":76753,"depth":1269,"text":76754},{"id":76778,"depth":1269,"text":76779},{"id":76790,"depth":1269,"text":76791},{"id":76802,"depth":124,"text":76803,"children":92820},[92821,92822],{"id":76806,"depth":1269,"text":76807},{"id":76821,"depth":1269,"text":76822},{"id":76873,"depth":124,"text":76874},{"id":76917,"depth":124,"text":76918},{"id":76934,"depth":124,"text":76935,"children":92826},[92827,92828,92829],{"id":76938,"depth":1269,"text":76939},{"id":76951,"depth":1269,"text":76952},{"id":77056,"depth":1269,"text":77057},{"id":77345,"depth":124,"text":77346,"children":92831},[92832,92833,92834],{"id":77349,"depth":1269,"text":77350},{"id":77792,"depth":1269,"text":77793},{"id":78203,"depth":1269,"text":78204},{"id":78266,"depth":124,"text":78267},{"id":78345,"depth":124,"text":78346},{"id":78438,"depth":124,"text":78439},{"id":80283,"depth":124,"text":80284,"children":92839},[92840,92841,92842,92843,92844],{"id":80287,"depth":1269,"text":80288},{"id":80299,"depth":1269,"text":80300},{"id":80518,"depth":1269,"text":80519},{"id":80536,"depth":1269,"text":80537},{"id":80596,"depth":1269,"text":80597},{"id":84864,"depth":124,"text":84865,"children":92846},[92847,92848,92849],{"id":84868,"depth":1269,"text":84869},{"id":84886,"depth":1269,"text":84887},{"id":84912,"depth":1269,"text":84913},{"id":84921,"depth":124,"text":84922},{"id":84943,"depth":124,"text":84944,"children":92852},[92853,92854,92855,92856,92857,92858,92859,92860],{"id":84947,"depth":1269,"text":84948},{"id":85208,"depth":1269,"text":85209},{"id":85394,"depth":1269,"text":85395},{"id":85761,"depth":1269,"text":85762},{"id":85877,"depth":1269,"text":85878},{"id":85913,"depth":1269,"text":85914},{"id":85960,"depth":1269,"text":85961},{"id":85994,"depth":1269,"text":85995},{"id":87357,"depth":124,"text":87358,"children":92862},[92863,92864],{"id":87361,"depth":1269,"text":87362},{"id":87398,"depth":1269,"text":87399},{"id":88753,"depth":124,"text":88754},{"id":89124,"depth":124,"text":89125,"children":92867},[92868,92869],{"id":89128,"depth":1269,"text":89129},{"id":89162,"depth":1269,"text":89163},{"id":89891,"depth":124,"text":89892,"children":92871},[92872,92873,92874,92875],{"id":89895,"depth":1269,"text":89896},{"id":90853,"depth":1269,"text":90854},{"id":91795,"depth":1269,"text":91796},{"id":91869,"depth":1269,"text":91870},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76738,"description":23467},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92882,"title":92883,"body":92884,"description":92895,"extension":129,"meta":92896,"navigation":131,"path":92898,"seo":92899,"stem":92900,"__hash__":92901},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92885,"toc":92893},[92886],[19,92887,92888,92889],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[452,92890,92891],{"href":92891,"rel":92892},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23956],{"title":27,"searchDepth":124,"depth":124,"links":92894},[],"三件套第三套学习",{"category":92897},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92883,"description":92895},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92903,"title":92904,"body":92905,"description":23467,"extension":129,"meta":93010,"navigation":131,"path":93011,"seo":93012,"stem":93013,"__hash__":93014},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92906,"toc":93005},[92907,92914,92917,92920,92923,92927,92936,92939,92942,92946,92955,92958,92962,92965,92985,92988,93002],[19,92908,92909],{},[452,92910,92913],{"href":92911,"rel":92912},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23956],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92915,92904],{"id":92916},"_1安装",[19,92918,92919],{},"numpy是科学计算基础库,底层是C语言",[19,92921,92922],{},"三种方式：",[14,92924,92926],{"id":92925},"_11-通过pip安装","1.1 通过pip安装",[194,92928,92930],{"className":30436,"code":92929,"language":30438,"meta":27,"style":27},"pip install numpy\n",[200,92931,92932],{"__ignoreMap":27},[203,92933,92934],{"class":205,"line":206},[203,92935,92929],{"class":213},[19,92937,92938],{},"首选方式，自动处理依赖项",[19,92940,92941],{},"在提示系统命令符中使用cmd",[14,92943,92945],{"id":92944},"_12-通过anaconda安装","1.2 通过Anaconda安装",[194,92947,92949],{"className":30436,"code":92948,"language":30438,"meta":27,"style":27},"conda install numpy\n",[200,92950,92951],{"__ignoreMap":27},[203,92952,92953],{"class":205,"line":206},[203,92954,92948],{"class":213},[19,92956,92957],{},"自动解决环境依赖",[14,92959,92961],{"id":92960},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,92963,92964],{},"对于Debian\u002FUbuntu",[194,92966,92968],{"className":30436,"code":92967,"language":30438,"meta":27,"style":27},"sudo apt-get install python3-numpy\n",[200,92969,92970],{"__ignoreMap":27},[203,92971,92972,92975,92977,92980,92982],{"class":205,"line":206},[203,92973,92974],{"class":213},"sudo apt",[203,92976,746],{"class":209},[203,92978,92979],{"class":213},"get install python3",[203,92981,746],{"class":209},[203,92983,92984],{"class":213},"numpy\n",[19,92986,92987],{},"对于Fedora:",[194,92989,92991],{"className":30436,"code":92990,"language":30438,"meta":27,"style":27},"sudo dnf install python3-numpy\n",[200,92992,92993],{"__ignoreMap":27},[203,92994,92995,92998,93000],{"class":205,"line":206},[203,92996,92997],{"class":213},"sudo dnf install python3",[203,92999,746],{"class":209},[203,93001,92984],{"class":213},[5216,93003,93004],{},"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":27,"searchDepth":124,"depth":124,"links":93006},[93007,93008,93009],{"id":92925,"depth":124,"text":92926},{"id":92944,"depth":124,"text":92945},{"id":92960,"depth":124,"text":92961},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92904,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93016,"title":93017,"body":93018,"description":23467,"extension":129,"meta":93131,"navigation":131,"path":93132,"seo":93133,"stem":93134,"__hash__":93135},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93019,"toc":93129},[93020,93023,93026,93029,93032,93035,93038,93041,93044,93047,93123,93126],[10,93021,93017],{"id":93022},"_10算数函数",[19,93024,93025],{},"加减乘除运算跟python基础语法没区别",[19,93027,93028],{},"除了python那种方法外还可以使用函数",[19,93030,93031],{},"加：np.add(a,b)",[19,93033,93034],{},"减：np.subtract(a,b)",[19,93036,93037],{},"乘：np.multiply(a,b)",[19,93039,93040],{},"除：np.divide(a,b) == a\u002Fb",[19,93042,93043],{},"取余：np.mod(a,b) == a%b",[19,93045,93046],{},"必须会的用法：",[194,93048,93050],{"className":30436,"code":93049,"language":30438,"meta":27,"style":27},"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",[200,93051,93052,93074,93095,93105,93118],{"__ignoreMap":27},[203,93053,93054,93056,93058,93061,93063,93066,93068,93070,93072],{"class":205,"line":206},[203,93055,452],{"class":213},[203,93057,259],{"class":209},[203,93059,93060],{"class":213},"np.arange(",[203,93062,634],{"class":262},[203,93064,93065],{"class":213},").reshape(",[203,93067,285],{"class":262},[203,93069,592],{"class":213},[203,93071,285],{"class":262},[203,93073,220],{"class":213},[203,93075,93076,93078,93080,93083,93085,93087,93089,93091,93093],{"class":205,"line":124},[203,93077,477],{"class":213},[203,93079,259],{"class":209},[203,93081,93082],{"class":213},"np.array([",[203,93084,660],{"class":262},[203,93086,592],{"class":213},[203,93088,660],{"class":262},[203,93090,592],{"class":213},[203,93092,660],{"class":262},[203,93094,4746],{"class":213},[203,93096,93097,93100,93102],{"class":205,"line":1269},[203,93098,93099],{"class":213},"result",[203,93101,259],{"class":209},[203,93103,93104],{"class":213},"np.empty_like(a)\n",[203,93106,93107,93110,93113,93115],{"class":205,"line":1284},[203,93108,93109],{"class":213},"np.add(a,b,",[203,93111,93112],{"class":5306},"out",[203,93114,259],{"class":209},[203,93116,93117],{"class":213},"result)\n",[203,93119,93120],{"class":205,"line":1290},[203,93121,93122],{"class":213},"result\n",[19,93124,93125],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5216,93127,93128],{},"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":27,"searchDepth":124,"depth":124,"links":93130},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93017,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93137,"title":93138,"body":93139,"description":23467,"extension":129,"meta":93901,"navigation":131,"path":93902,"seo":93903,"stem":93904,"__hash__":93905},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93140,"toc":93888},[93141,93144,93147,93150,93154,93193,93197,93241,93301,93305,93308,93347,93350,93395,93399,93435,93439,93508,93512,93576,93580,93583,93586,93589,93592,93628,93632,93672,93676,93748,93751,93755,93818,93822,93885],[10,93142,93138],{"id":93143},"_11统计函数",[19,93145,93146],{},"sum max min mean",[19,93148,93149],{},"这些有axis参数，可以指定方向",[14,93151,93153],{"id":93152},"_111-sum求和函数","11.1 sum()求和函数",[194,93155,93157],{"className":30436,"code":93156,"language":30438,"meta":27,"style":27},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[200,93158,93159,93164,93185],{"__ignoreMap":27},[203,93160,93161],{"class":205,"line":206},[203,93162,93163],{"class":272},"#创建一维数组\n",[203,93165,93166,93168,93170,93173,93175,93177,93179,93181,93183],{"class":205,"line":124},[203,93167,452],{"class":213},[203,93169,259],{"class":209},[203,93171,93172],{"class":213},"np.random.randint(",[203,93174,431],{"class":262},[203,93176,592],{"class":213},[203,93178,525],{"class":262},[203,93180,592],{"class":213},[203,93182,914],{"class":262},[203,93184,220],{"class":213},[203,93186,93187,93190],{"class":205,"line":1269},[203,93188,93189],{"class":213},"np.sum(a)",[203,93191,93192],{"class":272},"#求和\n",[14,93194,93196],{"id":93195},"_112-max求最大值函数","11.2 max()求最大值函数",[194,93198,93200],{"className":30436,"code":93199,"language":30438,"meta":27,"style":27},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[200,93201,93202,93206,93226,93231,93236],{"__ignoreMap":27},[203,93203,93204],{"class":205,"line":206},[203,93205,93163],{"class":272},[203,93207,93208,93210,93212,93214,93216,93218,93220,93222,93224],{"class":205,"line":124},[203,93209,452],{"class":213},[203,93211,259],{"class":209},[203,93213,93172],{"class":213},[203,93215,431],{"class":262},[203,93217,592],{"class":213},[203,93219,525],{"class":262},[203,93221,592],{"class":213},[203,93223,914],{"class":262},[203,93225,220],{"class":213},[203,93227,93228],{"class":205,"line":1269},[203,93229,93230],{"class":213},"np.max(a)\n",[203,93232,93233],{"class":205,"line":1284},[203,93234,93235],{"class":272},"#最大索引(求最大元素的索引)arg\n",[203,93237,93238],{"class":205,"line":1290},[203,93239,93240],{"class":213},"np.argmax(a)\n",[194,93242,93244],{"className":30436,"code":93243,"language":30438,"meta":27,"style":27},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[200,93245,93246,93267,93287,93291],{"__ignoreMap":27},[203,93247,93248,93250,93252,93255,93257,93259,93261,93263,93265],{"class":205,"line":206},[203,93249,11009],{"class":213},[203,93251,259],{"class":209},[203,93253,93254],{"class":213}," np.array([",[203,93256,431],{"class":262},[203,93258,12525],{"class":213},[203,93260,533],{"class":262},[203,93262,12525],{"class":213},[203,93264,285],{"class":262},[203,93266,4746],{"class":213},[203,93268,93269,93271,93273,93275,93277,93279,93281,93283,93285],{"class":205,"line":124},[203,93270,11035],{"class":213},[203,93272,259],{"class":209},[203,93274,93254],{"class":213},[203,93276,285],{"class":262},[203,93278,12525],{"class":213},[203,93280,291],{"class":262},[203,93282,12525],{"class":213},[203,93284,507],{"class":262},[203,93286,4746],{"class":213},[203,93288,93289],{"class":205,"line":1269},[203,93290,2489],{"emptyLinePlaceholder":131},[203,93292,93293,93295,93298],{"class":205,"line":1284},[203,93294,30473],{"class":262},[203,93296,93297],{"class":213},"(np.maximum(a, b))   ",[203,93299,93300],{"class":272},"# [3 5 4]，每个位置上取较大值\n",[14,93302,93304],{"id":93303},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93306,93307],{},"①一维数组：",[194,93309,93311],{"className":30436,"code":93310,"language":30438,"meta":27,"style":27},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[200,93312,93313,93317,93337,93342],{"__ignoreMap":27},[203,93314,93315],{"class":205,"line":206},[203,93316,93163],{"class":272},[203,93318,93319,93321,93323,93325,93327,93329,93331,93333,93335],{"class":205,"line":124},[203,93320,452],{"class":213},[203,93322,259],{"class":209},[203,93324,93172],{"class":213},[203,93326,431],{"class":262},[203,93328,592],{"class":213},[203,93330,525],{"class":262},[203,93332,592],{"class":213},[203,93334,914],{"class":262},[203,93336,220],{"class":213},[203,93338,93339],{"class":205,"line":1269},[203,93340,93341],{"class":272},"#求平均值\n",[203,93343,93344],{"class":205,"line":1284},[203,93345,93346],{"class":213},"np.mean(a)\n",[19,93348,93349],{},"②二维数组",[194,93351,93353],{"className":30436,"code":93352,"language":30438,"meta":27,"style":27},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[200,93354,93355,93360,93385,93390],{"__ignoreMap":27},[203,93356,93357],{"class":205,"line":206},[203,93358,93359],{"class":272},"#二维数组\n",[203,93361,93362,93365,93367,93369,93371,93373,93375,93377,93379,93381,93383],{"class":205,"line":124},[203,93363,93364],{"class":213},"aa",[203,93366,259],{"class":209},[203,93368,93060],{"class":213},[203,93370,431],{"class":262},[203,93372,592],{"class":213},[203,93374,737],{"class":262},[203,93376,93065],{"class":213},[203,93378,285],{"class":262},[203,93380,592],{"class":213},[203,93382,507],{"class":262},[203,93384,220],{"class":213},[203,93386,93387],{"class":205,"line":1269},[203,93388,93389],{"class":272},"#对数组中的所有数求平均\n",[203,93391,93392],{"class":205,"line":1284},[203,93393,93394],{"class":213},"np.mean(aa)\n",[14,93396,93398],{"id":93397},"_114-median求中位数函数","11.4 median()求中位数函数",[194,93400,93402],{"className":30436,"code":93401,"language":30438,"meta":27,"style":27},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[200,93403,93404,93409,93425,93430],{"__ignoreMap":27},[203,93405,93406],{"class":205,"line":206},[203,93407,93408],{"class":272},"#求中位数\n",[203,93410,93411,93413,93415,93417,93419,93421,93423],{"class":205,"line":124},[203,93412,477],{"class":213},[203,93414,259],{"class":209},[203,93416,93060],{"class":213},[203,93418,431],{"class":262},[203,93420,592],{"class":213},[203,93422,660],{"class":262},[203,93424,220],{"class":213},[203,93426,93427],{"class":205,"line":1269},[203,93428,93429],{"class":213},"np.median(b)\n",[203,93431,93432],{"class":205,"line":1284},[203,93433,93434],{"class":272},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93436,93438],{"id":93437},"_115-power求幂运算函数","11.5 power()求幂运算函数",[194,93440,93442],{"className":30436,"code":93441,"language":30438,"meta":27,"style":27},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[200,93443,93444,93460,93465,93470,93479,93484,93493],{"__ignoreMap":27},[203,93445,93446,93448,93450,93452,93454,93456,93458],{"class":205,"line":206},[203,93447,477],{"class":213},[203,93449,259],{"class":209},[203,93451,93060],{"class":213},[203,93453,431],{"class":262},[203,93455,592],{"class":213},[203,93457,660],{"class":262},[203,93459,220],{"class":213},[203,93461,93462],{"class":205,"line":124},[203,93463,93464],{"class":272},"#幂运算\n",[203,93466,93467],{"class":205,"line":1269},[203,93468,93469],{"class":272},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[203,93471,93472,93475,93477],{"class":205,"line":1284},[203,93473,93474],{"class":213},"np.power(b,",[203,93476,291],{"class":262},[203,93478,220],{"class":213},[203,93480,93481],{"class":205,"line":1290},[203,93482,93483],{"class":272},"#或者以下代码，将数据存储起来\n",[203,93485,93486,93488,93490],{"class":205,"line":1304},[203,93487,1059],{"class":213},[203,93489,259],{"class":209},[203,93491,93492],{"class":213},"np.empty_like(b)\n",[203,93494,93495,93497,93499,93501,93503,93505],{"class":205,"line":1310},[203,93496,93474],{"class":213},[203,93498,291],{"class":262},[203,93500,592],{"class":213},[203,93502,93112],{"class":5306},[203,93504,259],{"class":209},[203,93506,93507],{"class":213},"y)\n",[14,93509,93511],{"id":93510},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[194,93513,93515],{"className":30436,"code":93514,"language":30438,"meta":27,"style":27},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[200,93516,93517,93533,93538,93543,93547,93565],{"__ignoreMap":27},[203,93518,93519,93521,93523,93525,93527,93529,93531],{"class":205,"line":206},[203,93520,477],{"class":213},[203,93522,259],{"class":209},[203,93524,93060],{"class":213},[203,93526,431],{"class":262},[203,93528,592],{"class":213},[203,93530,660],{"class":262},[203,93532,220],{"class":213},[203,93534,93535],{"class":205,"line":124},[203,93536,93537],{"class":272},"#开方\n",[203,93539,93540],{"class":205,"line":1269},[203,93541,93542],{"class":213},"np.sqrt(b)\n",[203,93544,93545],{"class":205,"line":1284},[203,93546,93483],{"class":272},[203,93548,93549,93551,93553,93556,93559,93561,93563],{"class":205,"line":1290},[203,93550,1059],{"class":213},[203,93552,259],{"class":209},[203,93554,93555],{"class":213},"np.empty_like(b,",[203,93557,93558],{"class":5306},"dtype",[203,93560,259],{"class":209},[203,93562,253],{"class":262},[203,93564,220],{"class":213},[203,93566,93567,93570,93572,93574],{"class":205,"line":1304},[203,93568,93569],{"class":213},"np.sqrt(b,",[203,93571,93112],{"class":5306},[203,93573,259],{"class":209},[203,93575,93507],{"class":213},[14,93577,93579],{"id":93578},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,93581,93582],{},"对数组中的元素累计求和，可指定轴",[19,93584,93585],{},"#累计求和的意思是：",[19,93587,93588],{},"a = np.array([1, 2, 3, 4])",[19,93590,93591],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[194,93593,93595],{"className":30436,"code":93594,"language":30438,"meta":27,"style":27},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[200,93596,93597,93613,93618,93623],{"__ignoreMap":27},[203,93598,93599,93601,93603,93605,93607,93609,93611],{"class":205,"line":206},[203,93600,477],{"class":213},[203,93602,259],{"class":209},[203,93604,93060],{"class":213},[203,93606,431],{"class":262},[203,93608,592],{"class":213},[203,93610,660],{"class":262},[203,93612,220],{"class":213},[203,93614,93615],{"class":205,"line":124},[203,93616,93617],{"class":213},"np.cumsum(b)\n",[203,93619,93620],{"class":205,"line":1269},[203,93621,93622],{"class":272},"#结果：\n",[203,93624,93625],{"class":205,"line":1284},[203,93626,93627],{"class":272},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,93629,93631],{"id":93630},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[194,93633,93635],{"className":30436,"code":93634,"language":30438,"meta":27,"style":27},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[200,93636,93637,93653,93658,93663,93667],{"__ignoreMap":27},[203,93638,93639,93641,93643,93645,93647,93649,93651],{"class":205,"line":206},[203,93640,477],{"class":213},[203,93642,259],{"class":209},[203,93644,93060],{"class":213},[203,93646,431],{"class":262},[203,93648,592],{"class":213},[203,93650,660],{"class":262},[203,93652,220],{"class":213},[203,93654,93655],{"class":205,"line":124},[203,93656,93657],{"class":272},"#对数组中的元素累计求积，可指定轴\n",[203,93659,93660],{"class":205,"line":1269},[203,93661,93662],{"class":213},"np.cumprod(b)\n",[203,93664,93665],{"class":205,"line":1284},[203,93666,93622],{"class":272},[203,93668,93669],{"class":205,"line":1290},[203,93670,93671],{"class":272},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,93673,93675],{"id":93674},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[194,93677,93679],{"className":30436,"code":93678,"language":30438,"meta":27,"style":27},"#删除数组中的重复数据，并对数据进行排序\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",[200,93680,93681,93686,93734,93739,93743],{"__ignoreMap":27},[203,93682,93683],{"class":205,"line":206},[203,93684,93685],{"class":272},"#删除数组中的重复数据，并对数据进行排序\n",[203,93687,93688,93690,93692,93694,93696,93698,93700,93702,93704,93706,93708,93710,93712,93714,93716,93718,93720,93722,93724,93726,93728,93730,93732],{"class":205,"line":124},[203,93689,452],{"class":213},[203,93691,259],{"class":209},[203,93693,93082],{"class":213},[203,93695,431],{"class":262},[203,93697,592],{"class":213},[203,93699,291],{"class":262},[203,93701,592],{"class":213},[203,93703,285],{"class":262},[203,93705,592],{"class":213},[203,93707,712],{"class":262},[203,93709,592],{"class":213},[203,93711,285],{"class":262},[203,93713,592],{"class":213},[203,93715,660],{"class":262},[203,93717,592],{"class":213},[203,93719,411],{"class":262},[203,93721,592],{"class":213},[203,93723,405],{"class":262},[203,93725,592],{"class":213},[203,93727,989],{"class":262},[203,93729,592],{"class":213},[203,93731,507],{"class":262},[203,93733,4746],{"class":213},[203,93735,93736],{"class":205,"line":1269},[203,93737,93738],{"class":213},"np.unique(a)\n",[203,93740,93741],{"class":205,"line":1284},[203,93742,93622],{"class":272},[203,93744,93745],{"class":205,"line":1290},[203,93746,93747],{"class":272},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,93749,93750],{},"升序形式排序",[14,93752,93754],{"id":93753},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[194,93756,93758],{"className":30436,"code":93757,"language":30438,"meta":27,"style":27},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[200,93759,93760,93808,93813],{"__ignoreMap":27},[203,93761,93762,93764,93766,93768,93770,93772,93774,93776,93778,93780,93782,93784,93786,93788,93790,93792,93794,93796,93798,93800,93802,93804,93806],{"class":205,"line":206},[203,93763,452],{"class":213},[203,93765,259],{"class":209},[203,93767,93082],{"class":213},[203,93769,431],{"class":262},[203,93771,592],{"class":213},[203,93773,291],{"class":262},[203,93775,592],{"class":213},[203,93777,285],{"class":262},[203,93779,592],{"class":213},[203,93781,712],{"class":262},[203,93783,592],{"class":213},[203,93785,285],{"class":262},[203,93787,592],{"class":213},[203,93789,660],{"class":262},[203,93791,592],{"class":213},[203,93793,411],{"class":262},[203,93795,592],{"class":213},[203,93797,405],{"class":262},[203,93799,592],{"class":213},[203,93801,989],{"class":262},[203,93803,592],{"class":213},[203,93805,507],{"class":262},[203,93807,4746],{"class":213},[203,93809,93810],{"class":205,"line":124},[203,93811,93812],{"class":272},"#返回数组中非零元素的索引\n",[203,93814,93815],{"class":205,"line":1269},[203,93816,93817],{"class":213},"np.nonzero(a)\n",[14,93819,93821],{"id":93820},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[194,93823,93825],{"className":30436,"code":93824,"language":30438,"meta":27,"style":27},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[200,93826,93827,93875,93880],{"__ignoreMap":27},[203,93828,93829,93831,93833,93835,93837,93839,93841,93843,93845,93847,93849,93851,93853,93855,93857,93859,93861,93863,93865,93867,93869,93871,93873],{"class":205,"line":206},[203,93830,452],{"class":213},[203,93832,259],{"class":209},[203,93834,93082],{"class":213},[203,93836,431],{"class":262},[203,93838,592],{"class":213},[203,93840,291],{"class":262},[203,93842,592],{"class":213},[203,93844,285],{"class":262},[203,93846,592],{"class":213},[203,93848,712],{"class":262},[203,93850,592],{"class":213},[203,93852,285],{"class":262},[203,93854,592],{"class":213},[203,93856,660],{"class":262},[203,93858,592],{"class":213},[203,93860,411],{"class":262},[203,93862,592],{"class":213},[203,93864,405],{"class":262},[203,93866,592],{"class":213},[203,93868,989],{"class":262},[203,93870,592],{"class":213},[203,93872,507],{"class":262},[203,93874,4746],{"class":213},[203,93876,93877],{"class":205,"line":124},[203,93878,93879],{"class":272},"#计算一组数中最大值与最小值的差，可指定轴\n",[203,93881,93882],{"class":205,"line":1269},[203,93883,93884],{"class":213},"np.ptp(a)\n",[5216,93886,93887],{},"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":27,"searchDepth":124,"depth":124,"links":93889},[93890,93891,93892,93893,93894,93895,93896,93897,93898,93899,93900],{"id":93152,"depth":124,"text":93153},{"id":93195,"depth":124,"text":93196},{"id":93303,"depth":124,"text":93304},{"id":93397,"depth":124,"text":93398},{"id":93437,"depth":124,"text":93438},{"id":93510,"depth":124,"text":93511},{"id":93578,"depth":124,"text":93579},{"id":93630,"depth":124,"text":93631},{"id":93674,"depth":124,"text":93675},{"id":93753,"depth":124,"text":93754},{"id":93820,"depth":124,"text":93821},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93138,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93907,"title":93908,"body":93909,"description":23467,"extension":129,"meta":94564,"navigation":131,"path":94565,"seo":94566,"stem":94567,"__hash__":94568},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93910,"toc":94552},[93911,93914,93918,93921,94137,94141,94144,94353,94357,94423,94428,94432,94435,94438,94476,94480,94483,94488,94492,94495,94498,94503,94507,94510,94514,94517,94520,94525,94529,94532,94535,94540,94544,94549],[10,93912,93908],{"id":93913},"_12其他常用函数",[14,93915,93917],{"id":93916},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,93919,93920],{},"将数组的数据按照行列复制扩展",[194,93922,93924],{"className":30436,"code":93923,"language":30438,"meta":27,"style":27},"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",[200,93925,93926,93942,93951,93955,93960,93965,93978,93982,93987,93992,93997,94001,94006,94030,94042,94046,94050,94055,94060,94065,94070,94074,94087,94091,94095,94100,94105,94110,94115,94120,94124,94128,94133],{"__ignoreMap":27},[203,93927,93928,93930,93932,93934,93936,93938,93940],{"class":205,"line":206},[203,93929,452],{"class":213},[203,93931,259],{"class":209},[203,93933,93060],{"class":213},[203,93935,431],{"class":262},[203,93937,592],{"class":213},[203,93939,533],{"class":262},[203,93941,220],{"class":213},[203,93943,93944,93947,93949],{"class":205,"line":124},[203,93945,93946],{"class":213},"np.tile(a,",[203,93948,291],{"class":262},[203,93950,220],{"class":213},[203,93952,93953],{"class":205,"line":1269},[203,93954,93622],{"class":272},[203,93956,93957],{"class":205,"line":1284},[203,93958,93959],{"class":272},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[203,93961,93962],{"class":205,"line":1290},[203,93963,93964],{"class":272},"#行复制两次，列复制三次\n",[203,93966,93967,93970,93972,93974,93976],{"class":205,"line":1304},[203,93968,93969],{"class":213},"np.tile(a,(",[203,93971,291],{"class":262},[203,93973,592],{"class":213},[203,93975,285],{"class":262},[203,93977,30555],{"class":213},[203,93979,93980],{"class":205,"line":1310},[203,93981,93622],{"class":272},[203,93983,93984],{"class":205,"line":1401},[203,93985,93986],{"class":318},"'''\n",[203,93988,93989],{"class":205,"line":1407},[203,93990,93991],{"class":318},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[203,93993,93994],{"class":205,"line":1419},[203,93995,93996],{"class":318},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[203,93998,93999],{"class":205,"line":1701},[203,94000,93986],{"class":318},[203,94002,94003],{"class":205,"line":1706},[203,94004,94005],{"class":272},"#创建二维数组\n",[203,94007,94008,94010,94012,94014,94016,94018,94020,94022,94024,94026,94028],{"class":205,"line":1712},[203,94009,93364],{"class":213},[203,94011,259],{"class":209},[203,94013,93060],{"class":213},[203,94015,431],{"class":262},[203,94017,592],{"class":213},[203,94019,737],{"class":262},[203,94021,93065],{"class":213},[203,94023,507],{"class":262},[203,94025,592],{"class":213},[203,94027,285],{"class":262},[203,94029,220],{"class":213},[203,94031,94032,94035,94037,94039],{"class":205,"line":1717},[203,94033,94034],{"class":213},"np.tile(aa,",[203,94036,291],{"class":262},[203,94038,643],{"class":213},[203,94040,94041],{"class":272},"#一个数的时候就是行\n",[203,94043,94044],{"class":205,"line":1731},[203,94045,93622],{"class":272},[203,94047,94048],{"class":205,"line":1736},[203,94049,93986],{"class":318},[203,94051,94052],{"class":205,"line":1742},[203,94053,94054],{"class":318},"array([[ 1,  2,  3,  1,  2,  3],\n",[203,94056,94057],{"class":205,"line":1763},[203,94058,94059],{"class":318},"       [ 4,  5,  6,  4,  5,  6],\n",[203,94061,94062],{"class":205,"line":1768},[203,94063,94064],{"class":318},"       [ 7,  8,  9,  7,  8,  9],\n",[203,94066,94067],{"class":205,"line":1782},[203,94068,94069],{"class":318},"       [10, 11, 12, 10, 11, 12]])\n",[203,94071,94072],{"class":205,"line":1787},[203,94073,93986],{"class":318},[203,94075,94076,94079,94081,94083,94085],{"class":205,"line":1816},[203,94077,94078],{"class":213},"np.tile(aa,(",[203,94080,291],{"class":262},[203,94082,592],{"class":213},[203,94084,285],{"class":262},[203,94086,30555],{"class":213},[203,94088,94089],{"class":205,"line":1821},[203,94090,93622],{"class":272},[203,94092,94093],{"class":205,"line":1838},[203,94094,93986],{"class":318},[203,94096,94097],{"class":205,"line":1843},[203,94098,94099],{"class":318},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[203,94101,94102],{"class":205,"line":1848},[203,94103,94104],{"class":318},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[203,94106,94107],{"class":205,"line":1853},[203,94108,94109],{"class":318},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[203,94111,94112],{"class":205,"line":1867},[203,94113,94114],{"class":318},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[203,94116,94117],{"class":205,"line":1872},[203,94118,94119],{"class":318},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[203,94121,94122],{"class":205,"line":2666},[203,94123,94104],{"class":318},[203,94125,94126],{"class":205,"line":2680},[203,94127,94109],{"class":318},[203,94129,94130],{"class":205,"line":2688},[203,94131,94132],{"class":318},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[203,94134,94135],{"class":205,"line":2693},[203,94136,93986],{"class":318},[14,94138,94140],{"id":94139},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94142,94143],{},"repeat()将数组中的每个元素重复若干次",[194,94145,94147],{"className":30436,"code":94146,"language":30438,"meta":27,"style":27},"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",[200,94148,94149,94165,94174,94178,94183,94207,94212,94221,94225,94230,94234,94239,94255,94259,94263,94268,94273,94278,94282,94287,94291,94296,94301,94305,94321,94325,94329,94334,94339,94344,94349],{"__ignoreMap":27},[203,94150,94151,94153,94155,94157,94159,94161,94163],{"class":205,"line":206},[203,94152,452],{"class":213},[203,94154,259],{"class":209},[203,94156,93060],{"class":213},[203,94158,431],{"class":262},[203,94160,592],{"class":213},[203,94162,533],{"class":262},[203,94164,220],{"class":213},[203,94166,94167,94170,94172],{"class":205,"line":124},[203,94168,94169],{"class":213},"np.repeat(a,",[203,94171,285],{"class":262},[203,94173,220],{"class":213},[203,94175,94176],{"class":205,"line":1269},[203,94177,93622],{"class":272},[203,94179,94180],{"class":205,"line":1284},[203,94181,94182],{"class":272},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[203,94184,94185,94187,94189,94191,94193,94195,94197,94199,94201,94203,94205],{"class":205,"line":1290},[203,94186,93364],{"class":213},[203,94188,259],{"class":209},[203,94190,93060],{"class":213},[203,94192,431],{"class":262},[203,94194,592],{"class":213},[203,94196,737],{"class":262},[203,94198,93065],{"class":213},[203,94200,507],{"class":262},[203,94202,592],{"class":213},[203,94204,285],{"class":262},[203,94206,220],{"class":213},[203,94208,94209],{"class":205,"line":1304},[203,94210,94211],{"class":272},"#这个重复之后二维变成一维\n",[203,94213,94214,94217,94219],{"class":205,"line":1310},[203,94215,94216],{"class":213},"np.repeat(aa,",[203,94218,291],{"class":262},[203,94220,220],{"class":213},[203,94222,94223],{"class":205,"line":1401},[203,94224,93986],{"class":318},[203,94226,94227],{"class":205,"line":1407},[203,94228,94229],{"class":318},"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",[203,94231,94232],{"class":205,"line":1419},[203,94233,93986],{"class":318},[203,94235,94236],{"class":205,"line":1701},[203,94237,94238],{"class":272},"#指定axis\n",[203,94240,94241,94243,94245,94247,94249,94251,94253],{"class":205,"line":1706},[203,94242,94216],{"class":213},[203,94244,291],{"class":262},[203,94246,592],{"class":213},[203,94248,47572],{"class":5306},[203,94250,259],{"class":209},[203,94252,405],{"class":262},[203,94254,220],{"class":213},[203,94256,94257],{"class":205,"line":1712},[203,94258,93622],{"class":272},[203,94260,94261],{"class":205,"line":1717},[203,94262,93986],{"class":318},[203,94264,94265],{"class":205,"line":1731},[203,94266,94267],{"class":318},"array([[ 1,  2,  3],\n",[203,94269,94270],{"class":205,"line":1736},[203,94271,94272],{"class":318},"       [ 1,  2,  3],\n",[203,94274,94275],{"class":205,"line":1742},[203,94276,94277],{"class":318},"       [ 4,  5,  6],\n",[203,94279,94280],{"class":205,"line":1763},[203,94281,94277],{"class":318},[203,94283,94284],{"class":205,"line":1768},[203,94285,94286],{"class":318},"       [ 7,  8,  9],\n",[203,94288,94289],{"class":205,"line":1782},[203,94290,94286],{"class":318},[203,94292,94293],{"class":205,"line":1787},[203,94294,94295],{"class":318},"       [10, 11, 12],\n",[203,94297,94298],{"class":205,"line":1816},[203,94299,94300],{"class":318},"       [10, 11, 12]])\n",[203,94302,94303],{"class":205,"line":1821},[203,94304,93986],{"class":318},[203,94306,94307,94309,94311,94313,94315,94317,94319],{"class":205,"line":1838},[203,94308,94216],{"class":213},[203,94310,291],{"class":262},[203,94312,592],{"class":213},[203,94314,47572],{"class":5306},[203,94316,259],{"class":209},[203,94318,431],{"class":262},[203,94320,220],{"class":213},[203,94322,94323],{"class":205,"line":1843},[203,94324,93622],{"class":272},[203,94326,94327],{"class":205,"line":1848},[203,94328,93986],{"class":318},[203,94330,94331],{"class":205,"line":1853},[203,94332,94333],{"class":318},"array([[ 1,  1,  2,  2,  3,  3],\n",[203,94335,94336],{"class":205,"line":1867},[203,94337,94338],{"class":318},"       [ 4,  4,  5,  5,  6,  6],\n",[203,94340,94341],{"class":205,"line":1872},[203,94342,94343],{"class":318},"       [ 7,  7,  8,  8,  9,  9],\n",[203,94345,94346],{"class":205,"line":2666},[203,94347,94348],{"class":318},"       [10, 10, 11, 11, 12, 12]])\n",[203,94350,94351],{"class":205,"line":2680},[203,94352,93986],{"class":318},[14,94354,94356],{"id":94355},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[194,94358,94360],{"className":30436,"code":94359,"language":30438,"meta":27,"style":27},"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",[200,94361,94362,94378,94383,94395,94399,94404,94414,94418],{"__ignoreMap":27},[203,94363,94364,94366,94368,94370,94372,94374,94376],{"class":205,"line":206},[203,94365,452],{"class":213},[203,94367,259],{"class":209},[203,94369,93060],{"class":213},[203,94371,431],{"class":262},[203,94373,592],{"class":213},[203,94375,533],{"class":262},[203,94377,220],{"class":213},[203,94379,94380],{"class":205,"line":124},[203,94381,94382],{"class":272},"#array([，2，3，4])\n",[203,94384,94385,94388,94390,94392],{"class":205,"line":1269},[203,94386,94387],{"class":213},"np.roll(a,",[203,94389,291],{"class":262},[203,94391,643],{"class":213},[203,94393,94394],{"class":272},"#传正数向后调多少位，传负数向前调多少位\n",[203,94396,94397],{"class":205,"line":1284},[203,94398,93622],{"class":272},[203,94400,94401],{"class":205,"line":1290},[203,94402,94403],{"class":272},"#array([3, 4, 1, 2])\n",[203,94405,94406,94408,94410,94412],{"class":205,"line":1304},[203,94407,94387],{"class":213},[203,94409,746],{"class":209},[203,94411,431],{"class":262},[203,94413,220],{"class":213},[203,94415,94416],{"class":205,"line":1310},[203,94417,93622],{"class":272},[203,94419,94420],{"class":205,"line":1401},[203,94421,94422],{"class":272},"#array([2, 3, 4, 1])\n",[19,94424,94425],{},[25,94426],{"alt":27,"src":94427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94429,94431],{"id":94430},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,94433,94434],{},"resize()重新调整数组的大小",[19,94436,94437],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[194,94439,94441],{"className":30436,"code":94440,"language":30438,"meta":27,"style":27},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[200,94442,94443,94448,94461],{"__ignoreMap":27},[203,94444,94445],{"class":205,"line":206},[203,94446,94447],{"class":272},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[203,94449,94450,94453,94455,94457,94459],{"class":205,"line":124},[203,94451,94452],{"class":213},"np.resize(aa,(",[203,94454,291],{"class":262},[203,94456,592],{"class":213},[203,94458,558],{"class":262},[203,94460,30555],{"class":213},[203,94462,94463,94465,94467,94469,94471,94473],{"class":205,"line":1269},[203,94464,94452],{"class":213},[203,94466,291],{"class":262},[203,94468,592],{"class":213},[203,94470,634],{"class":262},[203,94472,82829],{"class":213},[203,94474,94475],{"class":272},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94477,94479],{"id":94478},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,94481,94482],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,94484,94485],{},[25,94486],{"alt":27,"src":94487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94489,94491],{"id":94490},"_126-保存加载文件","12.6 保存加载文件",[19,94493,94494],{},"savetxt():将数据保存到txt文件中",[19,94496,94497],{},"loadtxt():从文件加载数据",[19,94499,94500],{},[25,94501],{"alt":27,"src":94502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94504,94506],{"id":94505},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,94508,94509],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94511,94513],{"id":94512},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,94515,94516],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,94518,94519],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,94521,94522],{},[25,94523],{"alt":27,"src":94524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94526,94528],{"id":94527},"_129-where语句","12.9 where语句",[19,94530,94531],{},"np.where(条件,x,y)",[19,94533,94534],{},"如果条件为True,对应值为x,否则对应值为y",[19,94536,94537],{},[25,94538],{"alt":27,"src":94539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,94541,94543],{"id":94542},"_1210-dot矩阵","12.10 dot()矩阵",[19,94545,94546],{},[25,94547],{"alt":27,"src":94548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5216,94550,94551],{},"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":27,"searchDepth":124,"depth":124,"links":94553},[94554,94555,94556,94557,94558,94559,94560,94561,94562,94563],{"id":93916,"depth":124,"text":93917},{"id":94139,"depth":124,"text":94140},{"id":94355,"depth":124,"text":94356},{"id":94430,"depth":124,"text":94431},{"id":94478,"depth":124,"text":94479},{"id":94490,"depth":124,"text":94491},{"id":94505,"depth":124,"text":94506},{"id":94512,"depth":124,"text":94513},{"id":94527,"depth":124,"text":94528},{"id":94542,"depth":124,"text":94543},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93908,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94570,"title":94571,"body":94572,"description":23467,"extension":129,"meta":94925,"navigation":131,"path":94926,"seo":94927,"stem":94928,"__hash__":94929},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94573,"toc":94923},[94574,94577,94580,94583,94586,94589,94654,94656,94920],[10,94575,94571],{"id":94576},"_13数组排序",[19,94578,94579],{},"排序主要用到的方法是np.sort和np.argsort",[19,94581,94582],{},"其中np.sort()对数组直接排序",[19,94584,94585],{},"而np.argsort()是返回排序后的原始索引",[19,94587,94588],{},"①一维数组",[194,94590,94592],{"className":30436,"code":94591,"language":30438,"meta":27,"style":27},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[200,94593,94594,94598,94638,94646],{"__ignoreMap":27},[203,94595,94596],{"class":205,"line":206},[203,94597,93163],{"class":272},[203,94599,94600,94602,94604,94606,94608,94610,94612,94614,94616,94618,94620,94622,94624,94626,94628,94630,94632,94634,94636],{"class":205,"line":124},[203,94601,452],{"class":213},[203,94603,259],{"class":209},[203,94605,93082],{"class":213},[203,94607,285],{"class":262},[203,94609,592],{"class":213},[203,94611,712],{"class":262},[203,94613,592],{"class":213},[203,94615,609],{"class":262},[203,94617,592],{"class":213},[203,94619,989],{"class":262},[203,94621,592],{"class":213},[203,94623,493],{"class":262},[203,94625,592],{"class":213},[203,94627,1107],{"class":262},[203,94629,592],{"class":213},[203,94631,558],{"class":262},[203,94633,592],{"class":213},[203,94635,660],{"class":262},[203,94637,4746],{"class":213},[203,94639,94640,94643],{"class":205,"line":1269},[203,94641,94642],{"class":213},"np.sort(a)",[203,94644,94645],{"class":272},"#升序排序\n",[203,94647,94648,94651],{"class":205,"line":1284},[203,94649,94650],{"class":213},"np.argsort(a)",[203,94652,94653],{"class":272},"#按照元素大小来索引排序\n",[19,94655,93349],{},[194,94657,94659],{"className":30436,"code":94658,"language":30438,"meta":27,"style":27},"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",[200,94660,94661,94673,94699,94704,94708,94713,94718,94723,94728,94732,94740,94744,94749,94754,94759,94764,94768,94773,94786,94790,94795,94800,94805,94810,94814,94819,94831,94835,94839,94843,94847,94851,94855,94860,94875,94880,94889,94894,94898,94902,94907,94911,94916],{"__ignoreMap":27},[203,94662,94663,94666,94668,94670],{"class":205,"line":206},[203,94664,94665],{"class":213},"np.random.seed(",[203,94667,405],{"class":262},[203,94669,643],{"class":213},[203,94671,94672],{"class":272},"#保证每次值一样\n",[203,94674,94675,94677,94679,94681,94683,94685,94687,94689,94691,94693,94695,94697],{"class":205,"line":124},[203,94676,93364],{"class":213},[203,94678,259],{"class":209},[203,94680,93172],{"class":213},[203,94682,525],{"class":262},[203,94684,592],{"class":213},[203,94686,31554],{"class":5306},[203,94688,259],{"class":209},[203,94690,214],{"class":213},[203,94692,507],{"class":262},[203,94694,592],{"class":213},[203,94696,558],{"class":262},[203,94698,30555],{"class":213},[203,94700,94701],{"class":205,"line":1269},[203,94702,94703],{"class":272},"#原数组：\n",[203,94705,94706],{"class":205,"line":1284},[203,94707,93986],{"class":318},[203,94709,94710],{"class":205,"line":1290},[203,94711,94712],{"class":318},"array([[44, 47, 64, 67, 67,  9],\n",[203,94714,94715],{"class":205,"line":1304},[203,94716,94717],{"class":318},"       [83, 21, 36, 87, 70, 88],\n",[203,94719,94720],{"class":205,"line":1310},[203,94721,94722],{"class":318},"       [88, 12, 58, 65, 39, 87],\n",[203,94724,94725],{"class":205,"line":1401},[203,94726,94727],{"class":318},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[203,94729,94730],{"class":205,"line":1407},[203,94731,93986],{"class":318},[203,94733,94734,94737],{"class":205,"line":1419},[203,94735,94736],{"class":213},"np.sort(aa)",[203,94738,94739],{"class":272},"#每行进行了排序\n",[203,94741,94742],{"class":205,"line":1701},[203,94743,93986],{"class":318},[203,94745,94746],{"class":205,"line":1706},[203,94747,94748],{"class":318},"array([[ 9, 44, 47, 64, 67, 67],\n",[203,94750,94751],{"class":205,"line":1712},[203,94752,94753],{"class":318},"       [21, 36, 70, 83, 87, 88],\n",[203,94755,94756],{"class":205,"line":1717},[203,94757,94758],{"class":318},"       [12, 39, 58, 65, 87, 88],\n",[203,94760,94761],{"class":205,"line":1731},[203,94762,94763],{"class":318},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[203,94765,94766],{"class":205,"line":1736},[203,94767,93986],{"class":318},[203,94769,94770],{"class":205,"line":1742},[203,94771,94772],{"class":272},"#axis=0时\n",[203,94774,94775,94778,94780,94782,94784],{"class":205,"line":1763},[203,94776,94777],{"class":213},"np.sort(aa,",[203,94779,47572],{"class":5306},[203,94781,259],{"class":209},[203,94783,405],{"class":262},[203,94785,220],{"class":213},[203,94787,94788],{"class":205,"line":1768},[203,94789,93986],{"class":318},[203,94791,94792],{"class":205,"line":1782},[203,94793,94794],{"class":318},"array([[44, 12, 36, 37, 25,  9],\n",[203,94796,94797],{"class":205,"line":1787},[203,94798,94799],{"class":318},"       [46, 21, 58, 65, 39, 77],\n",[203,94801,94802],{"class":205,"line":1816},[203,94803,94804],{"class":318},"       [83, 47, 64, 67, 67, 87],\n",[203,94806,94807],{"class":205,"line":1821},[203,94808,94809],{"class":318},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[203,94811,94812],{"class":205,"line":1838},[203,94813,93986],{"class":318},[203,94815,94816],{"class":205,"line":1843},[203,94817,94818],{"class":272},"#axis=1时,为默认值\n",[203,94820,94821,94823,94825,94827,94829],{"class":205,"line":1848},[203,94822,94777],{"class":213},[203,94824,47572],{"class":5306},[203,94826,259],{"class":209},[203,94828,431],{"class":262},[203,94830,220],{"class":213},[203,94832,94833],{"class":205,"line":1853},[203,94834,93986],{"class":318},[203,94836,94837],{"class":205,"line":1867},[203,94838,94748],{"class":318},[203,94840,94841],{"class":205,"line":1872},[203,94842,94753],{"class":318},[203,94844,94845],{"class":205,"line":2666},[203,94846,94758],{"class":318},[203,94848,94849],{"class":205,"line":2680},[203,94850,94763],{"class":318},[203,94852,94853],{"class":205,"line":2688},[203,94854,93986],{"class":318},[203,94856,94857],{"class":205,"line":2693},[203,94858,94859],{"class":272},"#按最后一列排序\n",[203,94861,94862,94864,94866,94869,94871,94873],{"class":205,"line":2699},[203,94863,477],{"class":213},[203,94865,259],{"class":209},[203,94867,94868],{"class":213},"aa[:,",[203,94870,746],{"class":209},[203,94872,431],{"class":262},[203,94874,33304],{"class":213},[203,94876,94877],{"class":205,"line":2705},[203,94878,94879],{"class":272},"#获取最后一列排好序的索引\n",[203,94881,94882,94884,94886],{"class":205,"line":2710},[203,94883,74116],{"class":213},[203,94885,259],{"class":209},[203,94887,94888],{"class":213},"np.argsort(b)\n",[203,94890,94891],{"class":205,"line":8038},[203,94892,94893],{"class":213},"aa[index]\n",[203,94895,94896],{"class":205,"line":8062},[203,94897,93986],{"class":318},[203,94899,94900],{"class":205,"line":8067},[203,94901,94712],{"class":318},[203,94903,94904],{"class":205,"line":8073},[203,94905,94906],{"class":318},"       [46, 88, 81, 37, 25, 77],\n",[203,94908,94909],{"class":205,"line":8100},[203,94910,94722],{"class":318},[203,94912,94913],{"class":205,"line":8105},[203,94914,94915],{"class":318},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[203,94917,94918],{"class":205,"line":8111},[203,94919,93986],{"class":318},[5216,94921,94922],{},"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":27,"searchDepth":124,"depth":124,"links":94924},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94571,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94931,"title":94932,"body":94933,"description":23467,"extension":129,"meta":94963,"navigation":131,"path":94964,"seo":94965,"stem":94966,"__hash__":94967},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94934,"toc":94961},[94935,94938,94941,94944,94947,94950,94953,94956],[10,94936,94932],{"id":94937},"_14广播机制",[19,94939,94940],{},"广播的规则：",[19,94942,94943],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,94945,94946],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,94948,94949],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,94951,94952],{},"3.如果没有维度形状为1，则会引发异常",[19,94954,94955],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,94957,94958],{},[25,94959],{"alt":27,"src":94960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":27,"searchDepth":124,"depth":124,"links":94962},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94932,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94969,"title":94970,"body":94971,"description":23467,"extension":129,"meta":95069,"navigation":131,"path":95070,"seo":95071,"stem":95072,"__hash__":95073},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94972,"toc":95067},[94973,94976,94979,95064],[10,94974,94970],{"id":94975},"_15比较掩码",[19,94977,94978],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[194,94980,94982],{"className":30436,"code":94981,"language":30438,"meta":27,"style":27},"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",[200,94983,94984,95030,95041,95055,95059],{"__ignoreMap":27},[203,94985,94986,94988,94990,94993,94995,94997,94999,95001,95003,95005,95007,95009,95011,95013,95015,95017,95019,95021,95023,95025,95027],{"class":205,"line":206},[203,94987,452],{"class":213},[203,94989,259],{"class":209},[203,94991,94992],{"class":213},"np.array([[",[203,94994,431],{"class":262},[203,94996,592],{"class":213},[203,94998,291],{"class":262},[203,95000,592],{"class":213},[203,95002,285],{"class":262},[203,95004,48088],{"class":213},[203,95006,686],{"class":262},[203,95008,592],{"class":213},[203,95010,712],{"class":262},[203,95012,592],{"class":213},[203,95014,737],{"class":262},[203,95016,48088],{"class":213},[203,95018,939],{"class":262},[203,95020,592],{"class":213},[203,95022,964],{"class":262},[203,95024,592],{"class":213},[203,95026,989],{"class":262},[203,95028,95029],{"class":213},"]])\n",[203,95031,95032,95034,95036,95038],{"class":205,"line":124},[203,95033,452],{"class":213},[203,95035,1124],{"class":209},[203,95037,914],{"class":262},[203,95039,95040],{"class":272},"#结果是一个由True,False组成的数组\n",[203,95042,95043,95046,95048,95050,95052],{"class":205,"line":1269},[203,95044,95045],{"class":213},"a[a",[203,95047,1124],{"class":209},[203,95049,914],{"class":262},[203,95051,1154],{"class":213},[203,95053,95054],{"class":272},"#小于20的元素会存到这个数组中\n",[203,95056,95057],{"class":205,"line":1284},[203,95058,93622],{"class":272},[203,95060,95061],{"class":205,"line":1290},[203,95062,95063],{"class":272},"#array([ 1,  2,  3, 11, 12, 13])\n",[5216,95065,95066],{},"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":27,"searchDepth":124,"depth":124,"links":95068},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94970,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95075,"title":95076,"body":95077,"description":23467,"extension":129,"meta":95169,"navigation":131,"path":95170,"seo":95171,"stem":95172,"__hash__":95173},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95078,"toc":95167},[95079,95082,95085,95088,95091,95094,95159,95164],[10,95080,95076],{"id":95081},"_16魔法命令time",[19,95083,95084],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95086,95087],{},"%:行模式",[19,95089,95090],{},"%%:单元格模式",[19,95092,95093],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[194,95095,95097],{"className":30436,"code":95096,"language":30438,"meta":27,"style":27},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[200,95098,95099,95104,95111,95116,95125,95138,95142,95150],{"__ignoreMap":27},[203,95100,95101],{"class":205,"line":206},[203,95102,95103],{"class":272},"#程序执行时间\n",[203,95105,95106,95108],{"class":205,"line":124},[203,95107,30450],{"class":209},[203,95109,95110],{"class":213}," time \n",[203,95112,95113],{"class":205,"line":1269},[203,95114,95115],{"class":272},"#获取时间\n",[203,95117,95118,95121,95123],{"class":205,"line":1284},[203,95119,95120],{"class":213},"start",[203,95122,259],{"class":209},[203,95124,32476],{"class":213},[203,95126,95127,95130,95133,95135],{"class":205,"line":1290},[203,95128,95129],{"class":213},"time.sleep(",[203,95131,95132],{"class":262},"0.4",[203,95134,643],{"class":213},[203,95136,95137],{"class":272},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[203,95139,95140],{"class":205,"line":1304},[203,95141,95115],{"class":272},[203,95143,95144,95146,95148],{"class":205,"line":1310},[203,95145,45859],{"class":213},[203,95147,259],{"class":209},[203,95149,32476],{"class":213},[203,95151,95152,95154,95156],{"class":205,"line":1401},[203,95153,45859],{"class":213},[203,95155,746],{"class":209},[203,95157,95158],{"class":213},"start\n",[19,95160,95161],{},[25,95162],{"alt":27,"src":95163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5216,95165,95166],{},"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":27,"searchDepth":124,"depth":124,"links":95168},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95076,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95175,"title":95176,"body":95177,"description":23467,"extension":129,"meta":95212,"navigation":131,"path":95213,"seo":95214,"stem":95215,"__hash__":95216},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95178,"toc":95210},[95179,95182,95185,95188,95191,95194,95197,95200,95205],[10,95180,95176],{"id":95181},"_17魔法命令timeit",[19,95183,95184],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95186,95187],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95189,95190],{},"单元格模式：",[19,95192,95193],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95195,95196],{},"初始化语句执行次数由轮数来决定",[19,95198,95199],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95201,95202],{},[25,95203],{"alt":27,"src":95204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95206,95207],{},[25,95208],{"alt":27,"src":95209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":27,"searchDepth":124,"depth":124,"links":95211},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95176,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95218,"title":95219,"body":95220,"description":23467,"extension":129,"meta":95238,"navigation":131,"path":95239,"seo":95240,"stem":95241,"__hash__":95242},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95221,"toc":95236},[95222,95225,95228,95231],[10,95223,95219],{"id":95224},"_18魔法命令writefile和run",[19,95226,95227],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95229,95230],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95232,95233],{},[25,95234],{"alt":27,"src":95235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":27,"searchDepth":124,"depth":124,"links":95237},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95219,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95244,"title":95245,"body":95246,"description":23467,"extension":129,"meta":95299,"navigation":131,"path":95300,"seo":95301,"stem":95302,"__hash__":95303},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95247,"toc":95297},[95248,95251,95254,95256,95259,95262,95267,95270,95273,95276,95279,95282,95285,95288,95291,95294],[10,95249,95245],{"id":95250},"_19魔法命令memit",[19,95252,95253],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95255,24657],{},[19,95257,95258],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95260,95261],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95263,95264],{},[25,95265],{"alt":27,"src":95266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95268,95269],{},"补充：",[19,95271,95272],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95274,95275],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95277,95278],{},"解决方法：",[19,95280,95281],{},"1.cmd",[19,95283,95284],{},"2.依次输入以下代码：",[19,95286,95287],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95289,95290],{},"pip install --upgrade ipython",[19,95292,95293],{},"#升级 memory_profiler 和 setuptools",[19,95295,95296],{},"pip install --upgrade memory_profiler setuptools",{"title":27,"searchDepth":124,"depth":124,"links":95298},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95245,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95305,"title":95306,"body":95307,"description":23467,"extension":129,"meta":96953,"navigation":131,"path":96954,"seo":96955,"stem":96956,"__hash__":96957},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95308,"toc":96923},[95309,95312,95316,95320,95381,95384,95389,95393,95398,95403,95408,95413,95416,95421,95425,95429,95462,95465,95468,95471,95523,95526,95562,95565,95607,95611,95632,95634,95671,95673,95678,95680,95685,95689,95692,95720,95724,95728,95781,95785,95877,95881,95885,95888,95893,95897,95922,95927,95931,95934,95937,95940,95943,95946,95949,95952,95964,95968,95972,95975,96007,96010,96033,96036,96062,96065,96091,96094,96128,96131,96193,96197,96200,96204,96207,96233,96236,96239,96244,96247,96316,96318,96323,96384,96387,96398,96404,96409,96413,96416,96429,96433,96448,96450,96473,96475,96501,96504,96507,96510,96558,96560,96565,96569,96573,96600,96604,96631,96634,96639,96644,96734,96738,96796,96801,96804,96807,96849,96853,96909,96914,96917,96920],[10,95310,95306],{"id":95311},"_2创建数组",[14,95313,95315],{"id":95314},"_21-array函数创建数组","2.1 array()函数创建数组",[174,95317,95319],{"id":95318},"_221-函数语句","2.2.1 函数语句",[194,95321,95323],{"className":30436,"code":95322,"language":30438,"meta":27,"style":27},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[200,95324,95325],{"__ignoreMap":27},[203,95326,95327,95330,95333,95335,95337,95339,95341,95343,95346,95348,95351,95353,95356,95358,95360,95362,95365,95367,95370,95372,95375,95377,95379],{"class":205,"line":206},[203,95328,95329],{"class":213},"numpy.array(",[203,95331,95332],{"class":262},"object",[203,95334,12525],{"class":213},[203,95336,93558],{"class":5306},[203,95338,13654],{"class":209},[203,95340,38991],{"class":262},[203,95342,12525],{"class":213},[203,95344,95345],{"class":5306},"copy",[203,95347,13654],{"class":209},[203,95349,95350],{"class":262}," True",[203,95352,12525],{"class":213},[203,95354,95355],{"class":5306},"order",[203,95357,13654],{"class":209},[203,95359,38991],{"class":262},[203,95361,12525],{"class":213},[203,95363,95364],{"class":5306},"subok",[203,95366,13654],{"class":209},[203,95368,95369],{"class":262}," False",[203,95371,12525],{"class":213},[203,95373,95374],{"class":5306},"ndmin",[203,95376,13654],{"class":209},[203,95378,4182],{"class":262},[203,95380,220],{"class":213},[19,95382,95383],{},"参数：",[19,95385,95386],{},[25,95387],{"alt":27,"src":95388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[174,95390,95392],{"id":95391},"_222-实例","2.2.2 实例",[19,95394,95395],{},[25,95396],{"alt":27,"src":95397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95399,95400],{},[25,95401],{"alt":27,"src":95402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95404,95405],{},[25,95406],{"alt":27,"src":95407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95409,95410],{},[25,95411],{"alt":27,"src":95412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95414,95415],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95417,95418],{},[25,95419],{"alt":27,"src":95420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95422,95424],{"id":95423},"_22-随机数创建数组","2.2 随机数创建数组",[174,95426,95428],{"id":95427},"_221-random语句","2.2.1 random语句",[194,95430,95432],{"className":30436,"code":95431,"language":30438,"meta":27,"style":27},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[200,95433,95434,95439,95444,95452,95457],{"__ignoreMap":27},[203,95435,95436],{"class":205,"line":206},[203,95437,95438],{"class":272},"#random.random()\n",[203,95440,95441],{"class":205,"line":124},[203,95442,95443],{"class":272},"#确定随机种子,就是每次运行结果是相同的\n",[203,95445,95446,95448,95450],{"class":205,"line":1269},[203,95447,94665],{"class":213},[203,95449,405],{"class":262},[203,95451,220],{"class":213},[203,95453,95454],{"class":205,"line":1284},[203,95455,95456],{"class":213},"np.random.random()\n",[203,95458,95459],{"class":205,"line":1290},[203,95460,95461],{"class":272},"#生成一个随机的数目\n",[19,95463,95464],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95466,95467],{},"可以指定数组形状 size",[19,95469,95470],{},"①生成一维数组",[194,95472,95474],{"className":30436,"code":95473,"language":30438,"meta":27,"style":27},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[200,95475,95476,95481,95494,95499,95515],{"__ignoreMap":27},[203,95477,95478],{"class":205,"line":206},[203,95479,95480],{"class":272},"#random.random(size())\n",[203,95482,95483,95486,95488,95490,95492],{"class":205,"line":124},[203,95484,95485],{"class":213},"np.random.random(",[203,95487,31554],{"class":5306},[203,95489,259],{"class":209},[203,95491,533],{"class":262},[203,95493,220],{"class":213},[203,95495,95496],{"class":205,"line":1269},[203,95497,95498],{"class":272},"#生成一位的五个元素\n",[203,95500,95501,95503,95505,95507,95509,95511,95513],{"class":205,"line":1284},[203,95502,452],{"class":213},[203,95504,259],{"class":209},[203,95506,95485],{"class":213},[203,95508,31554],{"class":5306},[203,95510,259],{"class":209},[203,95512,507],{"class":262},[203,95514,220],{"class":213},[203,95516,95517,95520],{"class":205,"line":1290},[203,95518,95519],{"class":213},"a.shape ",[203,95521,95522],{"class":272},"#输出数组形状\n",[19,95524,95525],{},"②生成二维数组",[194,95527,95529],{"className":30436,"code":95528,"language":30438,"meta":27,"style":27},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[200,95530,95531,95535,95557],{"__ignoreMap":27},[203,95532,95533],{"class":205,"line":206},[203,95534,93359],{"class":272},[203,95536,95537,95539,95541,95543,95545,95547,95549,95551,95553,95555],{"class":205,"line":124},[203,95538,93364],{"class":213},[203,95540,259],{"class":209},[203,95542,95485],{"class":213},[203,95544,31554],{"class":5306},[203,95546,259],{"class":209},[203,95548,214],{"class":213},[203,95550,507],{"class":262},[203,95552,592],{"class":213},[203,95554,533],{"class":262},[203,95556,30555],{"class":213},[203,95558,95559],{"class":205,"line":1269},[203,95560,95561],{"class":272},"#生成四行五列的数组\n",[19,95563,95564],{},"③生成三维数组",[194,95566,95568],{"className":30436,"code":95567,"language":30438,"meta":27,"style":27},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[200,95569,95570,95575,95602],{"__ignoreMap":27},[203,95571,95572],{"class":205,"line":206},[203,95573,95574],{"class":272},"#三维数组\n",[203,95576,95577,95580,95582,95584,95586,95588,95590,95592,95594,95596,95598,95600],{"class":205,"line":124},[203,95578,95579],{"class":213},"aaa",[203,95581,259],{"class":209},[203,95583,95485],{"class":213},[203,95585,31554],{"class":5306},[203,95587,259],{"class":209},[203,95589,214],{"class":213},[203,95591,291],{"class":262},[203,95593,592],{"class":213},[203,95595,285],{"class":262},[203,95597,592],{"class":213},[203,95599,507],{"class":262},[203,95601,30555],{"class":213},[203,95603,95604],{"class":205,"line":1269},[203,95605,95606],{"class":213},"aaa.shape\n",[174,95608,95610],{"id":95609},"_222-randint语句","2.2.2 randint语句",[194,95612,95614],{"className":30436,"code":95613,"language":30438,"meta":27,"style":27},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[200,95615,95616,95621],{"__ignoreMap":27},[203,95617,95618],{"class":205,"line":206},[203,95619,95620],{"class":272},"#生成随机的整数 random.randint(low,high,size)\n",[203,95622,95623,95625,95627,95629],{"class":205,"line":124},[203,95624,93172],{"class":213},[203,95626,533],{"class":262},[203,95628,13804],{"class":213},[203,95630,95631],{"class":272},"#0~5中的随机一个数\n",[19,95633,95470],{},[194,95635,95637],{"className":30436,"code":95636,"language":30438,"meta":27,"style":27},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[200,95638,95639,95644,95666],{"__ignoreMap":27},[203,95640,95641],{"class":205,"line":206},[203,95642,95643],{"class":272},"#一维\n",[203,95645,95646,95648,95650,95652,95654,95656,95658,95660,95662,95664],{"class":205,"line":124},[203,95647,93172],{"class":213},[203,95649,431],{"class":262},[203,95651,592],{"class":213},[203,95653,686],{"class":262},[203,95655,592],{"class":213},[203,95657,31554],{"class":5306},[203,95659,259],{"class":209},[203,95661,214],{"class":213},[203,95663,660],{"class":262},[203,95665,30555],{"class":213},[203,95667,95668],{"class":205,"line":1269},[203,95669,95670],{"class":272},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,95672,95525],{},[19,95674,95675],{},[25,95676],{"alt":27,"src":95677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,95679,95564],{},[19,95681,95682],{},[25,95683],{"alt":27,"src":95684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[174,95686,95688],{"id":95687},"_222-rand语句","2.2.2 rand语句",[19,95690,95691],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[194,95693,95695],{"className":30436,"code":95694,"language":30438,"meta":27,"style":27},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[200,95696,95697,95710,95715],{"__ignoreMap":27},[203,95698,95699,95702,95704,95706,95708],{"class":205,"line":206},[203,95700,95701],{"class":213},"np.random.rand(",[203,95703,525],{"class":262},[203,95705,592],{"class":213},[203,95707,660],{"class":262},[203,95709,220],{"class":213},[203,95711,95712],{"class":205,"line":124},[203,95713,95714],{"class":272},"#第一个参数100：行数，表示有100个样本\n",[203,95716,95717],{"class":205,"line":1269},[203,95718,95719],{"class":272},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,95721,95723],{"id":95722},"_23-arange创建数组","2.3 arange()创建数组",[174,95725,95727],{"id":95726},"_231-函数语句","2.3.1 函数语句",[194,95729,95731],{"className":30436,"code":95730,"language":30438,"meta":27,"style":27},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[200,95732,95733,95747,95752,95757,95762,95767,95772,95777],{"__ignoreMap":27},[203,95734,95735,95738,95740,95742,95745],{"class":205,"line":206},[203,95736,95737],{"class":213},"numpy.arange([start,] stop[, step], ",[203,95739,93558],{"class":5306},[203,95741,259],{"class":209},[203,95743,95744],{"class":262},"None",[203,95746,220],{"class":213},[203,95748,95749],{"class":205,"line":124},[203,95750,95751],{"class":272},"#参数\n",[203,95753,95754],{"class":205,"line":1269},[203,95755,95756],{"class":318},"\"\"\"\n",[203,95758,95759],{"class":205,"line":1284},[203,95760,95761],{"class":318},"start:起始值，可选，默认从 0 开始。\n",[203,95763,95764],{"class":205,"line":1290},[203,95765,95766],{"class":318},"stop:结束值（不包含该值）。\n",[203,95768,95769],{"class":205,"line":1304},[203,95770,95771],{"class":318},"step:步长，可选，默认是 1。可以为浮点数。\n",[203,95773,95774],{"class":205,"line":1310},[203,95775,95776],{"class":318},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[203,95778,95779],{"class":205,"line":1401},[203,95780,95756],{"class":318},[174,95782,95784],{"id":95783},"_232-实例","2.3.2 实例",[194,95786,95788],{"className":30436,"code":95787,"language":30438,"meta":27,"style":27},"#创建一维数组\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",[200,95789,95790,95794,95818,95823,95828,95832,95855,95859,95863,95868,95873],{"__ignoreMap":27},[203,95791,95792],{"class":205,"line":206},[203,95793,93163],{"class":272},[203,95795,95796,95798,95800,95802,95804,95806,95808,95810,95812,95814,95816],{"class":205,"line":124},[203,95797,93060],{"class":213},[203,95799,431],{"class":262},[203,95801,592],{"class":213},[203,95803,939],{"class":262},[203,95805,592],{"class":213},[203,95807,431],{"class":262},[203,95809,592],{"class":213},[203,95811,93558],{"class":5306},[203,95813,259],{"class":209},[203,95815,217],{"class":262},[203,95817,220],{"class":213},[203,95819,95820],{"class":205,"line":1269},[203,95821,95822],{"class":272},"#输出结果：\n",[203,95824,95825],{"class":205,"line":1284},[203,95826,95827],{"class":272},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[203,95829,95830],{"class":205,"line":1290},[203,95831,94005],{"class":272},[203,95833,95834,95837,95839,95841,95843,95846,95848,95850,95852],{"class":205,"line":1304},[203,95835,95836],{"class":213},"np.array([np.arange(",[203,95838,431],{"class":262},[203,95840,592],{"class":213},[203,95842,507],{"class":262},[203,95844,95845],{"class":213},"),np.arange(",[203,95847,507],{"class":262},[203,95849,592],{"class":213},[203,95851,583],{"class":262},[203,95853,95854],{"class":213},")])\n",[203,95856,95857],{"class":205,"line":1310},[203,95858,93622],{"class":272},[203,95860,95861],{"class":205,"line":1401},[203,95862,95756],{"class":318},[203,95864,95865],{"class":205,"line":1407},[203,95866,95867],{"class":318},"array([[1, 2, 3],\n",[203,95869,95870],{"class":205,"line":1419},[203,95871,95872],{"class":318},"       [4, 5, 6]])\n",[203,95874,95875],{"class":205,"line":1701},[203,95876,95756],{"class":318},[14,95878,95880],{"id":95879},"_24-生态分布","2.4 生态分布",[174,95882,95884],{"id":95883},"_241-标准正态分布","2.4.1 标准正态分布",[19,95886,95887],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,95889,95890],{},[25,95891],{"alt":27,"src":95892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[174,95894,95896],{"id":95895},"_242-常规正态分布","2.4.2 常规正态分布",[194,95898,95900],{"className":30436,"code":95899,"language":30438,"meta":27,"style":27},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[200,95901,95902,95907,95912,95917],{"__ignoreMap":27},[203,95903,95904],{"class":205,"line":206},[203,95905,95906],{"class":213},"random.normal(loc,scale,size)也可以生成正态分布\n",[203,95908,95909],{"class":205,"line":124},[203,95910,95911],{"class":272},"#loc:期望\n",[203,95913,95914],{"class":205,"line":1269},[203,95915,95916],{"class":272},"#scale:方差\n",[203,95918,95919],{"class":205,"line":1284},[203,95920,95921],{"class":272},"#size:用于确定是几维的数列\n",[19,95923,95924],{},[25,95925],{"alt":27,"src":95926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,95928,95930],{"id":95929},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,95932,95933],{},"ndim:秩，维度个数",[19,95935,95936],{},"size:数组元素的个数",[19,95938,95939],{},"shape:数组的形状",[19,95941,95942],{},"dtype:数组元素的类型",[19,95944,95945],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,95947,95948],{},"他们都是属性，通过数组.属性的形式来确定",[19,95950,95951],{},"如果需要输出多个可以通过以下方式：",[194,95953,95955],{"className":30436,"code":95954,"language":30438,"meta":27,"style":27},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[200,95956,95957],{"__ignoreMap":27},[203,95958,95959,95961],{"class":205,"line":206},[203,95960,30473],{"class":262},[203,95962,95963],{"class":213},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,95965,95967],{"id":95966},"_26-其他方式创建数组","2.6 其他方式创建数组",[174,95969,95971],{"id":95970},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,95973,95974],{},"①创建一维数组",[194,95976,95978],{"className":30436,"code":95977,"language":30438,"meta":27,"style":27},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[200,95979,95980,95989,95993,95998,96003],{"__ignoreMap":27},[203,95981,95982,95985,95987],{"class":205,"line":206},[203,95983,95984],{"class":213},"np.zeros(",[203,95986,660],{"class":262},[203,95988,220],{"class":213},[203,95990,95991],{"class":205,"line":124},[203,95992,95756],{"class":318},[203,95994,95995],{"class":205,"line":1269},[203,95996,95997],{"class":318},"输出结果：\n",[203,95999,96000],{"class":205,"line":1284},[203,96001,96002],{"class":318},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[203,96004,96005],{"class":205,"line":1290},[203,96006,95756],{"class":318},[19,96008,96009],{},"上方代码等价于：",[194,96011,96013],{"className":30436,"code":96012,"language":30438,"meta":27,"style":27},"np.zeros(shape=(10))#创建10个元素的0数组\n",[200,96014,96015],{"__ignoreMap":27},[203,96016,96017,96019,96022,96024,96026,96028,96030],{"class":205,"line":206},[203,96018,95984],{"class":213},[203,96020,96021],{"class":5306},"shape",[203,96023,259],{"class":209},[203,96025,214],{"class":213},[203,96027,660],{"class":262},[203,96029,82829],{"class":213},[203,96031,96032],{"class":272},"#创建10个元素的0数组\n",[19,96034,96035],{},"也可以指定类型",[194,96037,96039],{"className":30436,"code":96038,"language":30438,"meta":27,"style":27},"#指定类型\nnp.zeros(5,dtype=int)\n",[200,96040,96041,96046],{"__ignoreMap":27},[203,96042,96043],{"class":205,"line":206},[203,96044,96045],{"class":272},"#指定类型\n",[203,96047,96048,96050,96052,96054,96056,96058,96060],{"class":205,"line":124},[203,96049,95984],{"class":213},[203,96051,533],{"class":262},[203,96053,592],{"class":213},[203,96055,93558],{"class":5306},[203,96057,259],{"class":209},[203,96059,217],{"class":262},[203,96061,220],{"class":213},[19,96063,96064],{},"②创建二维数组",[194,96066,96068],{"className":30436,"code":96067,"language":30438,"meta":27,"style":27},"np.zeros((3,4),dtype=int)\n",[200,96069,96070],{"__ignoreMap":27},[203,96071,96072,96075,96077,96079,96081,96083,96085,96087,96089],{"class":205,"line":206},[203,96073,96074],{"class":213},"np.zeros((",[203,96076,285],{"class":262},[203,96078,592],{"class":213},[203,96080,507],{"class":262},[203,96082,42314],{"class":213},[203,96084,93558],{"class":5306},[203,96086,259],{"class":209},[203,96088,217],{"class":262},[203,96090,220],{"class":213},[19,96092,96093],{},"③创建三维数组",[194,96095,96097],{"className":30436,"code":96096,"language":30438,"meta":27,"style":27},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[200,96098,96099,96104],{"__ignoreMap":27},[203,96100,96101],{"class":205,"line":206},[203,96102,96103],{"class":272},"#创建三维数组\n",[203,96105,96106,96108,96110,96112,96114,96116,96118,96120,96122,96124,96126],{"class":205,"line":124},[203,96107,96074],{"class":213},[203,96109,285],{"class":262},[203,96111,592],{"class":213},[203,96113,507],{"class":262},[203,96115,592],{"class":213},[203,96117,533],{"class":262},[203,96119,42314],{"class":213},[203,96121,93558],{"class":5306},[203,96123,259],{"class":209},[203,96125,217],{"class":262},[203,96127,220],{"class":213},[19,96129,96130],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[194,96132,96134],{"className":30436,"code":96133,"language":30438,"meta":27,"style":27},"#使用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",[200,96135,96136,96141,96156,96161,96166,96188],{"__ignoreMap":27},[203,96137,96138],{"class":205,"line":206},[203,96139,96140],{"class":272},"#使用zeros_like将创建的一维数组变成全0的数组\n",[203,96142,96143,96145,96147,96149,96151,96153],{"class":205,"line":124},[203,96144,452],{"class":213},[203,96146,259],{"class":209},[203,96148,93060],{"class":213},[203,96150,507],{"class":262},[203,96152,643],{"class":213},[203,96154,96155],{"class":272},"#这个得到的结果：一维数组0，1，2，3\n",[203,96157,96158],{"class":205,"line":1269},[203,96159,96160],{"class":213},"np.zeros_like(a)\n",[203,96162,96163],{"class":205,"line":1284},[203,96164,96165],{"class":272},"#使用zeros_like将创建的二维数组变成全0的数组\n",[203,96167,96168,96170,96172,96174,96176,96178,96180,96182,96184,96186],{"class":205,"line":1290},[203,96169,93364],{"class":213},[203,96171,259],{"class":209},[203,96173,95485],{"class":213},[203,96175,31554],{"class":5306},[203,96177,259],{"class":209},[203,96179,214],{"class":213},[203,96181,507],{"class":262},[203,96183,592],{"class":213},[203,96185,533],{"class":262},[203,96187,30555],{"class":213},[203,96189,96190],{"class":205,"line":1304},[203,96191,96192],{"class":213},"np.zeros_like(aa)\n",[174,96194,96196],{"id":96195},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96198,96199],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[174,96201,96203],{"id":96202},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96205,96206],{},"①empty()用法",[194,96208,96210],{"className":30436,"code":96209,"language":30438,"meta":27,"style":27},"numpy.empty(shape,dtype=float,order='c')\n",[200,96211,96212],{"__ignoreMap":27},[203,96213,96214,96217,96219,96221,96223,96225,96227,96229,96231],{"class":205,"line":206},[203,96215,96216],{"class":213},"numpy.empty(shape,",[203,96218,93558],{"class":5306},[203,96220,259],{"class":209},[203,96222,253],{"class":262},[203,96224,592],{"class":213},[203,96226,95355],{"class":5306},[203,96228,259],{"class":209},[203,96230,76086],{"class":318},[203,96232,220],{"class":213},[19,96234,96235],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96237,96238],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96240,96241],{},[25,96242],{"alt":27,"src":96243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96245,96246],{},"②empty()用法",[194,96248,96250],{"className":30436,"code":96249,"language":30438,"meta":27,"style":27},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[200,96251,96252,96273,96285,96306,96311],{"__ignoreMap":27},[203,96253,96254,96256,96258,96261,96263,96265,96267,96269,96271],{"class":205,"line":206},[203,96255,1059],{"class":213},[203,96257,259],{"class":209},[203,96259,96260],{"class":213},"np.empty(",[203,96262,660],{"class":262},[203,96264,592],{"class":213},[203,96266,93558],{"class":5306},[203,96268,259],{"class":209},[203,96270,217],{"class":262},[203,96272,220],{"class":213},[203,96274,96275,96277,96279,96281,96283],{"class":205,"line":124},[203,96276,1034],{"class":213},[203,96278,259],{"class":209},[203,96280,93060],{"class":213},[203,96282,533],{"class":262},[203,96284,220],{"class":213},[203,96286,96287,96290,96292,96295,96297,96299,96302,96304],{"class":205,"line":1269},[203,96288,96289],{"class":213},"np.add(",[203,96291,291],{"class":262},[203,96293,96294],{"class":213},",x,",[203,96296,93112],{"class":5306},[203,96298,259],{"class":209},[203,96300,96301],{"class":213},"y[:",[203,96303,533],{"class":262},[203,96305,4746],{"class":213},[203,96307,96308],{"class":205,"line":1284},[203,96309,96310],{"class":272},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[203,96312,96313],{"class":205,"line":1290},[203,96314,96315],{"class":213},"y\n",[19,96317,11604],{},[19,96319,96320],{},[25,96321],{"alt":27,"src":96322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[194,96324,96326],{"className":30436,"code":96325,"language":30438,"meta":27,"style":27},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[200,96327,96328,96344,96364,96379],{"__ignoreMap":27},[203,96329,96330,96332,96334,96336,96338,96340,96342],{"class":205,"line":206},[203,96331,1034],{"class":213},[203,96333,259],{"class":209},[203,96335,93060],{"class":213},[203,96337,431],{"class":262},[203,96339,592],{"class":213},[203,96341,558],{"class":262},[203,96343,220],{"class":213},[203,96345,96346,96348,96350,96352,96354,96356,96358,96360,96362],{"class":205,"line":124},[203,96347,1059],{"class":213},[203,96349,259],{"class":209},[203,96351,96260],{"class":213},[203,96353,533],{"class":262},[203,96355,592],{"class":213},[203,96357,93558],{"class":5306},[203,96359,259],{"class":209},[203,96361,217],{"class":262},[203,96363,220],{"class":213},[203,96365,96366,96369,96371,96373,96375,96377],{"class":205,"line":1269},[203,96367,96368],{"class":213},"np.add(x,",[203,96370,291],{"class":262},[203,96372,592],{"class":213},[203,96374,93112],{"class":5306},[203,96376,259],{"class":209},[203,96378,93507],{"class":213},[203,96380,96381],{"class":205,"line":1284},[203,96382,96383],{"class":272},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96385,96386],{},"③empty_like()",[19,96388,96389],{},[363,96390,96391,96392,96397],{},"创建一个",[363,96393,96394],{},[363,96395,96396],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96399,96400,96403],{},[200,96401,96402],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96405,96406],{},[25,96407],{"alt":27,"src":96408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[174,96410,96412],{"id":96411},"_264-用法","2.6.4 ？？用法",[19,96414,96415],{},"当想查看一个函数的参数时，可以通过？？来实现",[194,96417,96419],{"className":30436,"code":96418,"language":30438,"meta":27,"style":27},"np.full??\n",[200,96420,96421],{"__ignoreMap":27},[203,96422,96423,96426],{"class":205,"line":206},[203,96424,96425],{"class":213},"np.full",[203,96427,96428],{"class":77461},"??\n",[174,96430,96432],{"id":96431},"_265-full创建数组","2.6.5 full()创建数组",[194,96434,96436],{"className":30436,"code":96435,"language":30438,"meta":27,"style":27},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[200,96437,96438,96443],{"__ignoreMap":27},[203,96439,96440],{"class":205,"line":206},[203,96441,96442],{"class":213},"full(shape,fill_value)\n",[203,96444,96445],{"class":205,"line":124},[203,96446,96447],{"class":213},"创建全为某个指定值的数组\n",[19,96449,94588],{},[194,96451,96453],{"className":30436,"code":96452,"language":30438,"meta":27,"style":27},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[200,96454,96455,96460],{"__ignoreMap":27},[203,96456,96457],{"class":205,"line":206},[203,96458,96459],{"class":272},"#创建一个一维数组,以20进行填充\n",[203,96461,96462,96465,96467,96469,96471],{"class":205,"line":124},[203,96463,96464],{"class":213},"np.full(",[203,96466,660],{"class":262},[203,96468,592],{"class":213},[203,96470,914],{"class":262},[203,96472,220],{"class":213},[19,96474,93349],{},[194,96476,96478],{"className":30436,"code":96477,"language":30438,"meta":27,"style":27},"#创建二维数组\nnp.full((3,5),11)\n",[200,96479,96480,96484],{"__ignoreMap":27},[203,96481,96482],{"class":205,"line":206},[203,96483,94005],{"class":272},[203,96485,96486,96489,96491,96493,96495,96497,96499],{"class":205,"line":124},[203,96487,96488],{"class":213},"np.full((",[203,96490,285],{"class":262},[203,96492,592],{"class":213},[203,96494,533],{"class":262},[203,96496,42314],{"class":213},[203,96498,686],{"class":262},[203,96500,220],{"class":213},[19,96502,96503],{},"③full_like用法",[19,96505,96506],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96508,96509],{},"这里是指定填充而已",[194,96511,96513],{"className":30436,"code":96512,"language":30438,"meta":27,"style":27},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[200,96514,96515,96520,96544,96549],{"__ignoreMap":27},[203,96516,96517],{"class":205,"line":206},[203,96518,96519],{"class":272},"#创建一个指定形状数组\n",[203,96521,96522,96524,96526,96528,96530,96532,96534,96536,96538,96540,96542],{"class":205,"line":124},[203,96523,452],{"class":213},[203,96525,259],{"class":209},[203,96527,93060],{"class":213},[203,96529,431],{"class":262},[203,96531,592],{"class":213},[203,96533,539],{"class":262},[203,96535,93065],{"class":213},[203,96537,507],{"class":262},[203,96539,592],{"class":213},[203,96541,634],{"class":262},[203,96543,220],{"class":213},[203,96545,96546],{"class":205,"line":1269},[203,96547,96548],{"class":272},"#进行指定填充\n",[203,96550,96551,96554,96556],{"class":205,"line":1284},[203,96552,96553],{"class":213},"np.full_like(a,",[203,96555,660],{"class":262},[203,96557,220],{"class":213},[19,96559,11604],{},[19,96561,96562],{},[25,96563],{"alt":27,"src":96564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[174,96566,96568],{"id":96567},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22088,96570,96572],{"id":96571},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[194,96574,96576],{"className":30436,"code":96575,"language":30438,"meta":27,"style":27},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[200,96577,96578,96595],{"__ignoreMap":27},[203,96579,96580,96583,96585,96587,96589,96591,96593],{"class":205,"line":206},[203,96581,96582],{"class":213},"np.eye(",[203,96584,507],{"class":262},[203,96586,592],{"class":213},[203,96588,93558],{"class":5306},[203,96590,259],{"class":209},[203,96592,217],{"class":262},[203,96594,220],{"class":213},[203,96596,96597],{"class":205,"line":124},[203,96598,96599],{"class":272},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22088,96601,96603],{"id":96602},"_2662-法2identity","2.6.6.2 法2：identity()",[194,96605,96607],{"className":30436,"code":96606,"language":30438,"meta":27,"style":27},"#identity()\nnp.identity(5,dtype=int)\n",[200,96608,96609,96614],{"__ignoreMap":27},[203,96610,96611],{"class":205,"line":206},[203,96612,96613],{"class":272},"#identity()\n",[203,96615,96616,96619,96621,96623,96625,96627,96629],{"class":205,"line":124},[203,96617,96618],{"class":213},"np.identity(",[203,96620,533],{"class":262},[203,96622,592],{"class":213},[203,96624,93558],{"class":5306},[203,96626,259],{"class":209},[203,96628,217],{"class":262},[203,96630,220],{"class":213},[19,96632,96633],{},"两个函数是有区别的",[19,96635,96636],{},[25,96637],{"alt":27,"src":96638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,96640,96641],{},[25,96642],{"alt":27,"src":96643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[194,96645,96647],{"className":30436,"code":96646,"language":30438,"meta":27,"style":27},"# 创建一个 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",[200,96648,96649,96654,96666,96671,96676,96681,96686,96690,96695,96715,96719,96724,96729],{"__ignoreMap":27},[203,96650,96651],{"class":205,"line":206},[203,96652,96653],{"class":272},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[203,96655,96656,96658,96660,96662,96664],{"class":205,"line":124},[203,96657,96582],{"class":213},[203,96659,285],{"class":262},[203,96661,12525],{"class":213},[203,96663,507],{"class":262},[203,96665,220],{"class":213},[203,96667,96668],{"class":205,"line":1269},[203,96669,96670],{"class":272},"# 输出:\n",[203,96672,96673],{"class":205,"line":1284},[203,96674,96675],{"class":272},"# [[1. 0. 0. 0.]\n",[203,96677,96678],{"class":205,"line":1290},[203,96679,96680],{"class":272},"#  [0. 1. 0. 0.]\n",[203,96682,96683],{"class":205,"line":1304},[203,96684,96685],{"class":272},"#  [0. 0. 1. 0.]]\n",[203,96687,96688],{"class":205,"line":1310},[203,96689,2489],{"emptyLinePlaceholder":131},[203,96691,96692],{"class":205,"line":1401},[203,96693,96694],{"class":272},"# 对角线向上偏移1\n",[203,96696,96697,96699,96701,96703,96705,96707,96709,96711,96713],{"class":205,"line":1407},[203,96698,96582],{"class":213},[203,96700,285],{"class":262},[203,96702,12525],{"class":213},[203,96704,507],{"class":262},[203,96706,12525],{"class":213},[203,96708,707],{"class":5306},[203,96710,259],{"class":209},[203,96712,431],{"class":262},[203,96714,220],{"class":213},[203,96716,96717],{"class":205,"line":1419},[203,96718,96670],{"class":272},[203,96720,96721],{"class":205,"line":1701},[203,96722,96723],{"class":272},"# [[0. 1. 0. 0.]\n",[203,96725,96726],{"class":205,"line":1706},[203,96727,96728],{"class":272},"#  [0. 0. 1. 0.]\n",[203,96730,96731],{"class":205,"line":1712},[203,96732,96733],{"class":272},"#  [0. 0. 0. 1.]]\n",[174,96735,96737],{"id":96736},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[194,96739,96741],{"className":30436,"code":96740,"language":30438,"meta":27,"style":27},"#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",[200,96742,96743,96748,96752,96757,96762,96767,96772,96777,96782,96787,96792],{"__ignoreMap":27},[203,96744,96745],{"class":205,"line":206},[203,96746,96747],{"class":272},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[203,96749,96750],{"class":205,"line":124},[203,96751,95756],{"class":318},[203,96753,96754],{"class":205,"line":1269},[203,96755,96756],{"class":318},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[203,96758,96759],{"class":205,"line":1284},[203,96760,96761],{"class":318},"参数介绍：\n",[203,96763,96764],{"class":205,"line":1290},[203,96765,96766],{"class":318},"start：序列的起始值\n",[203,96768,96769],{"class":205,"line":1304},[203,96770,96771],{"class":318},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[203,96773,96774],{"class":205,"line":1310},[203,96775,96776],{"class":318},"num：要生长的等步长的样本数量，默认为50\n",[203,96778,96779],{"class":205,"line":1401},[203,96780,96781],{"class":318},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[203,96783,96784],{"class":205,"line":1407},[203,96785,96786],{"class":318},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[203,96788,96789],{"class":205,"line":1419},[203,96790,96791],{"class":318},"dtype：ndarry的数据类型\n",[203,96793,96794],{"class":205,"line":1701},[203,96795,95756],{"class":318},[19,96797,96798],{},[25,96799],{"alt":27,"src":96800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,96802,96803],{},"这里num=是可以省略的",[19,96805,96806],{},"也就是下方两行代码结果是一模一样的",[194,96808,96810],{"className":30436,"code":96809,"language":30438,"meta":27,"style":27},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[200,96811,96812,96829],{"__ignoreMap":27},[203,96813,96814,96817,96819,96821,96823,96825,96827],{"class":205,"line":206},[203,96815,96816],{"class":213},"np.linspace(",[203,96818,431],{"class":262},[203,96820,592],{"class":213},[203,96822,533],{"class":262},[203,96824,592],{"class":213},[203,96826,533],{"class":262},[203,96828,220],{"class":213},[203,96830,96831,96833,96835,96837,96839,96841,96843,96845,96847],{"class":205,"line":124},[203,96832,96816],{"class":213},[203,96834,431],{"class":262},[203,96836,592],{"class":213},[203,96838,533],{"class":262},[203,96840,592],{"class":213},[203,96842,1754],{"class":5306},[203,96844,259],{"class":209},[203,96846,533],{"class":262},[203,96848,220],{"class":213},[174,96850,96852],{"id":96851},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[194,96854,96856],{"className":30436,"code":96855,"language":30438,"meta":27,"style":27},"#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",[200,96857,96858,96863,96867,96872,96877,96882,96887,96891,96896,96901,96905],{"__ignoreMap":27},[203,96859,96860],{"class":205,"line":206},[203,96861,96862],{"class":272},"#logspace函数用于创建一个等比数列，格式如下：\n",[203,96864,96865],{"class":205,"line":124},[203,96866,95756],{"class":318},[203,96868,96869],{"class":205,"line":1269},[203,96870,96871],{"class":318},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[203,96873,96874],{"class":205,"line":1284},[203,96875,96876],{"class":318},"参数为：\n",[203,96878,96879],{"class":205,"line":1290},[203,96880,96881],{"class":318},"start:序列的起始位置为：base**start\n",[203,96883,96884],{"class":205,"line":1304},[203,96885,96886],{"class":318},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[203,96888,96889],{"class":205,"line":1310},[203,96890,96776],{"class":318},[203,96892,96893],{"class":205,"line":1401},[203,96894,96895],{"class":318},"endpoint：是否包含 stop 这个值，默认是 True\n",[203,96897,96898],{"class":205,"line":1407},[203,96899,96900],{"class":318},"base：对数的底数，默认是 10（常见对数）\n",[203,96902,96903],{"class":205,"line":1419},[203,96904,96791],{"class":318},[203,96906,96907],{"class":205,"line":1701},[203,96908,95756],{"class":318},[19,96910,96911],{},[25,96912],{"alt":27,"src":96913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,96915,96916],{},"logspace()函数中的num参数也是可以不写num=的",[19,96918,96919],{},"endpoint是不可以省略的",[5216,96921,96922],{},"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":27,"searchDepth":124,"depth":124,"links":96924},[96925,96929,96934,96938,96942,96943],{"id":95314,"depth":124,"text":95315,"children":96926},[96927,96928],{"id":95318,"depth":1269,"text":95319},{"id":95391,"depth":1269,"text":95392},{"id":95423,"depth":124,"text":95424,"children":96930},[96931,96932,96933],{"id":95427,"depth":1269,"text":95428},{"id":95609,"depth":1269,"text":95610},{"id":95687,"depth":1269,"text":95688},{"id":95722,"depth":124,"text":95723,"children":96935},[96936,96937],{"id":95726,"depth":1269,"text":95727},{"id":95783,"depth":1269,"text":95784},{"id":95879,"depth":124,"text":95880,"children":96939},[96940,96941],{"id":95883,"depth":1269,"text":95884},{"id":95895,"depth":1269,"text":95896},{"id":95929,"depth":124,"text":95930},{"id":95966,"depth":124,"text":95967,"children":96944},[96945,96946,96947,96948,96949,96950,96951,96952],{"id":95970,"depth":1269,"text":95971},{"id":96195,"depth":1269,"text":96196},{"id":96202,"depth":1269,"text":96203},{"id":96411,"depth":1269,"text":96412},{"id":96431,"depth":1269,"text":96432},{"id":96567,"depth":1269,"text":96568},{"id":96736,"depth":1269,"text":96737},{"id":96851,"depth":1269,"text":96852},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95306,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96959,"title":96960,"body":96961,"description":23467,"extension":129,"meta":97054,"navigation":131,"path":97055,"seo":97056,"stem":97057,"__hash__":97058},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96962,"toc":97052},[96963,96966,96969,96972,96975,96978,96981,96984,96987,96990,96993,96996,96998,97001,97004,97009,97012,97015,97049],[10,96964,96960],{"id":96965},"_20魔法命令mprun",[19,96967,96968],{},"逐行分析数据内存的使用情况",[19,96970,96971],{},"语法格式：",[19,96973,96974],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,96976,96977],{},"分析结果列如下：",[19,96979,96980],{},"Line行号",[19,96982,96983],{},"Mem usage内存使用大小",[19,96985,96986],{},"increment内存增量",[19,96988,96989],{},"Line content代码内容",[19,96991,96992],{},"补充说明：",[19,96994,96995],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,96997,95261],{},[19,96999,97000],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97002,97003],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97005,97006],{},[25,97007],{"alt":27,"src":97008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97010,97011],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97013,97014],{},"这时候需要重新加载模块",[194,97016,97018],{"className":30436,"code":97017,"language":30438,"meta":27,"style":27},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[200,97019,97020,97025,97032,97037],{"__ignoreMap":27},[203,97021,97022],{"class":205,"line":206},[203,97023,97024],{"class":272},"#重新加载模块\n",[203,97026,97027,97029],{"class":205,"line":124},[203,97028,30450],{"class":209},[203,97030,97031],{"class":213}," importlib\n",[203,97033,97034],{"class":205,"line":1269},[203,97035,97036],{"class":213},"importlib.reload(mprun_test)\n",[203,97038,97039,97041,97044,97046],{"class":205,"line":1284},[203,97040,542],{"class":209},[203,97042,97043],{"class":213},"mprun ",[203,97045,746],{"class":209},[203,97047,97048],{"class":213},"f mprun_test.fun_test mprun_test.fun_test()\n",[5216,97050,97051],{},"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":27,"searchDepth":124,"depth":124,"links":97053},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96960,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97060,"title":97061,"body":97062,"description":23467,"extension":129,"meta":97079,"navigation":131,"path":97080,"seo":97081,"stem":97082,"__hash__":97083},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97063,"toc":97077},[97064,97067,97072],[10,97065,97061],{"id":97066},"_3一维数组的索引和切片",[19,97068,97069],{},[25,97070],{"alt":27,"src":97071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97073,97074],{},[25,97075],{"alt":27,"src":97076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":27,"searchDepth":124,"depth":124,"links":97078},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97061,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97085,"title":97086,"body":97087,"description":23467,"extension":129,"meta":97570,"navigation":131,"path":97571,"seo":97572,"stem":97573,"__hash__":97574},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97088,"toc":97568},[97089,97092,97095,97100,97133,97136,97174,97177,97211,97214,97319,97322,97359,97362,97463,97466,97517,97520,97562,97565],[10,97090,97086],{"id":97091},"_4二维数组的索引与切片",[19,97093,97094],{},"①获取指定单个元素",[19,97096,97097],{},[25,97098],{"alt":27,"src":97099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[194,97101,97103],{"className":30436,"code":97102,"language":30438,"meta":27,"style":27},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[200,97104,97105,97110,97115,97120],{"__ignoreMap":27},[203,97106,97107],{"class":205,"line":206},[203,97108,97109],{"class":272},"#获取元素9\n",[203,97111,97112],{"class":205,"line":124},[203,97113,97114],{"class":272},"#先获取所在行，再获取所在列\n",[203,97116,97117],{"class":205,"line":1269},[203,97118,97119],{"class":272},"#数组[行索引号，列索引号]\n",[203,97121,97122,97125,97127,97129,97131],{"class":205,"line":1284},[203,97123,97124],{"class":213},"a[",[203,97126,431],{"class":262},[203,97128,592],{"class":213},[203,97130,291],{"class":262},[203,97132,33304],{"class":213},[19,97134,97135],{},"②获取整行元素",[194,97137,97139],{"className":30436,"code":97138,"language":30438,"meta":27,"style":27},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[200,97140,97141,97146,97151,97159,97164],{"__ignoreMap":27},[203,97142,97143],{"class":205,"line":206},[203,97144,97145],{"class":272},"#获取整行 数组[行索引号]\n",[203,97147,97148],{"class":205,"line":124},[203,97149,97150],{"class":272},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[203,97152,97153,97155,97157],{"class":205,"line":1269},[203,97154,97124],{"class":213},[203,97156,291],{"class":262},[203,97158,33304],{"class":213},[203,97160,97161],{"class":205,"line":1284},[203,97162,97163],{"class":272},"#也可以负索引获取一行\n",[203,97165,97166,97168,97170,97172],{"class":205,"line":1290},[203,97167,97124],{"class":213},[203,97169,746],{"class":209},[203,97171,431],{"class":262},[203,97173,33304],{"class":213},[19,97175,97176],{},"③获取整列元素",[194,97178,97180],{"className":30436,"code":97179,"language":30438,"meta":27,"style":27},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[200,97181,97182,97187,97196,97201],{"__ignoreMap":27},[203,97183,97184],{"class":205,"line":206},[203,97185,97186],{"class":272},"#获取整列 数组名[:,列索引]\n",[203,97188,97189,97192,97194],{"class":205,"line":124},[203,97190,97191],{"class":213},"a[:,",[203,97193,291],{"class":262},[203,97195,33304],{"class":213},[203,97197,97198],{"class":205,"line":1269},[203,97199,97200],{"class":272},"#也可以负索引获取一列\n",[203,97202,97203,97205,97207,97209],{"class":205,"line":1284},[203,97204,97191],{"class":213},[203,97206,746],{"class":209},[203,97208,431],{"class":262},[203,97210,33304],{"class":213},[19,97212,97213],{},"④部分行部分列的元素",[194,97215,97217],{"className":30436,"code":97216,"language":30438,"meta":27,"style":27},"#部分行部分列 数组名[行切片，列切片]\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",[200,97218,97219,97224,97234,97238,97242,97247,97252,97256,97268,97272,97276,97281,97286,97291,97296,97300,97305],{"__ignoreMap":27},[203,97220,97221],{"class":205,"line":206},[203,97222,97223],{"class":272},"#部分行部分列 数组名[行切片，列切片]\n",[203,97225,97226,97229,97231],{"class":205,"line":124},[203,97227,97228],{"class":213},"a[:",[203,97230,291],{"class":262},[203,97232,97233],{"class":213},",:]\n",[203,97235,97236],{"class":205,"line":1269},[203,97237,93622],{"class":272},[203,97239,97240],{"class":205,"line":1284},[203,97241,93986],{"class":318},[203,97243,97244],{"class":205,"line":1290},[203,97245,97246],{"class":318},"array([[ 1,  2,  3,  4,  5,  6],\n",[203,97248,97249],{"class":205,"line":1304},[203,97250,97251],{"class":318},"       [ 7,  8,  9, 10, 11, 12]])\n",[203,97253,97254],{"class":205,"line":1310},[203,97255,93986],{"class":318},[203,97257,97258,97260,97262,97264,97266],{"class":205,"line":1401},[203,97259,97191],{"class":213},[203,97261,431],{"class":262},[203,97263,1073],{"class":213},[203,97265,507],{"class":262},[203,97267,33304],{"class":213},[203,97269,97270],{"class":205,"line":1407},[203,97271,93622],{"class":272},[203,97273,97274],{"class":205,"line":1419},[203,97275,93986],{"class":318},[203,97277,97278],{"class":205,"line":1701},[203,97279,97280],{"class":318},"array([[ 2,  3,  4],\n",[203,97282,97283],{"class":205,"line":1706},[203,97284,97285],{"class":318},"       [ 8,  9, 10],\n",[203,97287,97288],{"class":205,"line":1712},[203,97289,97290],{"class":318},"       [14, 15, 16],\n",[203,97292,97293],{"class":205,"line":1717},[203,97294,97295],{"class":318},"       [20, 21, 22]])\n",[203,97297,97298],{"class":205,"line":1731},[203,97299,93986],{"class":318},[203,97301,97302],{"class":205,"line":1736},[203,97303,97304],{"class":272},"#对列行同时进行切片，使用了step参数\n",[203,97306,97307,97310,97312,97315,97317],{"class":205,"line":1742},[203,97308,97309],{"class":213},"a[::",[203,97311,291],{"class":262},[203,97313,97314],{"class":213},",::",[203,97316,291],{"class":262},[203,97318,33304],{"class":213},[19,97320,97321],{},"⑤同时获取两个元素",[194,97323,97325],{"className":30436,"code":97324,"language":30438,"meta":27,"style":27},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[200,97326,97327,97332,97337],{"__ignoreMap":27},[203,97328,97329],{"class":205,"line":206},[203,97330,97331],{"class":272},"#同时获取第三行第二列，第四行第一列\n",[203,97333,97334],{"class":205,"line":124},[203,97335,97336],{"class":272},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[203,97338,97339,97342,97344,97346,97348,97350,97352,97354,97356],{"class":205,"line":1269},[203,97340,97341],{"class":213},"a[(",[203,97343,291],{"class":262},[203,97345,592],{"class":213},[203,97347,285],{"class":262},[203,97349,42305],{"class":213},[203,97351,431],{"class":262},[203,97353,592],{"class":213},[203,97355,405],{"class":262},[203,97357,97358],{"class":213},")]\n",[19,97360,97361],{},"⑥切片，对行进行反向获取",[194,97363,97365],{"className":30436,"code":97364,"language":30438,"meta":27,"style":27},"#切片 对所有行进行反向获取\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",[200,97366,97367,97372,97382,97386,97390,97395,97400,97405,97410,97414,97419,97435,97439,97444,97449,97454,97459],{"__ignoreMap":27},[203,97368,97369],{"class":205,"line":206},[203,97370,97371],{"class":272},"#切片 对所有行进行反向获取\n",[203,97373,97374,97376,97378,97380],{"class":205,"line":124},[203,97375,97309],{"class":213},[203,97377,746],{"class":209},[203,97379,431],{"class":262},[203,97381,33304],{"class":213},[203,97383,97384],{"class":205,"line":1269},[203,97385,93622],{"class":272},[203,97387,97388],{"class":205,"line":1284},[203,97389,93986],{"class":318},[203,97391,97392],{"class":205,"line":1290},[203,97393,97394],{"class":318},"array([[19, 20, 21, 22, 23, 24],\n",[203,97396,97397],{"class":205,"line":1304},[203,97398,97399],{"class":318},"       [13, 14, 15, 16, 17, 18],\n",[203,97401,97402],{"class":205,"line":1310},[203,97403,97404],{"class":318},"       [ 7,  8,  9, 10, 11, 12],\n",[203,97406,97407],{"class":205,"line":1401},[203,97408,97409],{"class":318},"       [ 1,  2,  3,  4,  5,  6]])\n",[203,97411,97412],{"class":205,"line":1407},[203,97413,93986],{"class":318},[203,97415,97416],{"class":205,"line":1419},[203,97417,97418],{"class":272},"#对行列都进行反向切片获取\n",[203,97420,97421,97423,97425,97427,97429,97431,97433],{"class":205,"line":1701},[203,97422,97309],{"class":213},[203,97424,746],{"class":209},[203,97426,431],{"class":262},[203,97428,97314],{"class":213},[203,97430,746],{"class":209},[203,97432,431],{"class":262},[203,97434,33304],{"class":213},[203,97436,97437],{"class":205,"line":1706},[203,97438,93986],{"class":318},[203,97440,97441],{"class":205,"line":1712},[203,97442,97443],{"class":318},"array([[24, 23, 22, 21, 20, 19],\n",[203,97445,97446],{"class":205,"line":1717},[203,97447,97448],{"class":318},"       [18, 17, 16, 15, 14, 13],\n",[203,97450,97451],{"class":205,"line":1731},[203,97452,97453],{"class":318},"       [12, 11, 10,  9,  8,  7],\n",[203,97455,97456],{"class":205,"line":1736},[203,97457,97458],{"class":318},"       [ 6,  5,  4,  3,  2,  1]])\n",[203,97460,97461],{"class":205,"line":1742},[203,97462,93986],{"class":318},[19,97464,97465],{},"⑦修改元素",[194,97467,97469],{"className":30436,"code":97468,"language":30438,"meta":27,"style":27},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[200,97470,97471,97476,97494,97499],{"__ignoreMap":27},[203,97472,97473],{"class":205,"line":206},[203,97474,97475],{"class":272},"#获取前两行和前两列\n",[203,97477,97478,97481,97483,97485,97487,97490,97492],{"class":205,"line":124},[203,97479,97480],{"class":213},"sub_a",[203,97482,259],{"class":209},[203,97484,97228],{"class":213},[203,97486,291],{"class":262},[203,97488,97489],{"class":213},",:",[203,97491,291],{"class":262},[203,97493,33304],{"class":213},[203,97495,97496],{"class":205,"line":1269},[203,97497,97498],{"class":272},"#修改sub_a第一个元素的值\n",[203,97500,97501,97504,97506,97508,97510,97512,97514],{"class":205,"line":1284},[203,97502,97503],{"class":213},"sub_a[",[203,97505,405],{"class":262},[203,97507,592],{"class":213},[203,97509,405],{"class":262},[203,97511,1154],{"class":213},[203,97513,259],{"class":209},[203,97515,97516],{"class":262},"100\n",[19,97518,97519],{},"⑧数组复制copy()",[194,97521,97523],{"className":30436,"code":97522,"language":30438,"meta":27,"style":27},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[200,97524,97525,97530,97540,97545],{"__ignoreMap":27},[203,97526,97527],{"class":205,"line":206},[203,97528,97529],{"class":272},"#数组复制\n",[203,97531,97532,97535,97537],{"class":205,"line":124},[203,97533,97534],{"class":213},"copy_a",[203,97536,259],{"class":209},[203,97538,97539],{"class":213},"np.copy(sub_a)\n",[203,97541,97542],{"class":205,"line":1269},[203,97543,97544],{"class":272},"#修改copy_a后不影响原数组\n",[203,97546,97547,97550,97552,97554,97556,97558,97560],{"class":205,"line":1284},[203,97548,97549],{"class":213},"copy_a[",[203,97551,405],{"class":262},[203,97553,592],{"class":213},[203,97555,405],{"class":262},[203,97557,1154],{"class":213},[203,97559,259],{"class":209},[203,97561,97516],{"class":262},[19,97563,97564],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5216,97566,97567],{},"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":27,"searchDepth":124,"depth":124,"links":97569},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97086,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97576,"title":97577,"body":97578,"description":23467,"extension":129,"meta":98070,"navigation":131,"path":98071,"seo":98072,"stem":98073,"__hash__":98074},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97579,"toc":98062},[97580,97583,97587,97590,97593,97646,97649,97674,97677,97696,97716,97719,97735,97739,97785,97789,97831,97835,97838,97841,97844,97847,97850,97912,97972,97976,97979,98036,98040,98045,98054,98059],[10,97581,97577],{"id":97582},"_5改变数组的维度",[14,97584,97586],{"id":97585},"_51-使用reshape","5.1 使用reshape()",[19,97588,97589],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,97591,97592],{},"①一维数组转换为二维数组",[194,97594,97596],{"className":30436,"code":97595,"language":30438,"meta":27,"style":27},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[200,97597,97598,97614,97619,97624,97629],{"__ignoreMap":27},[203,97599,97600,97602,97604,97606,97608,97610,97612],{"class":205,"line":206},[203,97601,452],{"class":213},[203,97603,259],{"class":209},[203,97605,93060],{"class":213},[203,97607,431],{"class":262},[203,97609,592],{"class":213},[203,97611,737],{"class":262},[203,97613,220],{"class":213},[203,97615,97616],{"class":205,"line":124},[203,97617,97618],{"class":272},"#将一维数组进行转换\n",[203,97620,97621],{"class":205,"line":1269},[203,97622,97623],{"class":272},"#注意点：元素个数不可以变\n",[203,97625,97626],{"class":205,"line":1284},[203,97627,97628],{"class":272},"#转换维度要保持一致，不一致就异常！！！\n",[203,97630,97631,97633,97635,97638,97640,97642,97644],{"class":205,"line":1290},[203,97632,93364],{"class":213},[203,97634,259],{"class":209},[203,97636,97637],{"class":213},"a.reshape(",[203,97639,291],{"class":262},[203,97641,592],{"class":213},[203,97643,558],{"class":262},[203,97645,220],{"class":213},[19,97647,97648],{},"②一维数组转换为三维数组",[194,97650,97652],{"className":30436,"code":97651,"language":30438,"meta":27,"style":27},"aaa=a.reshape(2,3,2)\n",[200,97653,97654],{"__ignoreMap":27},[203,97655,97656,97658,97660,97662,97664,97666,97668,97670,97672],{"class":205,"line":206},[203,97657,95579],{"class":213},[203,97659,259],{"class":209},[203,97661,97637],{"class":213},[203,97663,291],{"class":262},[203,97665,592],{"class":213},[203,97667,285],{"class":262},[203,97669,592],{"class":213},[203,97671,291],{"class":262},[203,97673,220],{"class":213},[19,97675,97676],{},"③二维数组转化为一维数组",[194,97678,97680],{"className":30436,"code":97679,"language":30438,"meta":27,"style":27},"#知道元素个数：\naa.reshape(12)\n",[200,97681,97682,97687],{"__ignoreMap":27},[203,97683,97684],{"class":205,"line":206},[203,97685,97686],{"class":272},"#知道元素个数：\n",[203,97688,97689,97692,97694],{"class":205,"line":124},[203,97690,97691],{"class":213},"aa.reshape(",[203,97693,712],{"class":262},[203,97695,220],{"class":213},[194,97697,97699],{"className":30436,"code":97698,"language":30438,"meta":27,"style":27},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[200,97700,97701,97706],{"__ignoreMap":27},[203,97702,97703],{"class":205,"line":206},[203,97704,97705],{"class":272},"#不知道元素个数，参数传递-1\n",[203,97707,97708,97710,97712,97714],{"class":205,"line":124},[203,97709,97691],{"class":213},[203,97711,746],{"class":209},[203,97713,431],{"class":262},[203,97715,220],{"class":213},[19,97717,97718],{},"④三维数组转换为一维数组",[194,97720,97722],{"className":30436,"code":97721,"language":30438,"meta":27,"style":27},"aaa.reshape(-1)\n",[200,97723,97724],{"__ignoreMap":27},[203,97725,97726,97729,97731,97733],{"class":205,"line":206},[203,97727,97728],{"class":213},"aaa.reshape(",[203,97730,746],{"class":209},[203,97732,431],{"class":262},[203,97734,220],{"class":213},[14,97736,97738],{"id":97737},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[194,97740,97742],{"className":30436,"code":97741,"language":30438,"meta":27,"style":27},"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",[200,97743,97744,97771,97776,97780],{"__ignoreMap":27},[203,97745,97746,97748,97750,97752,97754,97756,97758,97760,97762,97764,97766,97768],{"class":205,"line":206},[203,97747,93364],{"class":213},[203,97749,259],{"class":209},[203,97751,93060],{"class":213},[203,97753,431],{"class":262},[203,97755,592],{"class":213},[203,97757,737],{"class":262},[203,97759,93065],{"class":213},[203,97761,291],{"class":262},[203,97763,592],{"class":213},[203,97765,558],{"class":262},[203,97767,643],{"class":213},[203,97769,97770],{"class":272},"#转换为2行6列的数组\n",[203,97772,97773],{"class":205,"line":124},[203,97774,97775],{"class":213},"aa.revel()\n",[203,97777,97778],{"class":205,"line":1269},[203,97779,93622],{"class":272},[203,97781,97782],{"class":205,"line":1284},[203,97783,97784],{"class":272},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,97786,97788],{"id":97787},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[194,97790,97792],{"className":30436,"code":97791,"language":30438,"meta":27,"style":27},"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",[200,97793,97794,97818,97823,97827],{"__ignoreMap":27},[203,97795,97796,97798,97800,97802,97804,97806,97808,97810,97812,97814,97816],{"class":205,"line":206},[203,97797,93364],{"class":213},[203,97799,259],{"class":209},[203,97801,93060],{"class":213},[203,97803,431],{"class":262},[203,97805,592],{"class":213},[203,97807,737],{"class":262},[203,97809,93065],{"class":213},[203,97811,291],{"class":262},[203,97813,592],{"class":213},[203,97815,558],{"class":262},[203,97817,220],{"class":213},[203,97819,97820],{"class":205,"line":124},[203,97821,97822],{"class":213},"aa.flatten()\n",[203,97824,97825],{"class":205,"line":1269},[203,97826,93622],{"class":272},[203,97828,97829],{"class":205,"line":1284},[203,97830,97784],{"class":272},[14,97832,97834],{"id":97833},"_54-使用resize","5.4 使用resize()",[19,97836,97837],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,97839,97840],{},"通过resize方法可以改变数组的维度",[19,97842,97843],{},"#resize修改数组维度",[19,97845,97846],{},"#以元组的形式指定形状",[19,97848,97849],{},"#改变的是原数组",[194,97851,97853],{"className":30436,"code":97852,"language":30438,"meta":27,"style":27},"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",[200,97854,97855,97871,97891,97904,97908],{"__ignoreMap":27},[203,97856,97857,97859,97861,97863,97865,97867,97869],{"class":205,"line":206},[203,97858,452],{"class":213},[203,97860,259],{"class":209},[203,97862,93060],{"class":213},[203,97864,431],{"class":262},[203,97866,592],{"class":213},[203,97868,737],{"class":262},[203,97870,220],{"class":213},[203,97872,97873,97876,97878,97880,97882,97884,97886,97888],{"class":205,"line":124},[203,97874,97875],{"class":213},"a.shape",[203,97877,259],{"class":209},[203,97879,214],{"class":213},[203,97881,291],{"class":262},[203,97883,592],{"class":213},[203,97885,558],{"class":262},[203,97887,643],{"class":213},[203,97889,97890],{"class":272},"#改变了原数组\n",[203,97892,97893,97895,97897,97900,97902],{"class":205,"line":1269},[203,97894,452],{"class":213},[203,97896,259],{"class":209},[203,97898,97899],{"class":213},"resize((",[203,97901,712],{"class":262},[203,97903,30555],{"class":213},[203,97905,97906],{"class":205,"line":1284},[203,97907,93622],{"class":272},[203,97909,97910],{"class":205,"line":1290},[203,97911,97784],{"class":272},[194,97913,97915],{"className":30436,"code":97914,"language":30438,"meta":27,"style":27},"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",[200,97916,97917,97930,97934,97938,97943,97948,97953,97958,97963,97968],{"__ignoreMap":27},[203,97918,97919,97922,97924,97926,97928],{"class":205,"line":206},[203,97920,97921],{"class":213},"a.resize((",[203,97923,558],{"class":262},[203,97925,592],{"class":213},[203,97927,291],{"class":262},[203,97929,30555],{"class":213},[203,97931,97932],{"class":205,"line":124},[203,97933,93622],{"class":272},[203,97935,97936],{"class":205,"line":1269},[203,97937,93986],{"class":318},[203,97939,97940],{"class":205,"line":1284},[203,97941,97942],{"class":318},"array([[ 1,  2],\n",[203,97944,97945],{"class":205,"line":1290},[203,97946,97947],{"class":318},"       [ 3,  4],\n",[203,97949,97950],{"class":205,"line":1304},[203,97951,97952],{"class":318},"       [ 5,  6],\n",[203,97954,97955],{"class":205,"line":1310},[203,97956,97957],{"class":318},"       [ 7,  8],\n",[203,97959,97960],{"class":205,"line":1401},[203,97961,97962],{"class":318},"       [ 9, 10],\n",[203,97964,97965],{"class":205,"line":1407},[203,97966,97967],{"class":318},"       [11, 12]])\n",[203,97969,97970],{"class":205,"line":1419},[203,97971,93986],{"class":318},[14,97973,97975],{"id":97974},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,97977,97978],{},"改变了原数组",[194,97980,97982],{"className":30436,"code":97981,"language":30438,"meta":27,"style":27},"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",[200,97983,97984,98000,98016,98020,98024,98028,98032],{"__ignoreMap":27},[203,97985,97986,97988,97990,97992,97994,97996,97998],{"class":205,"line":206},[203,97987,452],{"class":213},[203,97989,259],{"class":209},[203,97991,93060],{"class":213},[203,97993,431],{"class":262},[203,97995,592],{"class":213},[203,97997,737],{"class":262},[203,97999,220],{"class":213},[203,98001,98002,98004,98006,98008,98010,98012,98014],{"class":205,"line":124},[203,98003,97875],{"class":213},[203,98005,259],{"class":209},[203,98007,214],{"class":213},[203,98009,291],{"class":262},[203,98011,592],{"class":213},[203,98013,558],{"class":262},[203,98015,220],{"class":213},[203,98017,98018],{"class":205,"line":1269},[203,98019,93622],{"class":272},[203,98021,98022],{"class":205,"line":1284},[203,98023,93986],{"class":318},[203,98025,98026],{"class":205,"line":1290},[203,98027,97246],{"class":318},[203,98029,98030],{"class":205,"line":1304},[203,98031,97251],{"class":318},[203,98033,98034],{"class":205,"line":1310},[203,98035,93986],{"class":318},[14,98037,98039],{"id":98038},"_56-重要比较","5.6 重要比较：",[19,98041,98042],{},[25,98043],{"alt":27,"src":98044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98046,98047,98048,98050,98051,98053],{},"口诀：NumPy 函数要么用 ",[200,98049,96021],{},"，要么用 ",[200,98052,31554],{},"，创建结构用 shape，造数据用 size",[19,98055,98056],{},[25,98057],{"alt":27,"src":98058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5216,98060,98061],{},"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":27,"searchDepth":124,"depth":124,"links":98063},[98064,98065,98066,98067,98068,98069],{"id":97585,"depth":124,"text":97586},{"id":97737,"depth":124,"text":97738},{"id":97787,"depth":124,"text":97788},{"id":97833,"depth":124,"text":97834},{"id":97974,"depth":124,"text":97975},{"id":98038,"depth":124,"text":98039},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97577,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98076,"title":98077,"body":98078,"description":23467,"extension":129,"meta":99150,"navigation":131,"path":99151,"seo":99152,"stem":99153,"__hash__":99154},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98079,"toc":99144},[98080,98083,98087,98090,98093,98096,98161,98164,98204,98207,98289,98292,98297,98319,98321,98326,98331,98334,98337,98492,98495,98697,98701,98704,98707,98775,98777,98782,98785,98788,98868,98872,98875,98877,98950,98952,98957,98959,99039,99043,99046,99049,99052,99055,99058,99061,99141],[10,98081,98077],{"id":98082},"_6数组的拼接",[14,98084,98086],{"id":98085},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98088,98089],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98091,98092],{},"函数内部传两个数列构成的数列或者元组",[19,98094,98095],{},"①一维数组的拼接",[194,98097,98099],{"className":30436,"code":98098,"language":30438,"meta":27,"style":27},"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",[200,98100,98101,98121,98141,98146,98151,98156],{"__ignoreMap":27},[203,98102,98103,98105,98107,98109,98111,98113,98115,98117,98119],{"class":205,"line":206},[203,98104,452],{"class":213},[203,98106,259],{"class":209},[203,98108,93082],{"class":213},[203,98110,431],{"class":262},[203,98112,592],{"class":213},[203,98114,291],{"class":262},[203,98116,592],{"class":213},[203,98118,285],{"class":262},[203,98120,4746],{"class":213},[203,98122,98123,98125,98127,98129,98131,98133,98135,98137,98139],{"class":205,"line":124},[203,98124,477],{"class":213},[203,98126,259],{"class":209},[203,98128,93082],{"class":213},[203,98130,507],{"class":262},[203,98132,592],{"class":213},[203,98134,533],{"class":262},[203,98136,592],{"class":213},[203,98138,558],{"class":262},[203,98140,4746],{"class":213},[203,98142,98143],{"class":205,"line":1269},[203,98144,98145],{"class":272},"#调用concatenate进行数组拼接\n",[203,98147,98148],{"class":205,"line":1284},[203,98149,98150],{"class":213},"np.concatenate((a,b))\n",[203,98152,98153],{"class":205,"line":1290},[203,98154,98155],{"class":272},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[203,98157,98158],{"class":205,"line":1304},[203,98159,98160],{"class":272},"#np.concatenate([a,b])\n",[19,98162,98163],{},"②一维多个数组拼接",[194,98165,98167],{"className":30436,"code":98166,"language":30438,"meta":27,"style":27},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[200,98168,98169,98174,98194,98199],{"__ignoreMap":27},[203,98170,98171],{"class":205,"line":206},[203,98172,98173],{"class":272},"#也可以多个数组进行拼接\n",[203,98175,98176,98178,98180,98182,98184,98186,98188,98190,98192],{"class":205,"line":124},[203,98177,502],{"class":213},[203,98179,259],{"class":209},[203,98181,93082],{"class":213},[203,98183,660],{"class":262},[203,98185,592],{"class":213},[203,98187,686],{"class":262},[203,98189,592],{"class":213},[203,98191,737],{"class":262},[203,98193,4746],{"class":213},[203,98195,98196],{"class":205,"line":1269},[203,98197,98198],{"class":213},"c\n",[203,98200,98201],{"class":205,"line":1284},[203,98202,98203],{"class":213},"np.concatenate((a,b,c))\n",[19,98205,98206],{},"③二维数组拼接",[194,98208,98210],{"className":30436,"code":98209,"language":30438,"meta":27,"style":27},"#二维数组使用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",[200,98211,98212,98217,98241,98266,98271,98276],{"__ignoreMap":27},[203,98213,98214],{"class":205,"line":206},[203,98215,98216],{"class":272},"#二维数组使用concatenate进行拼接\n",[203,98218,98219,98221,98223,98225,98227,98229,98231,98233,98235,98237,98239],{"class":205,"line":124},[203,98220,93364],{"class":213},[203,98222,259],{"class":209},[203,98224,93060],{"class":213},[203,98226,431],{"class":262},[203,98228,592],{"class":213},[203,98230,737],{"class":262},[203,98232,93065],{"class":213},[203,98234,285],{"class":262},[203,98236,592],{"class":213},[203,98238,507],{"class":262},[203,98240,220],{"class":213},[203,98242,98243,98246,98248,98250,98252,98254,98256,98258,98260,98262,98264],{"class":205,"line":1269},[203,98244,98245],{"class":213},"bb",[203,98247,259],{"class":209},[203,98249,93060],{"class":213},[203,98251,551],{"class":262},[203,98253,592],{"class":213},[203,98255,856],{"class":262},[203,98257,93065],{"class":213},[203,98259,285],{"class":262},[203,98261,592],{"class":213},[203,98263,507],{"class":262},[203,98265,220],{"class":213},[203,98267,98268],{"class":205,"line":1284},[203,98269,98270],{"class":272},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[203,98272,98273],{"class":205,"line":1290},[203,98274,98275],{"class":272},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[203,98277,98278,98281,98283,98285,98287],{"class":205,"line":1304},[203,98279,98280],{"class":213},"np.concatenate((aa,bb),",[203,98282,47572],{"class":5306},[203,98284,259],{"class":209},[203,98286,405],{"class":262},[203,98288,220],{"class":213},[19,98290,98291],{},"结果：",[19,98293,98294],{},[25,98295],{"alt":27,"src":98296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[194,98298,98300],{"className":30436,"code":98299,"language":30438,"meta":27,"style":27},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[200,98301,98302,98307],{"__ignoreMap":27},[203,98303,98304],{"class":205,"line":206},[203,98305,98306],{"class":272},"#指定axis为1进行拼接\n",[203,98308,98309,98311,98313,98315,98317],{"class":205,"line":124},[203,98310,98280],{"class":213},[203,98312,47572],{"class":5306},[203,98314,259],{"class":209},[203,98316,431],{"class":262},[203,98318,220],{"class":213},[19,98320,98291],{},[19,98322,98323],{},[25,98324],{"alt":27,"src":98325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98327,98328],{},[363,98329,98330],{},"二维数组总结：0竖着方向，1横着方向",[19,98332,98333],{},"④三维数组拼接",[19,98335,98336],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[194,98338,98340],{"className":30436,"code":98339,"language":30438,"meta":27,"style":27},"#两个三行六列\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",[200,98341,98342,98347,98375,98405,98410,98427,98432,98437,98442,98459,98464,98469,98474,98487],{"__ignoreMap":27},[203,98343,98344],{"class":205,"line":206},[203,98345,98346],{"class":272},"#两个三行六列\n",[203,98348,98349,98351,98353,98355,98357,98359,98361,98363,98365,98367,98369,98371,98373],{"class":205,"line":124},[203,98350,95579],{"class":213},[203,98352,259],{"class":209},[203,98354,93060],{"class":213},[203,98356,431],{"class":262},[203,98358,592],{"class":213},[203,98360,539],{"class":262},[203,98362,93065],{"class":213},[203,98364,291],{"class":262},[203,98366,592],{"class":213},[203,98368,285],{"class":262},[203,98370,592],{"class":213},[203,98372,558],{"class":262},[203,98374,220],{"class":213},[203,98376,98377,98380,98382,98384,98386,98388,98391,98393,98395,98397,98399,98401,98403],{"class":205,"line":1269},[203,98378,98379],{"class":213},"bbb",[203,98381,259],{"class":209},[203,98383,93060],{"class":213},[203,98385,551],{"class":262},[203,98387,592],{"class":213},[203,98389,98390],{"class":262},"137",[203,98392,93065],{"class":213},[203,98394,291],{"class":262},[203,98396,592],{"class":213},[203,98398,285],{"class":262},[203,98400,592],{"class":213},[203,98402,558],{"class":262},[203,98404,220],{"class":213},[203,98406,98407],{"class":205,"line":1284},[203,98408,98409],{"class":272},"#axis=0\n",[203,98411,98412,98414,98416,98419,98421,98423,98425],{"class":205,"line":1290},[203,98413,909],{"class":213},[203,98415,259],{"class":209},[203,98417,98418],{"class":213},"np.concatenate((aaa,bbb),",[203,98420,47572],{"class":5306},[203,98422,259],{"class":209},[203,98424,405],{"class":262},[203,98426,220],{"class":213},[203,98428,98429],{"class":205,"line":1304},[203,98430,98431],{"class":213},"s.shape\n",[203,98433,98434],{"class":205,"line":1310},[203,98435,98436],{"class":272},"#输出：(4,3,6)\n",[203,98438,98439],{"class":205,"line":1401},[203,98440,98441],{"class":272},"#axis=1\n",[203,98443,98444,98447,98449,98451,98453,98455,98457],{"class":205,"line":1407},[203,98445,98446],{"class":213},"ss",[203,98448,259],{"class":209},[203,98450,98418],{"class":213},[203,98452,47572],{"class":5306},[203,98454,259],{"class":209},[203,98456,431],{"class":262},[203,98458,220],{"class":213},[203,98460,98461],{"class":205,"line":1419},[203,98462,98463],{"class":213},"ss.shape\n",[203,98465,98466],{"class":205,"line":1701},[203,98467,98468],{"class":272},"#输出：(2,6,6)\n",[203,98470,98471],{"class":205,"line":1706},[203,98472,98473],{"class":272},"#axis=2\n",[203,98475,98476,98478,98480,98482,98484],{"class":205,"line":1712},[203,98477,98418],{"class":213},[203,98479,47572],{"class":5306},[203,98481,259],{"class":209},[203,98483,291],{"class":262},[203,98485,98486],{"class":213},").shape\n",[203,98488,98489],{"class":205,"line":1717},[203,98490,98491],{"class":272},"#输出：（2，3，12）\n",[19,98493,98494],{},"⑤四维数组拼接",[194,98496,98498],{"className":30436,"code":98497,"language":30438,"meta":27,"style":27},"#两个三行六列\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",[200,98499,98500,98504,98532,98560,98585,98611,98615,98628,98633,98637,98649,98654,98658,98670,98675,98680,98692],{"__ignoreMap":27},[203,98501,98502],{"class":205,"line":206},[203,98503,98346],{"class":272},[203,98505,98506,98508,98510,98512,98514,98516,98518,98520,98522,98524,98526,98528,98530],{"class":205,"line":124},[203,98507,95579],{"class":213},[203,98509,259],{"class":209},[203,98511,93060],{"class":213},[203,98513,431],{"class":262},[203,98515,592],{"class":213},[203,98517,539],{"class":262},[203,98519,93065],{"class":213},[203,98521,291],{"class":262},[203,98523,592],{"class":213},[203,98525,285],{"class":262},[203,98527,592],{"class":213},[203,98529,558],{"class":262},[203,98531,220],{"class":213},[203,98533,98534,98536,98538,98540,98542,98544,98546,98548,98550,98552,98554,98556,98558],{"class":205,"line":1269},[203,98535,98379],{"class":213},[203,98537,259],{"class":209},[203,98539,93060],{"class":213},[203,98541,551],{"class":262},[203,98543,592],{"class":213},[203,98545,98390],{"class":262},[203,98547,93065],{"class":213},[203,98549,291],{"class":262},[203,98551,592],{"class":213},[203,98553,285],{"class":262},[203,98555,592],{"class":213},[203,98557,558],{"class":262},[203,98559,220],{"class":213},[203,98561,98562,98565,98567,98569,98571,98573,98575,98577,98579,98581,98583],{"class":205,"line":1284},[203,98563,98564],{"class":213},"aaaa",[203,98566,259],{"class":209},[203,98568,97728],{"class":213},[203,98570,291],{"class":262},[203,98572,592],{"class":213},[203,98574,285],{"class":262},[203,98576,592],{"class":213},[203,98578,285],{"class":262},[203,98580,592],{"class":213},[203,98582,291],{"class":262},[203,98584,220],{"class":213},[203,98586,98587,98590,98592,98595,98597,98599,98601,98603,98605,98607,98609],{"class":205,"line":1290},[203,98588,98589],{"class":213},"bbbb",[203,98591,259],{"class":209},[203,98593,98594],{"class":213},"bbb.reshape(",[203,98596,291],{"class":262},[203,98598,592],{"class":213},[203,98600,285],{"class":262},[203,98602,592],{"class":213},[203,98604,285],{"class":262},[203,98606,592],{"class":213},[203,98608,291],{"class":262},[203,98610,220],{"class":213},[203,98612,98613],{"class":205,"line":1304},[203,98614,98409],{"class":272},[203,98616,98617,98620,98622,98624,98626],{"class":205,"line":1310},[203,98618,98619],{"class":213},"np.concatenate((aaaa,bbbb),",[203,98621,47572],{"class":5306},[203,98623,259],{"class":209},[203,98625,405],{"class":262},[203,98627,98486],{"class":213},[203,98629,98630],{"class":205,"line":1401},[203,98631,98632],{"class":272},"#结果：（4，3，3，2）\n",[203,98634,98635],{"class":205,"line":1407},[203,98636,98441],{"class":272},[203,98638,98639,98641,98643,98645,98647],{"class":205,"line":1419},[203,98640,98619],{"class":213},[203,98642,47572],{"class":5306},[203,98644,259],{"class":209},[203,98646,431],{"class":262},[203,98648,98486],{"class":213},[203,98650,98651],{"class":205,"line":1701},[203,98652,98653],{"class":272},"#结果：（2，6，3，2）\n",[203,98655,98656],{"class":205,"line":1706},[203,98657,98473],{"class":272},[203,98659,98660,98662,98664,98666,98668],{"class":205,"line":1712},[203,98661,98619],{"class":213},[203,98663,47572],{"class":5306},[203,98665,259],{"class":209},[203,98667,291],{"class":262},[203,98669,98486],{"class":213},[203,98671,98672],{"class":205,"line":1717},[203,98673,98674],{"class":272},"#结果：（2，3，6，2）\n",[203,98676,98677],{"class":205,"line":1731},[203,98678,98679],{"class":272},"#axis=3\n",[203,98681,98682,98684,98686,98688,98690],{"class":205,"line":1736},[203,98683,98619],{"class":213},[203,98685,47572],{"class":5306},[203,98687,259],{"class":209},[203,98689,285],{"class":262},[203,98691,98486],{"class":213},[203,98693,98694],{"class":205,"line":1742},[203,98695,98696],{"class":272},"#结果：（2，3，3，4）\n",[14,98698,98700],{"id":98699},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,98702,98703],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,98705,98706],{},"①二维数组",[194,98708,98710],{"className":30436,"code":98709,"language":30438,"meta":27,"style":27},"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",[200,98711,98712,98736,98760,98765,98770],{"__ignoreMap":27},[203,98713,98714,98716,98718,98720,98722,98724,98726,98728,98730,98732,98734],{"class":205,"line":206},[203,98715,93364],{"class":213},[203,98717,259],{"class":209},[203,98719,93060],{"class":213},[203,98721,431],{"class":262},[203,98723,592],{"class":213},[203,98725,737],{"class":262},[203,98727,93065],{"class":213},[203,98729,285],{"class":262},[203,98731,592],{"class":213},[203,98733,507],{"class":262},[203,98735,220],{"class":213},[203,98737,98738,98740,98742,98744,98746,98748,98750,98752,98754,98756,98758],{"class":205,"line":124},[203,98739,98245],{"class":213},[203,98741,259],{"class":209},[203,98743,93060],{"class":213},[203,98745,551],{"class":262},[203,98747,592],{"class":213},[203,98749,856],{"class":262},[203,98751,93065],{"class":213},[203,98753,285],{"class":262},[203,98755,592],{"class":213},[203,98757,507],{"class":262},[203,98759,220],{"class":213},[203,98761,98762],{"class":205,"line":1269},[203,98763,98764],{"class":213},"np.hstack((aa,bb))\n",[203,98766,98767],{"class":205,"line":1284},[203,98768,98769],{"class":272},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[203,98771,98772],{"class":205,"line":1290},[203,98773,98774],{"class":272},"#np.hstack([aa,bb])\n",[19,98776,98291],{},[19,98778,98779],{},[25,98780],{"alt":27,"src":98781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,98783,98784],{},"等效于concatenate()函数中axis=1时的情况",[19,98786,98787],{},"②三维数组",[194,98789,98791],{"className":30436,"code":98790,"language":30438,"meta":27,"style":27},"#两个三行六列\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",[200,98792,98793,98797,98825,98853,98858,98863],{"__ignoreMap":27},[203,98794,98795],{"class":205,"line":206},[203,98796,98346],{"class":272},[203,98798,98799,98801,98803,98805,98807,98809,98811,98813,98815,98817,98819,98821,98823],{"class":205,"line":124},[203,98800,95579],{"class":213},[203,98802,259],{"class":209},[203,98804,93060],{"class":213},[203,98806,431],{"class":262},[203,98808,592],{"class":213},[203,98810,539],{"class":262},[203,98812,93065],{"class":213},[203,98814,291],{"class":262},[203,98816,592],{"class":213},[203,98818,285],{"class":262},[203,98820,592],{"class":213},[203,98822,558],{"class":262},[203,98824,220],{"class":213},[203,98826,98827,98829,98831,98833,98835,98837,98839,98841,98843,98845,98847,98849,98851],{"class":205,"line":1269},[203,98828,98379],{"class":213},[203,98830,259],{"class":209},[203,98832,93060],{"class":213},[203,98834,551],{"class":262},[203,98836,592],{"class":213},[203,98838,98390],{"class":262},[203,98840,93065],{"class":213},[203,98842,291],{"class":262},[203,98844,592],{"class":213},[203,98846,285],{"class":262},[203,98848,592],{"class":213},[203,98850,558],{"class":262},[203,98852,220],{"class":213},[203,98854,98855],{"class":205,"line":1284},[203,98856,98857],{"class":272},"#使用hstack\n",[203,98859,98860],{"class":205,"line":1290},[203,98861,98862],{"class":213},"np.hstack((aaa,bbb)).shape\n",[203,98864,98865],{"class":205,"line":1304},[203,98866,98867],{"class":272},"#输出：（2，6，6）\n",[14,98869,98871],{"id":98870},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,98873,98874],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,98876,98706],{},[194,98878,98880],{"className":30436,"code":98879,"language":30438,"meta":27,"style":27},"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",[200,98881,98882,98906,98930,98935,98940,98945],{"__ignoreMap":27},[203,98883,98884,98886,98888,98890,98892,98894,98896,98898,98900,98902,98904],{"class":205,"line":206},[203,98885,93364],{"class":213},[203,98887,259],{"class":209},[203,98889,93060],{"class":213},[203,98891,431],{"class":262},[203,98893,592],{"class":213},[203,98895,737],{"class":262},[203,98897,93065],{"class":213},[203,98899,285],{"class":262},[203,98901,592],{"class":213},[203,98903,507],{"class":262},[203,98905,220],{"class":213},[203,98907,98908,98910,98912,98914,98916,98918,98920,98922,98924,98926,98928],{"class":205,"line":124},[203,98909,98245],{"class":213},[203,98911,259],{"class":209},[203,98913,93060],{"class":213},[203,98915,551],{"class":262},[203,98917,592],{"class":213},[203,98919,856],{"class":262},[203,98921,93065],{"class":213},[203,98923,285],{"class":262},[203,98925,592],{"class":213},[203,98927,507],{"class":262},[203,98929,220],{"class":213},[203,98931,98932],{"class":205,"line":1269},[203,98933,98934],{"class":272},"#vstack 垂直方向进行堆叠\n",[203,98936,98937],{"class":205,"line":1284},[203,98938,98939],{"class":213},"np.vstack((aa,bb))\n",[203,98941,98942],{"class":205,"line":1290},[203,98943,98944],{"class":272},"#与hstack传的参数类似，等价于：\n",[203,98946,98947],{"class":205,"line":1304},[203,98948,98949],{"class":213},"np.vstack([aa,bb])\n",[19,98951,98291],{},[19,98953,98954],{},[25,98955],{"alt":27,"src":98956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,98958,98787],{},[194,98960,98962],{"className":30436,"code":98961,"language":30438,"meta":27,"style":27},"#两个三行六列\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",[200,98963,98964,98968,98996,99024,99029,99034],{"__ignoreMap":27},[203,98965,98966],{"class":205,"line":206},[203,98967,98346],{"class":272},[203,98969,98970,98972,98974,98976,98978,98980,98982,98984,98986,98988,98990,98992,98994],{"class":205,"line":124},[203,98971,95579],{"class":213},[203,98973,259],{"class":209},[203,98975,93060],{"class":213},[203,98977,431],{"class":262},[203,98979,592],{"class":213},[203,98981,539],{"class":262},[203,98983,93065],{"class":213},[203,98985,291],{"class":262},[203,98987,592],{"class":213},[203,98989,285],{"class":262},[203,98991,592],{"class":213},[203,98993,558],{"class":262},[203,98995,220],{"class":213},[203,98997,98998,99000,99002,99004,99006,99008,99010,99012,99014,99016,99018,99020,99022],{"class":205,"line":1269},[203,98999,98379],{"class":213},[203,99001,259],{"class":209},[203,99003,93060],{"class":213},[203,99005,551],{"class":262},[203,99007,592],{"class":213},[203,99009,98390],{"class":262},[203,99011,93065],{"class":213},[203,99013,291],{"class":262},[203,99015,592],{"class":213},[203,99017,285],{"class":262},[203,99019,592],{"class":213},[203,99021,558],{"class":262},[203,99023,220],{"class":213},[203,99025,99026],{"class":205,"line":1284},[203,99027,99028],{"class":272},"#使用vstack\n",[203,99030,99031],{"class":205,"line":1290},[203,99032,99033],{"class":213},"np.vstack((aaa,bbb)).shape\n",[203,99035,99036],{"class":205,"line":1304},[203,99037,99038],{"class":272},"#输出：（4，3，6）\n",[14,99040,99042],{"id":99041},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99044,99045],{},"该方法是三维数组特有的方法",[19,99047,99048],{},"也就是说",[19,99050,99051],{},"一维数组拼接方法用：concatenate()",[19,99053,99054],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99056,99057],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99059,99060],{},"四维数组及多维数组只能用concatenate进行拼接",[194,99062,99064],{"className":30436,"code":99063,"language":30438,"meta":27,"style":27},"#两个三行六列\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",[200,99065,99066,99070,99098,99126,99131,99136],{"__ignoreMap":27},[203,99067,99068],{"class":205,"line":206},[203,99069,98346],{"class":272},[203,99071,99072,99074,99076,99078,99080,99082,99084,99086,99088,99090,99092,99094,99096],{"class":205,"line":124},[203,99073,95579],{"class":213},[203,99075,259],{"class":209},[203,99077,93060],{"class":213},[203,99079,431],{"class":262},[203,99081,592],{"class":213},[203,99083,539],{"class":262},[203,99085,93065],{"class":213},[203,99087,291],{"class":262},[203,99089,592],{"class":213},[203,99091,285],{"class":262},[203,99093,592],{"class":213},[203,99095,558],{"class":262},[203,99097,220],{"class":213},[203,99099,99100,99102,99104,99106,99108,99110,99112,99114,99116,99118,99120,99122,99124],{"class":205,"line":1269},[203,99101,98379],{"class":213},[203,99103,259],{"class":209},[203,99105,93060],{"class":213},[203,99107,551],{"class":262},[203,99109,592],{"class":213},[203,99111,98390],{"class":262},[203,99113,93065],{"class":213},[203,99115,291],{"class":262},[203,99117,592],{"class":213},[203,99119,285],{"class":262},[203,99121,592],{"class":213},[203,99123,558],{"class":262},[203,99125,220],{"class":213},[203,99127,99128],{"class":205,"line":1284},[203,99129,99130],{"class":272},"#使用dstack\n",[203,99132,99133],{"class":205,"line":1290},[203,99134,99135],{"class":213},"np.dstack((aaa,bbb)).shape\n",[203,99137,99138],{"class":205,"line":1304},[203,99139,99140],{"class":272},"#结果：（2，3，12）\n",[5216,99142,99143],{},"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":27,"searchDepth":124,"depth":124,"links":99145},[99146,99147,99148,99149],{"id":98085,"depth":124,"text":98086},{"id":98699,"depth":124,"text":98700},{"id":98870,"depth":124,"text":98871},{"id":99041,"depth":124,"text":99042},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98077,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99156,"title":99157,"body":99158,"description":23467,"extension":129,"meta":99433,"navigation":131,"path":99434,"seo":99435,"stem":99436,"__hash__":99437},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99159,"toc":99431},[99160,99163,99166,99260,99263,99266,99269,99272,99275,99278,99281,99284,99428],[10,99161,99157],{"id":99162},"_7数组转置",[19,99164,99165],{},"使用transpose()函数",[194,99167,99169],{"className":30436,"code":99168,"language":30438,"meta":27,"style":27},"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",[200,99170,99171,99181,99205,99210,99215,99220,99225,99233,99237,99241,99246,99251,99256],{"__ignoreMap":27},[203,99172,99173,99175,99177,99179],{"class":205,"line":206},[203,99174,30450],{"class":209},[203,99176,31438],{"class":213},[203,99178,31441],{"class":209},[203,99180,31444],{"class":213},[203,99182,99183,99185,99187,99189,99191,99193,99195,99197,99199,99201,99203],{"class":205,"line":124},[203,99184,452],{"class":213},[203,99186,259],{"class":209},[203,99188,31775],{"class":213},[203,99190,431],{"class":262},[203,99192,592],{"class":213},[203,99194,737],{"class":262},[203,99196,93065],{"class":213},[203,99198,507],{"class":262},[203,99200,592],{"class":213},[203,99202,285],{"class":262},[203,99204,220],{"class":213},[203,99206,99207],{"class":205,"line":1269},[203,99208,99209],{"class":272},"#二维数组转置\n",[203,99211,99212],{"class":205,"line":1284},[203,99213,99214],{"class":272},"#调用transpose()函数\n",[203,99216,99217],{"class":205,"line":1290},[203,99218,99219],{"class":213},"a.transpose()\n",[203,99221,99222],{"class":205,"line":1304},[203,99223,99224],{"class":272},"#对于二维数组也可以采用.T来实现\n",[203,99226,99227,99230],{"class":205,"line":1310},[203,99228,99229],{"class":213},"a.T",[203,99231,99232],{"class":272},"#与上述代码一样\n",[203,99234,99235],{"class":205,"line":1401},[203,99236,93622],{"class":272},[203,99238,99239],{"class":205,"line":1407},[203,99240,93986],{"class":318},[203,99242,99243],{"class":205,"line":1419},[203,99244,99245],{"class":318},"array([[ 1,  4,  7, 10],\n",[203,99247,99248],{"class":205,"line":1701},[203,99249,99250],{"class":318},"       [ 2,  5,  8, 11],\n",[203,99252,99253],{"class":205,"line":1706},[203,99254,99255],{"class":318},"       [ 3,  6,  9, 12]])\n",[203,99257,99258],{"class":205,"line":1712},[203,99259,93986],{"class":318},[19,99261,99262],{},"也可以使用np.transpose()的形式",[19,99264,99265],{},"#多维数组进行转置 np.transpose()",[19,99267,99268],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99270,99271],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99273,99274],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99276,99277],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99279,99280],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99282,99283],{},"四维及以上的数组也是一样的道理",[194,99285,99287],{"className":30436,"code":99286,"language":30438,"meta":27,"style":27},"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",[200,99288,99289,99317,99322,99327,99332,99350,99355,99387,99392,99397,99402,99423],{"__ignoreMap":27},[203,99290,99291,99293,99295,99297,99299,99301,99303,99305,99307,99309,99311,99313,99315],{"class":205,"line":206},[203,99292,1034],{"class":213},[203,99294,259],{"class":209},[203,99296,93060],{"class":213},[203,99298,431],{"class":262},[203,99300,592],{"class":213},[203,99302,539],{"class":262},[203,99304,93065],{"class":213},[203,99306,285],{"class":262},[203,99308,592],{"class":213},[203,99310,558],{"class":262},[203,99312,592],{"class":213},[203,99314,291],{"class":262},[203,99316,220],{"class":213},[203,99318,99319],{"class":205,"line":124},[203,99320,99321],{"class":213},"x.shape\n",[203,99323,99324],{"class":205,"line":1269},[203,99325,99326],{"class":272},"#结果：（3,6,2）\n",[203,99328,99329],{"class":205,"line":1284},[203,99330,99331],{"class":272},"#使用np.transpose()进行转置 变为(2,6,3)\n",[203,99333,99334,99337,99339,99341,99343,99345,99347],{"class":205,"line":1290},[203,99335,99336],{"class":213},"np.transpose(x,(",[203,99338,291],{"class":262},[203,99340,592],{"class":213},[203,99342,431],{"class":262},[203,99344,592],{"class":213},[203,99346,405],{"class":262},[203,99348,99349],{"class":213},")).shape\n",[203,99351,99352],{"class":205,"line":1304},[203,99353,99354],{"class":272},"#结果：(2,6,3)\n",[203,99356,99357,99359,99361,99363,99365,99367,99369,99371,99373,99375,99377,99379,99381,99383,99385],{"class":205,"line":1310},[203,99358,98564],{"class":213},[203,99360,259],{"class":209},[203,99362,93060],{"class":213},[203,99364,431],{"class":262},[203,99366,592],{"class":213},[203,99368,539],{"class":262},[203,99370,93065],{"class":213},[203,99372,285],{"class":262},[203,99374,592],{"class":213},[203,99376,291],{"class":262},[203,99378,592],{"class":213},[203,99380,431],{"class":262},[203,99382,592],{"class":213},[203,99384,558],{"class":262},[203,99386,220],{"class":213},[203,99388,99389],{"class":205,"line":1401},[203,99390,99391],{"class":213},"aaaa.shape\n",[203,99393,99394],{"class":205,"line":1407},[203,99395,99396],{"class":272},"#结果：（3，2，1，6）\n",[203,99398,99399],{"class":205,"line":1419},[203,99400,99401],{"class":272},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[203,99403,99404,99407,99409,99411,99413,99415,99417,99419,99421],{"class":205,"line":1701},[203,99405,99406],{"class":213},"np.transpose(aaaa,(",[203,99408,431],{"class":262},[203,99410,592],{"class":213},[203,99412,291],{"class":262},[203,99414,592],{"class":213},[203,99416,405],{"class":262},[203,99418,592],{"class":213},[203,99420,285],{"class":262},[203,99422,99349],{"class":213},[203,99424,99425],{"class":205,"line":1706},[203,99426,99427],{"class":272},"#结果：(2,1,3,6)\n",[5216,99429,99430],{},"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":27,"searchDepth":124,"depth":124,"links":99432},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99157,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99439,"title":99440,"body":99441,"description":23467,"extension":129,"meta":100175,"navigation":131,"path":100176,"seo":100177,"stem":100178,"__hash__":100179},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99442,"toc":100173},[99443,99446,99449,99452,99455,99458,99461,99464,99467,99576,99579,99582,100170],[10,99444,99440],{"id":99445},"_8数组分割",[19,99447,99448],{},"split分割",[19,99450,99451],{},"numpy.split(ary,indics_or_sections,axis)",[19,99453,99454],{},"解释：",[19,99456,99457],{},"ary:被分割的数组",[19,99459,99460],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99462,99463],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99465,99466],{},"①一维数组的分割",[194,99468,99470],{"className":30436,"code":99469,"language":30438,"meta":27,"style":27},"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",[200,99471,99472,99488,99493,99502,99506,99511,99519,99523,99528,99533,99546,99550,99555,99567,99571],{"__ignoreMap":27},[203,99473,99474,99476,99478,99480,99482,99484,99486],{"class":205,"line":206},[203,99475,452],{"class":213},[203,99477,259],{"class":209},[203,99479,93060],{"class":213},[203,99481,431],{"class":262},[203,99483,592],{"class":213},[203,99485,634],{"class":262},[203,99487,220],{"class":213},[203,99489,99490],{"class":205,"line":124},[203,99491,99492],{"class":272},"#如果传入整数，必须能够平分，否则会报错\n",[203,99494,99495,99498,99500],{"class":205,"line":1269},[203,99496,99497],{"class":213},"np.split(a,",[203,99499,291],{"class":262},[203,99501,220],{"class":213},[203,99503,99504],{"class":205,"line":1284},[203,99505,93622],{"class":272},[203,99507,99508],{"class":205,"line":1290},[203,99509,99510],{"class":272},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[203,99512,99513,99515,99517],{"class":205,"line":1304},[203,99514,99497],{"class":213},[203,99516,507],{"class":262},[203,99518,220],{"class":213},[203,99520,99521],{"class":205,"line":1310},[203,99522,93622],{"class":272},[203,99524,99525],{"class":205,"line":1401},[203,99526,99527],{"class":272},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[203,99529,99530],{"class":205,"line":1407},[203,99531,99532],{"class":272},"#传入数组\n",[203,99534,99535,99538,99540,99542,99544],{"class":205,"line":1419},[203,99536,99537],{"class":213},"np.split(a,[",[203,99539,285],{"class":262},[203,99541,592],{"class":213},[203,99543,533],{"class":262},[203,99545,4746],{"class":213},[203,99547,99548],{"class":205,"line":1701},[203,99549,93622],{"class":272},[203,99551,99552],{"class":205,"line":1706},[203,99553,99554],{"class":272},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[203,99556,99557,99559,99561,99563,99565],{"class":205,"line":1712},[203,99558,99537],{"class":213},[203,99560,533],{"class":262},[203,99562,592],{"class":213},[203,99564,583],{"class":262},[203,99566,4746],{"class":213},[203,99568,99569],{"class":205,"line":1717},[203,99570,93622],{"class":272},[203,99572,99573],{"class":205,"line":1731},[203,99574,99575],{"class":272},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,99577,99578],{},"②二维数组的分割",[19,99580,99581],{},"使用split()",[194,99583,99585],{"className":30436,"code":99584,"language":30438,"meta":27,"style":27},"#二维数组分割\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",[200,99586,99587,99592,99616,99621,99630,99634,99638,99643,99648,99653,99658,99663,99668,99673,99677,99690,99694,99698,99702,99706,99710,99715,99720,99725,99729,99734,99750,99754,99758,99763,99768,99773,99778,99783,99788,99793,99798,99803,99808,99813,99818,99823,99828,99833,99838,99843,99848,99852,99856,99876,99880,99884,99889,99894,99899,99904,99909,99914,99919,99924,99929,99934,99939,99944,99949,99954,99959,99964,99969,99974,99978,99983,99992,99996,100000,100004,100008,100012,100016,100020,100024,100028,100037,100041,100045,100049,100053,100057,100061,100065,100069,100073,100077,100081,100085,100089,100093,100097,100101,100105,100109,100113,100117,100121,100134,100138,100142,100146,100150,100154,100158,100162,100166],{"__ignoreMap":27},[203,99588,99589],{"class":205,"line":206},[203,99590,99591],{"class":272},"#二维数组分割\n",[203,99593,99594,99596,99598,99600,99602,99604,99606,99608,99610,99612,99614],{"class":205,"line":124},[203,99595,93364],{"class":213},[203,99597,259],{"class":209},[203,99599,93060],{"class":213},[203,99601,431],{"class":262},[203,99603,592],{"class":213},[203,99605,539],{"class":262},[203,99607,93065],{"class":213},[203,99609,558],{"class":262},[203,99611,592],{"class":213},[203,99613,558],{"class":262},[203,99615,220],{"class":213},[203,99617,99618],{"class":205,"line":1269},[203,99619,99620],{"class":272},"#默认axis=0  传入整数平均分,按行来的\n",[203,99622,99623,99626,99628],{"class":205,"line":1284},[203,99624,99625],{"class":213},"np.split(aa,",[203,99627,285],{"class":262},[203,99629,220],{"class":213},[203,99631,99632],{"class":205,"line":1290},[203,99633,95822],{"class":272},[203,99635,99636],{"class":205,"line":1304},[203,99637,93986],{"class":318},[203,99639,99640],{"class":205,"line":1310},[203,99641,99642],{"class":318},"[array([[ 1,  2,  3,  4,  5,  6],\n",[203,99644,99645],{"class":205,"line":1401},[203,99646,99647],{"class":318},"        [ 7,  8,  9, 10, 11, 12]]),\n",[203,99649,99650],{"class":205,"line":1407},[203,99651,99652],{"class":318}," array([[13, 14, 15, 16, 17, 18],\n",[203,99654,99655],{"class":205,"line":1419},[203,99656,99657],{"class":318},"        [19, 20, 21, 22, 23, 24]]),\n",[203,99659,99660],{"class":205,"line":1701},[203,99661,99662],{"class":318}," array([[25, 26, 27, 28, 29, 30],\n",[203,99664,99665],{"class":205,"line":1706},[203,99666,99667],{"class":318},"        [31, 32, 33, 34, 35, 36]])]\n",[203,99669,99670],{"class":205,"line":1712},[203,99671,99672],{"class":318}," '''\n",[203,99674,99675],{"class":205,"line":1717},[203,99676,99532],{"class":272},[203,99678,99679,99682,99684,99686,99688],{"class":205,"line":1731},[203,99680,99681],{"class":213},"np.split(aa,[",[203,99683,291],{"class":262},[203,99685,592],{"class":213},[203,99687,533],{"class":262},[203,99689,4746],{"class":213},[203,99691,99692],{"class":205,"line":1736},[203,99693,95822],{"class":272},[203,99695,99696],{"class":205,"line":1742},[203,99697,93986],{"class":318},[203,99699,99700],{"class":205,"line":1763},[203,99701,99642],{"class":318},[203,99703,99704],{"class":205,"line":1768},[203,99705,99647],{"class":318},[203,99707,99708],{"class":205,"line":1782},[203,99709,99652],{"class":318},[203,99711,99712],{"class":205,"line":1787},[203,99713,99714],{"class":318},"        [19, 20, 21, 22, 23, 24],\n",[203,99716,99717],{"class":205,"line":1816},[203,99718,99719],{"class":318},"        [25, 26, 27, 28, 29, 30]]),\n",[203,99721,99722],{"class":205,"line":1821},[203,99723,99724],{"class":318}," array([[31, 32, 33, 34, 35, 36]])]\n",[203,99726,99727],{"class":205,"line":1838},[203,99728,93986],{"class":318},[203,99730,99731],{"class":205,"line":1843},[203,99732,99733],{"class":272},"#axis=1 按照列来分\n",[203,99735,99736,99738,99740,99742,99744,99746,99748],{"class":205,"line":1848},[203,99737,99625],{"class":213},[203,99739,285],{"class":262},[203,99741,592],{"class":213},[203,99743,47572],{"class":5306},[203,99745,259],{"class":209},[203,99747,431],{"class":262},[203,99749,220],{"class":213},[203,99751,99752],{"class":205,"line":1853},[203,99753,95822],{"class":272},[203,99755,99756],{"class":205,"line":1867},[203,99757,93986],{"class":318},[203,99759,99760],{"class":205,"line":1872},[203,99761,99762],{"class":318},"[array([[ 1,  2],\n",[203,99764,99765],{"class":205,"line":2666},[203,99766,99767],{"class":318},"        [ 7,  8],\n",[203,99769,99770],{"class":205,"line":2680},[203,99771,99772],{"class":318},"        [13, 14],\n",[203,99774,99775],{"class":205,"line":2688},[203,99776,99777],{"class":318},"        [19, 20],\n",[203,99779,99780],{"class":205,"line":2693},[203,99781,99782],{"class":318},"        [25, 26],\n",[203,99784,99785],{"class":205,"line":2699},[203,99786,99787],{"class":318},"        [31, 32]]),\n",[203,99789,99790],{"class":205,"line":2705},[203,99791,99792],{"class":318}," array([[ 3,  4],\n",[203,99794,99795],{"class":205,"line":2710},[203,99796,99797],{"class":318},"        [ 9, 10],\n",[203,99799,99800],{"class":205,"line":8038},[203,99801,99802],{"class":318},"        [15, 16],\n",[203,99804,99805],{"class":205,"line":8062},[203,99806,99807],{"class":318},"        [21, 22],\n",[203,99809,99810],{"class":205,"line":8067},[203,99811,99812],{"class":318},"        [27, 28],\n",[203,99814,99815],{"class":205,"line":8073},[203,99816,99817],{"class":318},"        [33, 34]]),\n",[203,99819,99820],{"class":205,"line":8100},[203,99821,99822],{"class":318}," array([[ 5,  6],\n",[203,99824,99825],{"class":205,"line":8105},[203,99826,99827],{"class":318},"        [11, 12],\n",[203,99829,99830],{"class":205,"line":8111},[203,99831,99832],{"class":318},"        [17, 18],\n",[203,99834,99835],{"class":205,"line":8123},[203,99836,99837],{"class":318},"        [23, 24],\n",[203,99839,99840],{"class":205,"line":8135},[203,99841,99842],{"class":318},"        [29, 30],\n",[203,99844,99845],{"class":205,"line":8147},[203,99846,99847],{"class":318},"        [35, 36]])]\n",[203,99849,99850],{"class":205,"line":9806},[203,99851,99672],{"class":318},[203,99853,99854],{"class":205,"line":9831},[203,99855,99532],{"class":272},[203,99857,99858,99860,99862,99864,99866,99868,99870,99872,99874],{"class":205,"line":9854},[203,99859,99681],{"class":213},[203,99861,431],{"class":262},[203,99863,592],{"class":213},[203,99865,291],{"class":262},[203,99867,41667],{"class":213},[203,99869,47572],{"class":5306},[203,99871,259],{"class":209},[203,99873,431],{"class":262},[203,99875,220],{"class":213},[203,99877,99878],{"class":205,"line":9878},[203,99879,93622],{"class":272},[203,99881,99882],{"class":205,"line":9883},[203,99883,93986],{"class":318},[203,99885,99886],{"class":205,"line":9888},[203,99887,99888],{"class":318},"[array([[ 1],\n",[203,99890,99891],{"class":205,"line":9893},[203,99892,99893],{"class":318},"        [ 7],\n",[203,99895,99896],{"class":205,"line":9902},[203,99897,99898],{"class":318},"        [13],\n",[203,99900,99901],{"class":205,"line":9907},[203,99902,99903],{"class":318},"        [19],\n",[203,99905,99906],{"class":205,"line":9913},[203,99907,99908],{"class":318},"        [25],\n",[203,99910,99911],{"class":205,"line":9934},[203,99912,99913],{"class":318},"        [31]]),\n",[203,99915,99916],{"class":205,"line":9940},[203,99917,99918],{"class":318}," array([[ 2],\n",[203,99920,99921],{"class":205,"line":9954},[203,99922,99923],{"class":318},"        [ 8],\n",[203,99925,99926],{"class":205,"line":9960},[203,99927,99928],{"class":318},"        [14],\n",[203,99930,99931],{"class":205,"line":9987},[203,99932,99933],{"class":318},"        [20],\n",[203,99935,99936],{"class":205,"line":9996},[203,99937,99938],{"class":318},"        [26],\n",[203,99940,99941],{"class":205,"line":10002},[203,99942,99943],{"class":318},"        [32]]),\n",[203,99945,99946],{"class":205,"line":10010},[203,99947,99948],{"class":318}," array([[ 3,  4,  5,  6],\n",[203,99950,99951],{"class":205,"line":10015},[203,99952,99953],{"class":318},"        [ 9, 10, 11, 12],\n",[203,99955,99956],{"class":205,"line":16694},[203,99957,99958],{"class":318},"        [15, 16, 17, 18],\n",[203,99960,99961],{"class":205,"line":16700},[203,99962,99963],{"class":318},"        [21, 22, 23, 24],\n",[203,99965,99966],{"class":205,"line":16723},[203,99967,99968],{"class":318},"        [27, 28, 29, 30],\n",[203,99970,99971],{"class":205,"line":16729},[203,99972,99973],{"class":318},"        [33, 34, 35, 36]])]\n",[203,99975,99976],{"class":205,"line":16752},[203,99977,93986],{"class":318},[203,99979,99980],{"class":205,"line":16766},[203,99981,99982],{"class":272},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[203,99984,99985,99988,99990],{"class":205,"line":16786},[203,99986,99987],{"class":213},"np.vsplit(aa,",[203,99989,285],{"class":262},[203,99991,220],{"class":213},[203,99993,99994],{"class":205,"line":16792},[203,99995,93622],{"class":272},[203,99997,99998],{"class":205,"line":16803},[203,99999,93986],{"class":318},[203,100001,100002],{"class":205,"line":16826},[203,100003,99642],{"class":318},[203,100005,100006],{"class":205,"line":16848},[203,100007,99647],{"class":318},[203,100009,100010],{"class":205,"line":16853},[203,100011,99652],{"class":318},[203,100013,100014],{"class":205,"line":16859},[203,100015,99657],{"class":318},[203,100017,100018],{"class":205,"line":16873},[203,100019,99662],{"class":318},[203,100021,100022],{"class":205,"line":16886},[203,100023,99667],{"class":318},[203,100025,100026],{"class":205,"line":16891},[203,100027,93986],{"class":318},[203,100029,100030,100033,100035],{"class":205,"line":16905},[203,100031,100032],{"class":213},"np.hsplit(aa,",[203,100034,285],{"class":262},[203,100036,220],{"class":213},[203,100038,100039],{"class":205,"line":16910},[203,100040,93622],{"class":272},[203,100042,100043],{"class":205,"line":16916},[203,100044,93986],{"class":318},[203,100046,100047],{"class":205,"line":16921},[203,100048,99762],{"class":318},[203,100050,100051],{"class":205,"line":16935},[203,100052,99767],{"class":318},[203,100054,100055],{"class":205,"line":16940},[203,100056,99772],{"class":318},[203,100058,100059],{"class":205,"line":16945},[203,100060,99777],{"class":318},[203,100062,100063],{"class":205,"line":16959},[203,100064,99782],{"class":318},[203,100066,100067],{"class":205,"line":16971},[203,100068,99787],{"class":318},[203,100070,100071],{"class":205,"line":16976},[203,100072,99792],{"class":318},[203,100074,100075],{"class":205,"line":16989},[203,100076,99797],{"class":318},[203,100078,100079],{"class":205,"line":16994},[203,100080,99802],{"class":318},[203,100082,100083],{"class":205,"line":16999},[203,100084,99807],{"class":318},[203,100086,100087],{"class":205,"line":17004},[203,100088,99812],{"class":318},[203,100090,100091],{"class":205,"line":17017},[203,100092,99817],{"class":318},[203,100094,100095],{"class":205,"line":17022},[203,100096,99822],{"class":318},[203,100098,100099],{"class":205,"line":32691},[203,100100,99827],{"class":318},[203,100102,100103],{"class":205,"line":32697},[203,100104,99832],{"class":318},[203,100106,100107],{"class":205,"line":32703},[203,100108,99837],{"class":318},[203,100110,100111],{"class":205,"line":32709},[203,100112,99842],{"class":318},[203,100114,100115],{"class":205,"line":32715},[203,100116,99847],{"class":318},[203,100118,100119],{"class":205,"line":32726},[203,100120,93986],{"class":318},[203,100122,100123,100126,100128,100130,100132],{"class":205,"line":32732},[203,100124,100125],{"class":213},"np.vsplit(aa,[",[203,100127,291],{"class":262},[203,100129,592],{"class":213},[203,100131,533],{"class":262},[203,100133,4746],{"class":213},[203,100135,100136],{"class":205,"line":32752},[203,100137,93622],{"class":272},[203,100139,100140],{"class":205,"line":32758},[203,100141,93986],{"class":318},[203,100143,100144],{"class":205,"line":32769},[203,100145,99642],{"class":318},[203,100147,100148],{"class":205,"line":32775},[203,100149,99647],{"class":318},[203,100151,100152],{"class":205,"line":32781},[203,100153,99652],{"class":318},[203,100155,100156],{"class":205,"line":32787},[203,100157,99714],{"class":318},[203,100159,100160],{"class":205,"line":32793},[203,100161,99719],{"class":318},[203,100163,100164],{"class":205,"line":32799},[203,100165,99724],{"class":318},[203,100167,100168],{"class":205,"line":32805},[203,100169,99672],{"class":318},[5216,100171,100172],{},"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":27,"searchDepth":124,"depth":124,"links":100174},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99440,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100181,"title":100182,"body":100183,"description":23467,"extension":129,"meta":100677,"navigation":131,"path":100678,"seo":100679,"stem":100680,"__hash__":100681},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100184,"toc":100668},[100185,100188,100191,100216,100220,100279,100331,100335,100337,100373,100427,100429,100467,100538,100542,100547,100551,100554,100587,100590,100594,100597,100600,100603,100606,100611,100615,100618,100621,100624,100627,100632,100636,100641,100644,100665],[10,100186,100182],{"id":100187},"_9数学函数",[19,100189,100190],{},"补充回顾：python的列表推导式",[194,100192,100194],{"className":30436,"code":100193,"language":30438,"meta":27,"style":27},"[1\u002Fi for i in a]\n",[200,100195,100196],{"__ignoreMap":27},[203,100197,100198,100200,100202,100204,100207,100209,100211,100213],{"class":205,"line":206},[203,100199,1104],{"class":213},[203,100201,431],{"class":262},[203,100203,798],{"class":209},[203,100205,100206],{"class":213},"i ",[203,100208,3114],{"class":209},[203,100210,9528],{"class":213},[203,100212,26101],{"class":209},[203,100214,100215],{"class":213}," a]\n",[14,100217,100219],{"id":100218},"_91-求倒数","9.1 求倒数",[194,100221,100223],{"className":30436,"code":100222,"language":30438,"meta":27,"style":27},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[200,100224,100225,100230,100258,100270],{"__ignoreMap":27},[203,100226,100227],{"class":205,"line":206},[203,100228,100229],{"class":272},"#数组求倒数\n",[203,100231,100232,100234,100236,100238,100240,100242,100244,100246,100248,100250,100252,100254,100256],{"class":205,"line":124},[203,100233,452],{"class":213},[203,100235,259],{"class":209},[203,100237,1104],{"class":213},[203,100239,431],{"class":262},[203,100241,592],{"class":213},[203,100243,291],{"class":262},[203,100245,592],{"class":213},[203,100247,285],{"class":262},[203,100249,592],{"class":213},[203,100251,507],{"class":262},[203,100253,592],{"class":213},[203,100255,533],{"class":262},[203,100257,33304],{"class":213},[203,100259,100260,100262,100264,100267],{"class":205,"line":1269},[203,100261,477],{"class":213},[203,100263,259],{"class":209},[203,100265,100266],{"class":213},"np.array(a)",[203,100268,100269],{"class":272},"#将列表转换为数组\n",[203,100271,100272,100274,100276],{"class":205,"line":1284},[203,100273,431],{"class":262},[203,100275,798],{"class":209},[203,100277,100278],{"class":213},"b\n",[194,100280,100282],{"className":30436,"code":100281,"language":30438,"meta":27,"style":27},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[200,100283,100284,100312,100321,100326],{"__ignoreMap":27},[203,100285,100286,100288,100290,100292,100294,100296,100298,100300,100302,100304,100306,100308,100310],{"class":205,"line":206},[203,100287,452],{"class":213},[203,100289,259],{"class":209},[203,100291,1104],{"class":213},[203,100293,431],{"class":262},[203,100295,592],{"class":213},[203,100297,291],{"class":262},[203,100299,592],{"class":213},[203,100301,285],{"class":262},[203,100303,592],{"class":213},[203,100305,507],{"class":262},[203,100307,592],{"class":213},[203,100309,533],{"class":262},[203,100311,33304],{"class":213},[203,100313,100314,100316,100318],{"class":205,"line":124},[203,100315,477],{"class":213},[203,100317,259],{"class":209},[203,100319,100320],{"class":213},"np.array(a)\n",[203,100322,100323],{"class":205,"line":1269},[203,100324,100325],{"class":272},"#调用numpy中的函数reciprocal()\n",[203,100327,100328],{"class":205,"line":1284},[203,100329,100330],{"class":213},"np.reciprocal(b)\n",[14,100332,100334],{"id":100333},"_92-求平方","9.2 求平方",[19,100336,94588],{},[194,100338,100340],{"className":30436,"code":100339,"language":30438,"meta":27,"style":27},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[200,100341,100342,100347,100352,100368],{"__ignoreMap":27},[203,100343,100344],{"class":205,"line":206},[203,100345,100346],{"class":272},"#square()，求平方\n",[203,100348,100349],{"class":205,"line":124},[203,100350,100351],{"class":272},"#一维数组\n",[203,100353,100354,100356,100358,100360,100362,100364,100366],{"class":205,"line":1269},[203,100355,452],{"class":213},[203,100357,259],{"class":209},[203,100359,93060],{"class":213},[203,100361,431],{"class":262},[203,100363,592],{"class":213},[203,100365,660],{"class":262},[203,100367,220],{"class":213},[203,100369,100370],{"class":205,"line":1284},[203,100371,100372],{"class":213},"np.square(a)\n",[194,100374,100376],{"className":30436,"code":100375,"language":30438,"meta":27,"style":27},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[200,100377,100378,100383,100388,100409],{"__ignoreMap":27},[203,100379,100380],{"class":205,"line":206},[203,100381,100382],{"class":272},"#或者通过循环遍历的形式来计算\n",[203,100384,100385],{"class":205,"line":124},[203,100386,100387],{"class":272},"#这是一个列表\n",[203,100389,100390,100393,100395,100397,100399,100401,100403,100406],{"class":205,"line":1269},[203,100391,100392],{"class":213},"[i",[203,100394,669],{"class":209},[203,100396,100206],{"class":213},[203,100398,3114],{"class":209},[203,100400,9528],{"class":213},[203,100402,26101],{"class":209},[203,100404,100405],{"class":213}," a]",[203,100407,100408],{"class":272},"#这个求完之后在数列当中\n",[203,100410,100411,100414,100416,100418,100420,100422,100424],{"class":205,"line":1284},[203,100412,100413],{"class":213},"np.array([i",[203,100415,669],{"class":209},[203,100417,100206],{"class":213},[203,100419,3114],{"class":209},[203,100421,9528],{"class":213},[203,100423,26101],{"class":209},[203,100425,100426],{"class":213}," a])\n",[19,100428,93349],{},[194,100430,100432],{"className":30436,"code":100431,"language":30438,"meta":27,"style":27},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[200,100433,100434,100438,100462],{"__ignoreMap":27},[203,100435,100436],{"class":205,"line":206},[203,100437,93359],{"class":272},[203,100439,100440,100442,100444,100446,100448,100450,100452,100454,100456,100458,100460],{"class":205,"line":124},[203,100441,93364],{"class":213},[203,100443,259],{"class":209},[203,100445,93060],{"class":213},[203,100447,431],{"class":262},[203,100449,592],{"class":213},[203,100451,737],{"class":262},[203,100453,93065],{"class":213},[203,100455,507],{"class":262},[203,100457,592],{"class":213},[203,100459,285],{"class":262},[203,100461,220],{"class":213},[203,100463,100464],{"class":205,"line":1269},[203,100465,100466],{"class":213},"np.square(aa)\n",[194,100468,100470],{"className":30436,"code":100469,"language":30438,"meta":27,"style":27},"#传统的方式\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",[200,100471,100472,100477,100486,100502,100518,100533],{"__ignoreMap":27},[203,100473,100474],{"class":205,"line":206},[203,100475,100476],{"class":272},"#传统的方式\n",[203,100478,100479,100481,100483],{"class":205,"line":124},[203,100480,98245],{"class":213},[203,100482,259],{"class":209},[203,100484,100485],{"class":213},"np.empty_like(aa)\n",[203,100487,100488,100490,100492,100494,100496,100498,100500],{"class":205,"line":1269},[203,100489,3114],{"class":209},[203,100491,9528],{"class":213},[203,100493,26101],{"class":209},[203,100495,32501],{"class":262},[203,100497,214],{"class":213},[203,100499,507],{"class":262},[203,100501,30844],{"class":213},[203,100503,100504,100506,100508,100510,100512,100514,100516],{"class":205,"line":1284},[203,100505,3290],{"class":209},[203,100507,9590],{"class":213},[203,100509,26101],{"class":209},[203,100511,32501],{"class":262},[203,100513,214],{"class":213},[203,100515,285],{"class":262},[203,100517,30844],{"class":213},[203,100519,100520,100523,100525,100528,100530],{"class":205,"line":1290},[203,100521,100522],{"class":213},"        bb[i,j]",[203,100524,259],{"class":209},[203,100526,100527],{"class":213},"aa[i,j]",[203,100529,669],{"class":209},[203,100531,100532],{"class":213},"aa[i,j]\n",[203,100534,100535],{"class":205,"line":1304},[203,100536,100537],{"class":213},"bb\n",[14,100539,100541],{"id":100540},"_93-求各元素的符号","9.3 求各元素的符号",[19,100543,100544],{},[25,100545],{"alt":27,"src":100546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,100548,100550],{"id":100549},"_94-modf函数","9.4 modf函数",[19,100552,100553],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[194,100555,100557],{"className":30436,"code":100556,"language":30438,"meta":27,"style":27},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[200,100558,100559,100582],{"__ignoreMap":27},[203,100560,100561,100563,100565,100567,100569,100571,100573,100575,100577,100580],{"class":205,"line":206},[203,100562,452],{"class":213},[203,100564,259],{"class":209},[203,100566,93060],{"class":213},[203,100568,746],{"class":209},[203,100570,660],{"class":262},[203,100572,592],{"class":213},[203,100574,660],{"class":262},[203,100576,592],{"class":213},[203,100578,100579],{"class":262},"0.3",[203,100581,220],{"class":213},[203,100583,100584],{"class":205,"line":124},[203,100585,100586],{"class":213},"np.modf(a)\n",[19,100588,100589],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,100591,100593],{"id":100592},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,100595,100596],{},"np.cell()",[19,100598,100599],{},"np.floor()",[19,100601,100602],{},"np.rint()",[19,100604,100605],{},"对各元素分别向上取整、向下取整、四舍五入",[19,100607,100608],{},[25,100609],{"alt":27,"src":100610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,100612,100614],{"id":100613},"_96-around函数","9.6 around()函数",[19,100616,100617],{},"around()函数也可以实现对数的小数位数进行操作",[19,100619,100620],{},"其中的参数：",[19,100622,100623],{},"1.要传的数组",[19,100625,100626],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,100628,100629],{},[25,100630],{"alt":27,"src":100631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,100633,100635],{"id":100634},"_97-三角函数","9.7 三角函数",[19,100637,100638],{},[25,100639],{"alt":27,"src":100640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,100642,100643],{},"引入图像模块非常重要",[194,100645,100647],{"className":30436,"code":100646,"language":30438,"meta":27,"style":27},"from matplotlib import pyplot as plt\n",[200,100648,100649],{"__ignoreMap":27},[203,100650,100651,100653,100656,100658,100661,100663],{"class":205,"line":206},[203,100652,30795],{"class":209},[203,100654,100655],{"class":213}," matplotlib ",[203,100657,30450],{"class":209},[203,100659,100660],{"class":213}," pyplot ",[203,100662,31441],{"class":209},[203,100664,31495],{"class":213},[5216,100666,100667],{},"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":27,"searchDepth":124,"depth":124,"links":100669},[100670,100671,100672,100673,100674,100675,100676],{"id":100218,"depth":124,"text":100219},{"id":100333,"depth":124,"text":100334},{"id":100540,"depth":124,"text":100541},{"id":100549,"depth":124,"text":100550},{"id":100592,"depth":124,"text":100593},{"id":100613,"depth":124,"text":100614},{"id":100634,"depth":124,"text":100635},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100182,"description":23467},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100683,"title":100684,"body":100685,"description":23467,"extension":129,"meta":100689,"navigation":131,"path":100690,"seo":100691,"stem":100692,"__hash__":100693},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100686,"toc":100687},[],{"title":27,"searchDepth":124,"depth":124,"links":100688},[],{"category":50478},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100684,"description":23467},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100695,"title":100696,"body":100697,"description":27,"extension":129,"meta":102705,"navigation":131,"path":102706,"seo":102707,"stem":102708,"__hash__":102709},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100698,"toc":102681},[100699,100702,100706,100709,100712,100718,100721,100744,100747,100781,100784,100825,100829,100832,100925,100928,100972,100975,100992,100995,101009,101012,101015,101060,101063,101100,101104,101107,101113,101118,101138,101142,101145,101211,101214,101232,101236,101239,101268,101278,101284,101288,101291,101297,101308,101312,101315,101345,101348,101628,101631,101634,101645,101648,101651,101673,101680,101683,101701,101704,101707,101721,101729,101732,101758,101764,101767,101770,101780,101792,101812,101821,101841,101851,101875,101888,101902,101907,101948,101965,101990,102002,102022,102028,102073,102092,102109,102122,102138,102145,102157,102166,102201,102222,102247,102260,102284,102299,102324,102327,102348,102357,102360,102371,102375,102378,102384,102396,102403,102407,102410,102422,102425,102439,102442,102452,102462,102465,102505,102508,102512,102518,102521,102535,102539,102542,102575,102579,102582,102605,102613,102616,102622,102628,102631,102634,102662,102666,102669,102675,102678],[10,100700,100696],{"id":100701},"_1环境安装与第一个-mujoco-程序",[14,100703,100705],{"id":100704},"_1目标说明","1.目标说明",[19,100707,100708],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,100710,100711],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[194,100713,100716],{"className":100714,"code":100715,"language":5277,"meta":27},[5275],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[200,100717,100715],{"__ignoreMap":27},[19,100719,100720],{},"需要掌握:",[157,100722,100723,100726,100729,100734,100739],{},[160,100724,100725],{},"Fedora 44 下 MuJoCo 的系统依赖",[160,100727,100728],{},"Python 虚拟环境创建",[160,100730,100731],{},[200,100732,100733],{},"mujoco.MjModel",[160,100735,100736],{},[200,100737,100738],{},"mujoco.MjData",[160,100740,100741],{},[200,100742,100743],{},"mujoco.mj_step(model, data)",[19,100745,100746],{},"MuJoCo 中最重要的两个对象:",[351,100748,100749,100759],{},[354,100750,100751],{},[357,100752,100753,100756],{},[360,100754,100755],{"align":23827},"对象",[360,100757,100758],{"align":23827},"含义",[398,100760,100761,100771],{},[357,100762,100763,100768],{},[403,100764,100765],{"align":23827},[200,100766,100767],{},"MjModel",[403,100769,100770],{"align":23827},"模型结构，来自 XML，基本不随时间变化",[357,100772,100773,100778],{},[403,100774,100775],{"align":23827},[200,100776,100777],{},"MjData",[403,100779,100780],{"align":23827},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,100782,100783],{},"可以先用一个类比理解：",[351,100785,100786,100796],{},[354,100787,100788],{},[357,100789,100790,100793],{},[360,100791,100792],{"align":23827},"类比",[360,100794,100795],{"align":23827},"MuJoCo 对象",[398,100797,100798,100807,100816],{},[357,100799,100800,100803],{},[403,100801,100802],{"align":23827},"游戏地图和角色配置",[403,100804,100805],{"align":23827},[200,100806,100767],{},[357,100808,100809,100812],{},[403,100810,100811],{"align":23827},"游戏运行到当前帧的状态",[403,100813,100814],{"align":23827},[200,100815,100777],{},[357,100817,100818,100821],{},[403,100819,100820],{"align":23827},"前进一帧",[403,100822,100823],{"align":23827},[200,100824,100743],{},[14,100826,100828],{"id":100827},"_2环境与依赖安装","2.环境与依赖安装",[19,100830,100831],{},"Fedora 44 系统依赖:",[194,100833,100835],{"className":23913,"code":100834,"language":23915,"meta":27,"style":27},"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",[200,100836,100837,100849,100862,100875,100885,100895,100914],{"__ignoreMap":27},[203,100838,100839,100841,100843,100845,100847],{"class":205,"line":206},[203,100840,24634],{"class":2052},[203,100842,26373],{"class":318},[203,100844,23925],{"class":318},[203,100846,26458],{"class":262},[203,100848,24736],{"class":262},[203,100850,100851,100854,100857,100860],{"class":205,"line":124},[203,100852,100853],{"class":318},"  python3",[203,100855,100856],{"class":318}," python3-pip",[203,100858,100859],{"class":318}," python3-virtualenv",[203,100861,24736],{"class":262},[203,100863,100864,100867,100870,100873],{"class":205,"line":1269},[203,100865,100866],{"class":318},"  mesa-libGL",[203,100868,100869],{"class":318}," mesa-libGLU",[203,100871,100872],{"class":318}," mesa-dri-drivers",[203,100874,24736],{"class":262},[203,100876,100877,100880,100883],{"class":205,"line":1284},[203,100878,100879],{"class":318},"  libglvnd-glx",[203,100881,100882],{"class":318}," libglvnd-opengl",[203,100884,24736],{"class":262},[203,100886,100887,100890,100893],{"class":205,"line":1290},[203,100888,100889],{"class":318},"  glfw",[203,100891,100892],{"class":318}," glfw-devel",[203,100894,24736],{"class":262},[203,100896,100897,100900,100903,100906,100909,100912],{"class":205,"line":1304},[203,100898,100899],{"class":318},"  libX11",[203,100901,100902],{"class":318}," libXcursor",[203,100904,100905],{"class":318}," libXi",[203,100907,100908],{"class":318}," libXinerama",[203,100910,100911],{"class":318}," libXrandr",[203,100913,24736],{"class":262},[203,100915,100916,100919,100922],{"class":205,"line":1310},[203,100917,100918],{"class":318},"  gcc",[203,100920,100921],{"class":318}," gcc-c++",[203,100923,100924],{"class":318}," make\n",[19,100926,100927],{},"创建 Python 环境:",[194,100929,100931],{"className":23913,"code":100930,"language":23915,"meta":27,"style":27},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[200,100932,100933,100947,100955],{"__ignoreMap":27},[203,100934,100935,100938,100941,100944],{"class":205,"line":206},[203,100936,100937],{"class":2052},"python3",[203,100939,100940],{"class":262}," -m",[203,100942,100943],{"class":318}," venv",[203,100945,100946],{"class":318}," .venv\n",[203,100948,100949,100952],{"class":205,"line":124},[203,100950,100951],{"class":262},"source",[203,100953,100954],{"class":318}," .venv\u002Fbin\u002Factivate\n",[203,100956,100957,100959,100961,100964,100966,100969],{"class":205,"line":1269},[203,100958,30438],{"class":2052},[203,100960,100940],{"class":262},[203,100962,100963],{"class":318}," pip",[203,100965,23925],{"class":318},[203,100967,100968],{"class":262}," --upgrade",[203,100970,100971],{"class":318}," pip\n",[19,100973,100974],{},"pip 安装:",[194,100976,100978],{"className":23913,"code":100977,"language":23915,"meta":27,"style":27},"pip install \"mujoco>=2.3\" numpy\n",[200,100979,100980],{"__ignoreMap":27},[203,100981,100982,100984,100986,100989],{"class":205,"line":206},[203,100983,23922],{"class":2052},[203,100985,23925],{"class":318},[203,100987,100988],{"class":318}," \"mujoco>=2.3\"",[203,100990,100991],{"class":318}," numpy\n",[19,100993,100994],{},"安装完成后，先做最小检查：",[194,100996,100998],{"className":23913,"code":100997,"language":23915,"meta":27,"style":27},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[200,100999,101000],{"__ignoreMap":27},[203,101001,101002,101004,101006],{"class":205,"line":206},[203,101003,30438],{"class":2052},[203,101005,30416],{"class":262},[203,101007,101008],{"class":318}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101010,101011],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101013,101014],{},"conda 安装:",[194,101016,101018],{"className":23913,"code":101017,"language":23915,"meta":27,"style":27},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[200,101019,101020,101040,101050],{"__ignoreMap":27},[203,101021,101022,101024,101026,101028,101031,101034,101037],{"class":205,"line":206},[203,101023,30388],{"class":2052},[203,101025,29234],{"class":318},[203,101027,25173],{"class":262},[203,101029,101030],{"class":318}," mujoco-study",[203,101032,101033],{"class":318}," python=",[203,101035,101036],{"class":262},"3.10",[203,101038,101039],{"class":262}," -y\n",[203,101041,101042,101044,101047],{"class":205,"line":124},[203,101043,30388],{"class":2052},[203,101045,101046],{"class":318}," activate",[203,101048,101049],{"class":318}," mujoco-study\n",[203,101051,101052,101054,101056,101058],{"class":205,"line":1269},[203,101053,23922],{"class":2052},[203,101055,23925],{"class":318},[203,101057,100988],{"class":318},[203,101059,100991],{"class":318},[19,101061,101062],{},"版本冲突说明:",[157,101064,101065,101071,101081,101090],{},[160,101066,101067,101068,28443],{},"不要安装 ",[200,101069,101070],{},"mujoco-py",[160,101072,101073,101074,101076,101077,101080],{},"如果旧项目里同时安装了 ",[200,101075,101070],{}," 和 ",[200,101078,101079],{},"mujoco","，建议新建干净虚拟环境。",[160,101082,101083,101086,101087,28443],{},[200,101084,101085],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[200,101088,101089],{},"~\u002F.mujoco\u002Fmujoco210",[160,101091,101092,101093,82597,101096,101099],{},"离屏渲染可能涉及 OpenGL 后端，",[200,101094,101095],{},"MUJOCO_GL=egl",[200,101097,101098],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101101,101103],{"id":101102},"_3核心概念解释","3.核心概念解释",[19,101105,101106],{},"MuJoCo 的基本执行流程:",[194,101108,101111],{"className":101109,"code":101110,"language":5277,"meta":27},[5275],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[200,101112,101110],{"__ignoreMap":27},[19,101114,101115,101117],{},[200,101116,100767],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101119,101120,101122,101123,426,101126,426,101129,426,101132,426,101135,28443],{},[200,101121,100777],{}," 存放仿真运行时状态，例如 ",[200,101124,101125],{},"data.time",[200,101127,101128],{},"data.qpos",[200,101130,101131],{},"data.qvel",[200,101133,101134],{},"data.ctrl",[200,101136,101137],{},"data.xpos",[174,101139,101141],{"id":101140},"xml-是什么","XML 是什么",[19,101143,101144],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[194,101146,101148],{"className":53125,"code":101147,"language":53127,"meta":27,"style":27},"\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",[200,101149,101150,101172,101203],{"__ignoreMap":27},[203,101151,101152,101154,101156,101158,101160,101162,101165,101167,101170],{"class":205,"line":206},[203,101153,1124],{"class":213},[203,101155,51858],{"class":51358},[203,101157,15010],{"class":2052},[203,101159,259],{"class":213},[203,101161,53549],{"class":318},[203,101163,101164],{"class":2052}," pos",[203,101166,259],{"class":213},[203,101168,101169],{"class":318},"\"0 0 1\"",[203,101171,51365],{"class":213},[203,101173,101174,101176,101179,101181,101183,101186,101188,101190,101192,101195,101197,101200],{"class":205,"line":124},[203,101175,52202],{"class":213},[203,101177,101178],{"class":51358},"geom",[203,101180,15010],{"class":2052},[203,101182,259],{"class":213},[203,101184,101185],{"class":318},"\"box_geom\"",[203,101187,53882],{"class":2052},[203,101189,259],{"class":213},[203,101191,53549],{"class":318},[203,101193,101194],{"class":2052}," size",[203,101196,259],{"class":213},[203,101198,101199],{"class":318},"\"0.1 0.1 0.1\"",[203,101201,101202],{"class":213},"\u002F>\n",[203,101204,101205,101207,101209],{"class":205,"line":1269},[203,101206,51843],{"class":213},[203,101208,51858],{"class":51358},[203,101210,51365],{"class":213},[19,101212,101213],{},"这段意思是：",[157,101215,101216,101222,101229],{},[160,101217,101218,101219,101221],{},"创建一个叫 ",[200,101220,53772],{}," 的刚体。",[160,101223,101224,101225,101228],{},"它初始放在 ",[200,101226,101227],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[160,101230,101231],{},"它里面有一个盒子形状的几何体。",[174,101233,101235],{"id":101234},"timestep-是什么","timestep 是什么",[19,101237,101238],{},"XML 里的：",[194,101240,101242],{"className":53125,"code":101241,"language":53127,"meta":27,"style":27},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[200,101243,101244],{"__ignoreMap":27},[203,101245,101246,101248,101250,101253,101255,101258,101261,101263,101266],{"class":205,"line":206},[203,101247,1124],{"class":213},[203,101249,69224],{"class":51358},[203,101251,101252],{"class":2052}," timestep",[203,101254,259],{"class":213},[203,101256,101257],{"class":318},"\"0.01\"",[203,101259,101260],{"class":2052}," gravity",[203,101262,259],{"class":213},[203,101264,101265],{"class":318},"\"0 0 -9.81\"",[203,101267,101202],{"class":213},[19,101269,101270,101271,101274,101275,101277],{},"表示每调用一次 ",[200,101272,101273],{},"mj_step","，仿真时间前进 ",[200,101276,39044],{}," 秒。循环 100 次，大约就是 1 秒：",[194,101279,101282],{"className":101280,"code":101281,"language":5277,"meta":27},[5275],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[200,101283,101281],{"__ignoreMap":27},[174,101285,101287],{"id":101286},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101289,101290],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[194,101292,101295],{"className":101293,"code":101294,"language":5277,"meta":27},[5275],"x y z qw qx qy qz\n",[200,101296,101294],{"__ignoreMap":27},[19,101298,101299,101300,101303,101304,101307],{},"表示一个自由刚体的位置和姿态。其中 ",[200,101301,101302],{},"x y z"," 是位置，",[200,101305,101306],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101309,101311],{"id":101310},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101313,101314],{},"新建文件:",[194,101316,101318],{"className":23913,"code":101317,"language":23915,"meta":27,"style":27},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[200,101319,101320,101330,101337],{"__ignoreMap":27},[203,101321,101322,101325,101327],{"class":205,"line":206},[203,101323,101324],{"class":2052},"mkdir",[203,101326,29274],{"class":262},[203,101328,101329],{"class":318}," mujoco_tutorial\n",[203,101331,101332,101335],{"class":205,"line":124},[203,101333,101334],{"class":262},"cd",[203,101336,101329],{"class":318},[203,101338,101339,101342],{"class":205,"line":1269},[203,101340,101341],{"class":2052},"touch",[203,101343,101344],{"class":318}," ch1_first_sim.py\n",[19,101346,101347],{},"写入:",[194,101349,101351],{"className":30436,"code":101350,"language":30438,"meta":27,"style":27},"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",[200,101352,101353,101360,101364,101368,101378,101383,101388,101392,101397,101402,101406,101411,101416,101421,101426,101431,101436,101440,101444,101448,101461,101475,101485,101489,101501,101513,101525,101537,101549,101553,101570,101575,101579,101590,101601,101605,101609,101623],{"__ignoreMap":27},[203,101354,101355,101357],{"class":205,"line":206},[203,101356,30450],{"class":209},[203,101358,101359],{"class":213}," mujoco\n",[203,101361,101362],{"class":205,"line":124},[203,101363,2489],{"emptyLinePlaceholder":131},[203,101365,101366],{"class":205,"line":1269},[203,101367,2489],{"emptyLinePlaceholder":131},[203,101369,101370,101373,101375],{"class":205,"line":1284},[203,101371,101372],{"class":262},"XML",[203,101374,13654],{"class":209},[203,101376,101377],{"class":318}," \"\"\"\n",[203,101379,101380],{"class":205,"line":1290},[203,101381,101382],{"class":318},"\u003Cmujoco model=\"first_sim\">\n",[203,101384,101385],{"class":205,"line":1304},[203,101386,101387],{"class":318},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[203,101389,101390],{"class":205,"line":1310},[203,101391,2489],{"emptyLinePlaceholder":131},[203,101393,101394],{"class":205,"line":1401},[203,101395,101396],{"class":318},"  \u003Cworldbody>\n",[203,101398,101399],{"class":205,"line":1407},[203,101400,101401],{"class":318},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[203,101403,101404],{"class":205,"line":1419},[203,101405,2489],{"emptyLinePlaceholder":131},[203,101407,101408],{"class":205,"line":1701},[203,101409,101410],{"class":318},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[203,101412,101413],{"class":205,"line":1706},[203,101414,101415],{"class":318},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[203,101417,101418],{"class":205,"line":1712},[203,101419,101420],{"class":318},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[203,101422,101423],{"class":205,"line":1717},[203,101424,101425],{"class":318},"    \u003C\u002Fbody>\n",[203,101427,101428],{"class":205,"line":1731},[203,101429,101430],{"class":318},"  \u003C\u002Fworldbody>\n",[203,101432,101433],{"class":205,"line":1736},[203,101434,101435],{"class":318},"\u003C\u002Fmujoco>\n",[203,101437,101438],{"class":205,"line":1742},[203,101439,95756],{"class":318},[203,101441,101442],{"class":205,"line":1763},[203,101443,2489],{"emptyLinePlaceholder":131},[203,101445,101446],{"class":205,"line":1768},[203,101447,2489],{"emptyLinePlaceholder":131},[203,101449,101450,101452,101454,101457,101459],{"class":205,"line":1782},[203,101451,32005],{"class":209},[203,101453,2062],{"class":2052},[203,101455,101456],{"class":213},"() -> ",[203,101458,95744],{"class":262},[203,101460,3828],{"class":213},[203,101462,101463,101466,101468,101471,101473],{"class":205,"line":1787},[203,101464,101465],{"class":213},"    model ",[203,101467,259],{"class":209},[203,101469,101470],{"class":213}," mujoco.MjModel.from_xml_string(",[203,101472,101372],{"class":262},[203,101474,220],{"class":213},[203,101476,101477,101480,101482],{"class":205,"line":1816},[203,101478,101479],{"class":213},"    data ",[203,101481,259],{"class":209},[203,101483,101484],{"class":213}," mujoco.MjData(model)\n",[203,101486,101487],{"class":205,"line":1821},[203,101488,2489],{"emptyLinePlaceholder":131},[203,101490,101491,101493,101495,101498],{"class":205,"line":1838},[203,101492,31357],{"class":262},[203,101494,214],{"class":213},[203,101496,101497],{"class":318},"\"nq:\"",[203,101499,101500],{"class":213},", model.nq)\n",[203,101502,101503,101505,101507,101510],{"class":205,"line":1843},[203,101504,31357],{"class":262},[203,101506,214],{"class":213},[203,101508,101509],{"class":318},"\"nv:\"",[203,101511,101512],{"class":213},", model.nv)\n",[203,101514,101515,101517,101519,101522],{"class":205,"line":1848},[203,101516,31357],{"class":262},[203,101518,214],{"class":213},[203,101520,101521],{"class":318},"\"nu:\"",[203,101523,101524],{"class":213},", model.nu)\n",[203,101526,101527,101529,101531,101534],{"class":205,"line":1853},[203,101528,31357],{"class":262},[203,101530,214],{"class":213},[203,101532,101533],{"class":318},"\"initial time:\"",[203,101535,101536],{"class":213},", data.time)\n",[203,101538,101539,101541,101543,101546],{"class":205,"line":1867},[203,101540,31357],{"class":262},[203,101542,214],{"class":213},[203,101544,101545],{"class":318},"\"initial qpos:\"",[203,101547,101548],{"class":213},", data.qpos.copy())\n",[203,101550,101551],{"class":205,"line":1872},[203,101552,2489],{"emptyLinePlaceholder":131},[203,101554,101555,101557,101560,101562,101564,101566,101568],{"class":205,"line":2666},[203,101556,3290],{"class":209},[203,101558,101559],{"class":213}," _ ",[203,101561,26101],{"class":209},[203,101563,32501],{"class":262},[203,101565,214],{"class":213},[203,101567,525],{"class":262},[203,101569,30844],{"class":213},[203,101571,101572],{"class":205,"line":2680},[203,101573,101574],{"class":213},"        mujoco.mj_step(model, data)\n",[203,101576,101577],{"class":205,"line":2688},[203,101578,2489],{"emptyLinePlaceholder":131},[203,101580,101581,101583,101585,101588],{"class":205,"line":2693},[203,101582,31357],{"class":262},[203,101584,214],{"class":213},[203,101586,101587],{"class":318},"\"final time:\"",[203,101589,101536],{"class":213},[203,101591,101592,101594,101596,101599],{"class":205,"line":2699},[203,101593,31357],{"class":262},[203,101595,214],{"class":213},[203,101597,101598],{"class":318},"\"final qpos:\"",[203,101600,101548],{"class":213},[203,101602,101603],{"class":205,"line":2705},[203,101604,2489],{"emptyLinePlaceholder":131},[203,101606,101607],{"class":205,"line":2710},[203,101608,2489],{"emptyLinePlaceholder":131},[203,101610,101611,101613,101615,101618,101621],{"class":205,"line":8038},[203,101612,1620],{"class":209},[203,101614,31278],{"class":262},[203,101616,101617],{"class":209}," ==",[203,101619,101620],{"class":318}," \"__main__\"",[203,101622,3828],{"class":213},[203,101624,101625],{"class":205,"line":8062},[203,101626,101627],{"class":213},"    main()\n",[174,101629,101630],{"id":101630},"代码逐段解释",[19,101632,101633],{},"导入库：",[194,101635,101637],{"className":30436,"code":101636,"language":30438,"meta":27,"style":27},"import mujoco\n",[200,101638,101639],{"__ignoreMap":27},[203,101640,101641,101643],{"class":205,"line":206},[203,101642,30450],{"class":209},[203,101644,101359],{"class":213},[19,101646,101647],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,101649,101650],{},"定义 XML：",[194,101652,101654],{"className":30436,"code":101653,"language":30438,"meta":27,"style":27},"XML = \"\"\"\n...\n\"\"\"\n",[200,101655,101656,101664,101669],{"__ignoreMap":27},[203,101657,101658,101660,101662],{"class":205,"line":206},[203,101659,101372],{"class":262},[203,101661,13654],{"class":209},[203,101663,101377],{"class":318},[203,101665,101666],{"class":205,"line":124},[203,101667,101668],{"class":318},"...\n",[203,101670,101671],{"class":205,"line":1269},[203,101672,95756],{"class":318},[19,101674,101675,101676,101679],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[200,101677,101678],{},"freejoint"," 的方块。",[19,101681,101682],{},"编译模型：",[194,101684,101686],{"className":30436,"code":101685,"language":30438,"meta":27,"style":27},"model = mujoco.MjModel.from_xml_string(XML)\n",[200,101687,101688],{"__ignoreMap":27},[203,101689,101690,101693,101695,101697,101699],{"class":205,"line":206},[203,101691,101692],{"class":213},"model ",[203,101694,259],{"class":209},[203,101696,101470],{"class":213},[203,101698,101372],{"class":262},[203,101700,220],{"class":213},[19,101702,101703],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,101705,101706],{},"创建数据：",[194,101708,101710],{"className":30436,"code":101709,"language":30438,"meta":27,"style":27},"data = mujoco.MjData(model)\n",[200,101711,101712],{"__ignoreMap":27},[203,101713,101714,101717,101719],{"class":205,"line":206},[203,101715,101716],{"class":213},"data ",[203,101718,259],{"class":209},[203,101720,101484],{"class":213},[19,101722,101723,101725,101726,101728],{},[200,101724,33459],{}," 会保存仿真当前状态。刚创建时，时间是 ",[200,101727,405],{},"，方块还在初始位置。",[19,101730,101731],{},"推进仿真：",[194,101733,101735],{"className":30436,"code":101734,"language":30438,"meta":27,"style":27},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[200,101736,101737,101753],{"__ignoreMap":27},[203,101738,101739,101741,101743,101745,101747,101749,101751],{"class":205,"line":206},[203,101740,3114],{"class":209},[203,101742,101559],{"class":213},[203,101744,26101],{"class":209},[203,101746,32501],{"class":262},[203,101748,214],{"class":213},[203,101750,525],{"class":262},[203,101752,30844],{"class":213},[203,101754,101755],{"class":205,"line":124},[203,101756,101757],{"class":213},"    mujoco.mj_step(model, data)\n",[19,101759,101760,101761,101763],{},"每次 ",[200,101762,101273],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[174,101765,101766],{"id":101766},"代码逐行细讲",[19,101768,101769],{},"下面把完整代码按新手视角拆开讲。",[194,101771,101772],{"className":30436,"code":101636,"language":30438,"meta":27,"style":27},[200,101773,101774],{"__ignoreMap":27},[203,101775,101776,101778],{"class":205,"line":206},[203,101777,30450],{"class":209},[203,101779,101359],{"class":213},[19,101781,101782,101784,101785,426,101787,426,101789,28443],{},[200,101783,30450],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[200,101786,100733],{},[200,101788,100738],{},[200,101790,101791],{},"mujoco.mj_step",[194,101793,101794],{"className":30436,"code":101653,"language":30438,"meta":27,"style":27},[200,101795,101796,101804,101808],{"__ignoreMap":27},[203,101797,101798,101800,101802],{"class":205,"line":206},[203,101799,101372],{"class":262},[203,101801,13654],{"class":209},[203,101803,101377],{"class":318},[203,101805,101806],{"class":205,"line":124},[203,101807,101668],{"class":318},[203,101809,101810],{"class":205,"line":1269},[203,101811,95756],{"class":318},[19,101813,101814,101816,101817,101820],{},[200,101815,101372],{}," 是一个变量名。右边的三引号 ",[200,101818,101819],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[194,101822,101823],{"className":53125,"code":101382,"language":53127,"meta":27,"style":27},[200,101824,101825],{"__ignoreMap":27},[203,101826,101827,101829,101831,101834,101836,101839],{"class":205,"line":206},[203,101828,1124],{"class":213},[203,101830,101079],{"class":51358},[203,101832,101833],{"class":2052}," model",[203,101835,259],{"class":213},[203,101837,101838],{"class":318},"\"first_sim\"",[203,101840,51365],{"class":213},[19,101842,101843,101844,101847,101848,28443],{},"这是 XML 的根标签。",[200,101845,101846],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[200,101849,101850],{},"first_sim",[194,101852,101853],{"className":53125,"code":101241,"language":53127,"meta":27,"style":27},[200,101854,101855],{"__ignoreMap":27},[203,101856,101857,101859,101861,101863,101865,101867,101869,101871,101873],{"class":205,"line":206},[203,101858,1124],{"class":213},[203,101860,69224],{"class":51358},[203,101862,101252],{"class":2052},[203,101864,259],{"class":213},[203,101866,101257],{"class":318},[203,101868,101260],{"class":2052},[203,101870,259],{"class":213},[203,101872,101265],{"class":318},[203,101874,101202],{"class":213},[19,101876,101877,101879,101880,101883,101884,101887],{},[200,101878,69224],{}," 用来设置仿真参数。",[200,101881,101882],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[200,101885,101886],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[194,101889,101891],{"className":53125,"code":101890,"language":53127,"meta":27,"style":27},"\u003Cworldbody>\n",[200,101892,101893],{"__ignoreMap":27},[203,101894,101895,101897,101900],{"class":205,"line":206},[203,101896,1124],{"class":213},[203,101898,101899],{"class":51358},"worldbody",[203,101901,51365],{"class":213},[19,101903,101904,101906],{},[200,101905,101899],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[194,101908,101910],{"className":53125,"code":101909,"language":53127,"meta":27,"style":27},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[200,101911,101912],{"__ignoreMap":27},[203,101913,101914,101916,101918,101920,101922,101925,101927,101929,101932,101934,101936,101939,101941,101943,101946],{"class":205,"line":206},[203,101915,1124],{"class":213},[203,101917,101178],{"class":51358},[203,101919,15010],{"class":2052},[203,101921,259],{"class":213},[203,101923,101924],{"class":318},"\"floor\"",[203,101926,53882],{"class":2052},[203,101928,259],{"class":213},[203,101930,101931],{"class":318},"\"plane\"",[203,101933,101194],{"class":2052},[203,101935,259],{"class":213},[203,101937,101938],{"class":318},"\"2 2 0.1\"",[203,101940,78825],{"class":2052},[203,101942,259],{"class":213},[203,101944,101945],{"class":318},"\"0.8 0.8 0.8 1\"",[203,101947,101202],{"class":213},[19,101949,101950,101951,101953,101954,101957,101958,101961,101962,101964],{},"这行创建地面。",[200,101952,101178],{}," 是几何体。",[200,101955,101956],{},"name=\"floor\""," 是名字。",[200,101959,101960],{},"type=\"plane\""," 表示平面。",[200,101963,55168],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[194,101966,101968],{"className":53125,"code":101967,"language":53127,"meta":27,"style":27},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[200,101969,101970],{"__ignoreMap":27},[203,101971,101972,101974,101976,101978,101980,101982,101984,101986,101988],{"class":205,"line":206},[203,101973,1124],{"class":213},[203,101975,51858],{"class":51358},[203,101977,15010],{"class":2052},[203,101979,259],{"class":213},[203,101981,53549],{"class":318},[203,101983,101164],{"class":2052},[203,101985,259],{"class":213},[203,101987,101169],{"class":318},[203,101989,51365],{"class":213},[19,101991,101992,101993,28443,101995,101998,101999,102001],{},"这行创建一个刚体，名字叫 ",[200,101994,53772],{},[200,101996,101997],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[200,102000,101227],{},"，也就是离地面 1 米高。",[194,102003,102005],{"className":53125,"code":102004,"language":53127,"meta":27,"style":27},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[200,102006,102007],{"__ignoreMap":27},[203,102008,102009,102011,102013,102015,102017,102020],{"class":205,"line":206},[203,102010,1124],{"class":213},[203,102012,101678],{"class":51358},[203,102014,15010],{"class":2052},[203,102016,259],{"class":213},[203,102018,102019],{"class":318},"\"box_free\"",[203,102021,101202],{"class":213},[19,102023,102024,102025,102027],{},"这行很重要。",[200,102026,101678],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[194,102029,102031],{"className":53125,"code":102030,"language":53127,"meta":27,"style":27},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[200,102032,102033],{"__ignoreMap":27},[203,102034,102035,102037,102039,102041,102043,102045,102047,102049,102051,102053,102055,102057,102060,102062,102064,102066,102068,102071],{"class":205,"line":206},[203,102036,1124],{"class":213},[203,102038,101178],{"class":51358},[203,102040,15010],{"class":2052},[203,102042,259],{"class":213},[203,102044,101185],{"class":318},[203,102046,53882],{"class":2052},[203,102048,259],{"class":213},[203,102050,53549],{"class":318},[203,102052,101194],{"class":2052},[203,102054,259],{"class":213},[203,102056,101199],{"class":318},[203,102058,102059],{"class":2052}," mass",[203,102061,259],{"class":213},[203,102063,3767],{"class":318},[203,102065,78825],{"class":2052},[203,102067,259],{"class":213},[203,102069,102070],{"class":318},"\"1 0 0 1\"",[203,102072,101202],{"class":213},[19,102074,102075,102076,102079,102080,102083,102084,102087,102088,102091],{},"这行给 box body 添加一个盒子形状。",[200,102077,102078],{},"type=\"box\""," 表示形状是盒子。",[200,102081,102082],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[200,102085,102086],{},"mass=\"1\""," 表示质量是 1。",[200,102089,102090],{},"rgba=\"1 0 0 1\""," 表示红色。",[194,102093,102095],{"className":30436,"code":102094,"language":30438,"meta":27,"style":27},"def main() -> None:\n",[200,102096,102097],{"__ignoreMap":27},[203,102098,102099,102101,102103,102105,102107],{"class":205,"line":206},[203,102100,32005],{"class":209},[203,102102,2062],{"class":2052},[203,102104,101456],{"class":213},[203,102106,95744],{"class":262},[203,102108,3828],{"class":213},[19,102110,102111,102113,102114,102117,102118,102121],{},[200,102112,32005],{}," 用来定义函数。这里定义了一个叫 ",[200,102115,102116],{},"main"," 的函数。",[200,102119,102120],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[194,102123,102124],{"className":30436,"code":101685,"language":30438,"meta":27,"style":27},[200,102125,102126],{"__ignoreMap":27},[203,102127,102128,102130,102132,102134,102136],{"class":205,"line":206},[203,102129,101692],{"class":213},[203,102131,259],{"class":209},[203,102133,101470],{"class":213},[203,102135,101372],{"class":262},[203,102137,220],{"class":213},[19,102139,102140,102141,102144],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[200,102142,102143],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[194,102146,102147],{"className":30436,"code":101709,"language":30438,"meta":27,"style":27},[200,102148,102149],{"__ignoreMap":27},[203,102150,102151,102153,102155],{"class":205,"line":206},[203,102152,101716],{"class":213},[203,102154,259],{"class":209},[203,102156,101484],{"class":213},[19,102158,102159,102160,102162,102163,102165],{},"这行创建仿真数据。",[200,102161,33459],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[200,102164,33459],{}," 都会变化。",[194,102167,102169],{"className":30436,"code":102168,"language":30438,"meta":27,"style":27},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[200,102170,102171,102181,102191],{"__ignoreMap":27},[203,102172,102173,102175,102177,102179],{"class":205,"line":206},[203,102174,30473],{"class":262},[203,102176,214],{"class":213},[203,102178,101497],{"class":318},[203,102180,101500],{"class":213},[203,102182,102183,102185,102187,102189],{"class":205,"line":124},[203,102184,30473],{"class":262},[203,102186,214],{"class":213},[203,102188,101509],{"class":318},[203,102190,101512],{"class":213},[203,102192,102193,102195,102197,102199],{"class":205,"line":1269},[203,102194,30473],{"class":262},[203,102196,214],{"class":213},[203,102198,101521],{"class":318},[203,102200,101524],{"class":213},[19,102202,102203,102205,102206,102209,102210,102213,102214,102217,102218,102221],{},[200,102204,30473],{}," 用来输出信息。",[200,102207,102208],{},"model.nq"," 是位置变量数量，",[200,102211,102212],{},"model.nv"," 是速度变量数量，",[200,102215,102216],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[200,102219,102220],{},"nu"," 是 0。",[194,102223,102225],{"className":30436,"code":102224,"language":30438,"meta":27,"style":27},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[200,102226,102227,102237],{"__ignoreMap":27},[203,102228,102229,102231,102233,102235],{"class":205,"line":206},[203,102230,30473],{"class":262},[203,102232,214],{"class":213},[203,102234,101533],{"class":318},[203,102236,101536],{"class":213},[203,102238,102239,102241,102243,102245],{"class":205,"line":124},[203,102240,30473],{"class":262},[203,102242,214],{"class":213},[203,102244,101545],{"class":318},[203,102246,101548],{"class":213},[19,102248,102249,102250,102252,102253,102255,102256,102259],{},"这里打印初始时间和初始位置。",[200,102251,101125],{}," 一开始是 0。",[200,102254,101128],{}," 是位置数组。",[200,102257,102258],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[194,102261,102262],{"className":30436,"code":101734,"language":30438,"meta":27,"style":27},[200,102263,102264,102280],{"__ignoreMap":27},[203,102265,102266,102268,102270,102272,102274,102276,102278],{"class":205,"line":206},[203,102267,3114],{"class":209},[203,102269,101559],{"class":213},[203,102271,26101],{"class":209},[203,102273,32501],{"class":262},[203,102275,214],{"class":213},[203,102277,525],{"class":262},[203,102279,30844],{"class":213},[203,102281,102282],{"class":205,"line":124},[203,102283,101757],{"class":213},[19,102285,102286,102288,102289,102292,102293,102295,102296,102298],{},[200,102287,3114],{}," 是循环。",[200,102290,102291],{},"range(100)"," 表示循环 100 次。",[200,102294,1206],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[200,102297,101273],{},"，仿真就前进一步。",[194,102300,102302],{"className":30436,"code":102301,"language":30438,"meta":27,"style":27},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[200,102303,102304,102314],{"__ignoreMap":27},[203,102305,102306,102308,102310,102312],{"class":205,"line":206},[203,102307,30473],{"class":262},[203,102309,214],{"class":213},[203,102311,101587],{"class":318},[203,102313,101536],{"class":213},[203,102315,102316,102318,102320,102322],{"class":205,"line":124},[203,102317,30473],{"class":262},[203,102319,214],{"class":213},[203,102321,101598],{"class":318},[203,102323,101548],{"class":213},[19,102325,102326],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[194,102328,102330],{"className":30436,"code":102329,"language":30438,"meta":27,"style":27},"if __name__ == \"__main__\":\n    main()\n",[200,102331,102332,102344],{"__ignoreMap":27},[203,102333,102334,102336,102338,102340,102342],{"class":205,"line":206},[203,102335,1620],{"class":209},[203,102337,31278],{"class":262},[203,102339,101617],{"class":209},[203,102341,101620],{"class":318},[203,102343,3828],{"class":213},[203,102345,102346],{"class":205,"line":124},[203,102347,101627],{"class":213},[19,102349,102350,102351,102354,102355,28443],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[200,102352,102353],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[200,102356,102353],{},[19,102358,102359],{},"运行:",[194,102361,102363],{"className":23913,"code":102362,"language":23915,"meta":27,"style":27},"python ch1_first_sim.py\n",[200,102364,102365],{"__ignoreMap":27},[203,102366,102367,102369],{"class":205,"line":206},[203,102368,30438],{"class":2052},[203,102370,101344],{"class":318},[14,102372,102374],{"id":102373},"_5运行结果说明","5.运行结果说明",[19,102376,102377],{},"你应该看到类似输出:",[194,102379,102382],{"className":102380,"code":102381,"language":5277,"meta":27},[5275],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[200,102383,102381],{"__ignoreMap":27},[19,102385,102386,102388,102389,102392,102393,28443],{},[200,102387,101678],{}," 有 7 个位置变量: ",[200,102390,102391],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[200,102394,102395],{},"vx vy vz wx wy wz",[19,102397,102398,102399,102402],{},"你还会看到 ",[200,102400,102401],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102404,102406],{"id":102405},"_6验证步骤","6.验证步骤",[19,102408,102409],{},"确认版本:",[194,102411,102412],{"className":23913,"code":100997,"language":23915,"meta":27,"style":27},[200,102413,102414],{"__ignoreMap":27},[203,102415,102416,102418,102420],{"class":205,"line":206},[203,102417,30438],{"class":2052},[203,102419,30416],{"class":262},[203,102421,101008],{"class":318},[19,102423,102424],{},"确认导入的是官方 bindings:",[194,102426,102428],{"className":23913,"code":102427,"language":23915,"meta":27,"style":27},"python -c \"import mujoco; print(mujoco)\"\n",[200,102429,102430],{"__ignoreMap":27},[203,102431,102432,102434,102436],{"class":205,"line":206},[203,102433,30438],{"class":2052},[203,102435,30416],{"class":262},[203,102437,102438],{"class":318}," \"import mujoco; print(mujoco)\"\n",[19,102440,102441],{},"运行程序:",[194,102443,102444],{"className":23913,"code":102362,"language":23915,"meta":27,"style":27},[200,102445,102446],{"__ignoreMap":27},[203,102447,102448,102450],{"class":205,"line":206},[203,102449,30438],{"class":2052},[203,102451,101344],{"class":318},[19,102453,102454,102455,102458,102459,28443],{},"检查 ",[200,102456,102457],{},"final time"," 是否约等于 ",[200,102460,102461],{},"1.0",[19,102463,102464],{},"再做几个小实验：",[157,102466,102467,102477,102485,102498],{},[160,102468,102469,102470,102472,102473,102476],{},"把 ",[200,102471,101997],{}," 改成 ",[200,102474,102475],{},"pos=\"0 0 2\"","，观察初始高度变化。",[160,102478,102469,102479,102472,102481,102484],{},[200,102480,101886],{},[200,102482,102483],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[160,102486,102469,102487,102472,102489,102492,102493,102495,102496,28443],{},[200,102488,101882],{},[200,102490,102491],{},"timestep=\"0.005\"","，观察 100 步后的 ",[200,102494,102457],{}," 是否变成约 ",[200,102497,35387],{},[160,102499,102500,102501,102504],{},"删除 ",[200,102502,102503],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102506,102507],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102509,102511],{"id":102510},"_7常见错误与解决方案","7.常见错误与解决方案",[174,102513,102515],{"id":102514},"modulenotfounderror-no-module-named-mujoco",[200,102516,102517],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102519,102520],{},"解决:",[194,102522,102524],{"className":23913,"code":102523,"language":23915,"meta":27,"style":27},"pip install \"mujoco>=2.3\"\n",[200,102525,102526],{"__ignoreMap":27},[203,102527,102528,102530,102532],{"class":205,"line":206},[203,102529,23922],{"class":2052},[203,102531,23925],{"class":318},[203,102533,102534],{"class":318}," \"mujoco>=2.3\"\n",[174,102536,102538],{"id":102537},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,102540,102541],{},"先安装系统依赖:",[194,102543,102545],{"className":23913,"code":102544,"language":23915,"meta":27,"style":27},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[200,102546,102547],{"__ignoreMap":27},[203,102548,102549,102551,102553,102555,102557,102560,102562,102565,102567,102570,102572],{"class":205,"line":206},[203,102550,24634],{"class":2052},[203,102552,26373],{"class":318},[203,102554,23925],{"class":318},[203,102556,26458],{"class":262},[203,102558,102559],{"class":318}," mesa-libGL",[203,102561,100872],{"class":318},[203,102563,102564],{"class":318}," glfw",[203,102566,100892],{"class":318},[203,102568,102569],{"class":318}," libX11",[203,102571,100905],{"class":318},[203,102573,102574],{"class":318}," libXrandr\n",[174,102576,102578],{"id":102577},"xml-解析失败","XML 解析失败",[19,102580,102581],{},"检查:",[157,102583,102584,102587,102590,102596],{},[160,102585,102586],{},"标签是否闭合",[160,102588,102589],{},"属性是否带引号",[160,102591,102592,102593],{},"根节点是否是 ",[200,102594,102595],{},"\u003Cmujoco>",[160,102597,102598,102600,102601,102604],{},[200,102599,51858],{}," 是否放在 ",[200,102602,102603],{},"\u003Cworldbody>"," 内部",[174,102606,102608,102610,102611],{"id":102607},"final-time-不是严格等于-10",[200,102609,102457],{}," 不是严格等于 ",[200,102612,102461],{},[19,102614,102615],{},"这通常不是错误。浮点数计算可能得到：",[194,102617,102620],{"className":102618,"code":102619,"language":5277,"meta":27},[5275],"1.0000000000000007\n",[200,102621,102619],{"__ignoreMap":27},[19,102623,102624,102625,102627],{},"只要接近 ",[200,102626,102461],{}," 就正常。",[174,102629,102630],{"id":102630},"方块没有掉下来",[19,102632,102633],{},"检查：",[157,102635,102636,102642,102648,102653],{},[160,102637,102638,102639],{},"方块 body 里是否有 ",[200,102640,102641],{},"\u003Cfreejoint\u002F>",[160,102643,102644,102645],{},"重力是否是 ",[200,102646,102647],{},"0 0 -9.81",[160,102649,102650,102651],{},"是否真的调用了 ",[200,102652,100743],{},[160,102654,102655,102656,102658,102659],{},"你看的是否是 ",[200,102657,102401],{},"，不是 ",[200,102660,102661],{},"initial qpos",[14,102663,102665],{"id":102664},"_8本章小结","8.本章小结",[19,102667,102668],{},"本章你已经完成了 MuJoCo 的最小闭环：",[194,102670,102673],{"className":102671,"code":102672,"language":5277,"meta":27},[5275],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[200,102674,102672],{"__ignoreMap":27},[19,102676,102677],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5216,102679,102680],{},"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":27,"searchDepth":124,"depth":124,"links":102682},[102683,102684,102685,102690,102694,102695,102696,102704],{"id":100704,"depth":124,"text":100705},{"id":100827,"depth":124,"text":100828},{"id":101102,"depth":124,"text":101103,"children":102686},[102687,102688,102689],{"id":101140,"depth":1269,"text":101141},{"id":101234,"depth":1269,"text":101235},{"id":101286,"depth":1269,"text":101287},{"id":101310,"depth":124,"text":101311,"children":102691},[102692,102693],{"id":101630,"depth":1269,"text":101630},{"id":101766,"depth":1269,"text":101766},{"id":102373,"depth":124,"text":102374},{"id":102405,"depth":124,"text":102406},{"id":102510,"depth":124,"text":102511,"children":102697},[102698,102699,102700,102701,102703],{"id":102514,"depth":1269,"text":102517},{"id":102537,"depth":1269,"text":102538},{"id":102577,"depth":1269,"text":102578},{"id":102607,"depth":1269,"text":102702},"final time 不是严格等于 1.0",{"id":102630,"depth":1269,"text":102630},{"id":102664,"depth":124,"text":102665},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100696,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102711,"title":102712,"body":102713,"description":27,"extension":129,"meta":104369,"navigation":131,"path":104370,"seo":104371,"stem":104372,"__hash__":104373},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102714,"toc":104345},[102715,102718,102720,102723,102726,102743,102838,102841,102847,102849,102851,102875,102878,102892,102895,102936,102938,102951,102953,102956,103004,103016,103019,103022,103028,103041,103108,103111,103130,103133,103136,103142,103144,103153,103156,103160,103169,103251,103260,103264,103270,103284,103294,103296,103626,103629,103641,103643,103654,103656,103659,103677,103680,103683,103701,103712,103715,103730,103740,103742,103763,103780,103800,103806,103846,103862,103878,103884,103887,103911,103927,103932,103962,103979,104004,104007,104022,104031,104046,104055,104070,104077,104079,104089,104102,104109,104112,104151,104158,104160,104212,104214,104220,104223,104230,104237,104240,104242,104260,104263,104266,104300,104312,104314,104317,104339,104342],[10,102716,102712],{"id":102717},"_2xml-与-mjcf-物理建模基础",[14,102719,100705],{"id":100704},[19,102721,102722],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,102724,102725],{},"本章结束后，你应该能看懂一个简单模型里：",[157,102727,102728,102731,102734,102737,102740],{},[160,102729,102730],{},"地面在哪里。",[160,102732,102733],{},"物体初始位置在哪里。",[160,102735,102736],{},"几何体是什么形状。",[160,102738,102739],{},"哪些 body 可以自由运动。",[160,102741,102742],{},"如何用名字在 Python 里找到 XML 中的对象。",[351,102744,102745,102755],{},[354,102746,102747],{},[357,102748,102749,102752],{},[360,102750,102751],{"align":23827},"标签",[360,102753,102754],{"align":23827},"作用",[398,102756,102757,102766,102776,102785,102795,102805,102818,102828],{},[357,102758,102759,102763],{},[403,102760,102761],{"align":23827},[200,102762,102595],{},[403,102764,102765],{"align":23827},"根节点",[357,102767,102768,102773],{},[403,102769,102770],{"align":23827},[200,102771,102772],{},"\u003Coption>",[403,102774,102775],{"align":23827},"仿真参数",[357,102777,102778,102782],{},[403,102779,102780],{"align":23827},[200,102781,102603],{},[403,102783,102784],{"align":23827},"世界中的物体",[357,102786,102787,102792],{},[403,102788,102789],{"align":23827},[200,102790,102791],{},"\u003Cbody>",[403,102793,102794],{"align":23827},"刚体",[357,102796,102797,102802],{},[403,102798,102799],{"align":23827},[200,102800,102801],{},"\u003Cgeom>",[403,102803,102804],{"align":23827},"几何体、碰撞体、可视体",[357,102806,102807,102815],{},[403,102808,102809,25036,102812],{"align":23827},[200,102810,102811],{},"\u003Cjoint>",[200,102813,102814],{},"\u003Cfreejoint>",[403,102816,102817],{"align":23827},"关节",[357,102819,102820,102825],{},[403,102821,102822],{"align":23827},[200,102823,102824],{},"\u003Csite>",[403,102826,102827],{"align":23827},"标记点",[357,102829,102830,102835],{},[403,102831,102832],{"align":23827},[200,102833,102834],{},"\u003Cactuator>",[403,102836,102837],{"align":23827},"控制器",[19,102839,102840],{},"初学时可以先记住：",[194,102842,102845],{"className":102843,"code":102844,"language":5277,"meta":27},[5275],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[200,102846,102844],{"__ignoreMap":27},[14,102848,100828],{"id":100827},[19,102850,100831],{},[194,102852,102854],{"className":23913,"code":102853,"language":23915,"meta":27,"style":27},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[200,102855,102856],{"__ignoreMap":27},[203,102857,102858,102860,102862,102864,102866,102868,102870,102872],{"class":205,"line":206},[203,102859,24634],{"class":2052},[203,102861,26373],{"class":318},[203,102863,23925],{"class":318},[203,102865,26458],{"class":262},[203,102867,102559],{"class":318},[203,102869,100872],{"class":318},[203,102871,102564],{"class":318},[203,102873,102874],{"class":318}," glfw-devel\n",[19,102876,102877],{},"pip:",[194,102879,102880],{"className":23913,"code":100977,"language":23915,"meta":27,"style":27},[200,102881,102882],{"__ignoreMap":27},[203,102883,102884,102886,102888,102890],{"class":205,"line":206},[203,102885,23922],{"class":2052},[203,102887,23925],{"class":318},[203,102889,100988],{"class":318},[203,102891,100991],{"class":318},[19,102893,102894],{},"conda:",[194,102896,102898],{"className":23913,"code":102897,"language":23915,"meta":27,"style":27},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[200,102899,102900,102917,102926],{"__ignoreMap":27},[203,102901,102902,102904,102906,102908,102911,102913,102915],{"class":205,"line":206},[203,102903,30388],{"class":2052},[203,102905,29234],{"class":318},[203,102907,25173],{"class":262},[203,102909,102910],{"class":318}," mujoco-xml",[203,102912,101033],{"class":318},[203,102914,101036],{"class":262},[203,102916,101039],{"class":262},[203,102918,102919,102921,102923],{"class":205,"line":124},[203,102920,30388],{"class":2052},[203,102922,101046],{"class":318},[203,102924,102925],{"class":318}," mujoco-xml\n",[203,102927,102928,102930,102932,102934],{"class":205,"line":1269},[203,102929,23922],{"class":2052},[203,102931,23925],{"class":318},[203,102933,100988],{"class":318},[203,102935,100991],{"class":318},[19,102937,101062],{},[157,102939,102940,102943,102948],{},[160,102941,102942],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[160,102944,102945,102946,28443],{},"本章使用基础标签，适用于 ",[200,102947,101085],{},[160,102949,102950],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,102952,101103],{"id":101102},[19,102954,102955],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[194,102957,102959],{"className":53125,"code":102958,"language":53127,"meta":27,"style":27},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[200,102960,102961,102975,102983,102988,102996],{"__ignoreMap":27},[203,102962,102963,102965,102967,102969,102971,102973],{"class":205,"line":206},[203,102964,1124],{"class":213},[203,102966,101079],{"class":51358},[203,102968,101833],{"class":2052},[203,102970,259],{"class":213},[203,102972,62737],{"class":318},[203,102974,51365],{"class":213},[203,102976,102977,102979,102981],{"class":205,"line":124},[203,102978,52202],{"class":213},[203,102980,101899],{"class":51358},[203,102982,51365],{"class":213},[203,102984,102985],{"class":205,"line":1269},[203,102986,102987],{"class":213},"    ...\n",[203,102989,102990,102992,102994],{"class":205,"line":1284},[203,102991,52475],{"class":213},[203,102993,101899],{"class":51358},[203,102995,51365],{"class":213},[203,102997,102998,103000,103002],{"class":205,"line":1290},[203,102999,51843],{"class":213},[203,103001,101079],{"class":51358},[203,103003,51365],{"class":213},[19,103005,103006,103008,103009,103011,103012,103015],{},[200,103007,51858],{}," 表示刚体。",[200,103010,101178],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[200,103013,103014],{},"joint"," 表示刚体相对父刚体如何运动。",[174,103017,103018],{"id":103018},"层级结构非常重要",[19,103020,103021],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[194,103023,103026],{"className":103024,"code":103025,"language":5277,"meta":27},[5275],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[200,103027,103025],{"__ignoreMap":27},[19,103029,103030,101076,103033,103036,103037,103040],{},[200,103031,103032],{},"red_box_geom",[200,103034,103035],{},"box_center"," 都属于 ",[200,103038,103039],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[194,103042,103044],{"className":53125,"code":103043,"language":53127,"meta":27,"style":27},"\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",[200,103045,103046,103066,103080,103100],{"__ignoreMap":27},[203,103047,103048,103050,103052,103054,103056,103058,103060,103062,103064],{"class":205,"line":206},[203,103049,1124],{"class":213},[203,103051,51858],{"class":51358},[203,103053,15010],{"class":2052},[203,103055,259],{"class":213},[203,103057,53549],{"class":318},[203,103059,101164],{"class":2052},[203,103061,259],{"class":213},[203,103063,101169],{"class":318},[203,103065,51365],{"class":213},[203,103067,103068,103070,103072,103074,103076,103078],{"class":205,"line":124},[203,103069,52202],{"class":213},[203,103071,101678],{"class":51358},[203,103073,15010],{"class":2052},[203,103075,259],{"class":213},[203,103077,102019],{"class":318},[203,103079,101202],{"class":213},[203,103081,103082,103084,103086,103088,103090,103092,103094,103096,103098],{"class":205,"line":1269},[203,103083,52202],{"class":213},[203,103085,101178],{"class":51358},[203,103087,53882],{"class":2052},[203,103089,259],{"class":213},[203,103091,53549],{"class":318},[203,103093,101194],{"class":2052},[203,103095,259],{"class":213},[203,103097,101199],{"class":318},[203,103099,101202],{"class":213},[203,103101,103102,103104,103106],{"class":205,"line":1284},[203,103103,51843],{"class":213},[203,103105,51858],{"class":51358},[203,103107,51365],{"class":213},[19,103109,103110],{},"含义:",[157,103112,103113,103119,103124,103127],{},[160,103114,103115,103116,103118],{},"创建名为 ",[200,103117,53772],{}," 的刚体",[160,103120,103121,103122],{},"初始位置在世界坐标 ",[200,103123,101227],{},[160,103125,103126],{},"它有一个自由关节",[160,103128,103129],{},"它有一个盒子几何体",[174,103131,103132],{"id":103132},"坐标怎么理解",[19,103134,103135],{},"MuJoCo 默认使用三维坐标：",[194,103137,103140],{"className":103138,"code":103139,"language":5277,"meta":27},[5275],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[200,103141,103139],{"__ignoreMap":27},[19,103143,14723],{},[194,103145,103147],{"className":53125,"code":103146,"language":53127,"meta":27,"style":27},"pos=\"0 0 1\"\n",[200,103148,103149],{"__ignoreMap":27},[203,103150,103151],{"class":205,"line":206},[203,103152,103146],{"class":213},[19,103154,103155],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[174,103157,103159],{"id":103158},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103161,103162,103163,82588,103166,103168],{},"不同 ",[200,103164,103165],{},"type",[200,103167,31554],{}," 含义不同：",[351,103170,103171,103186],{},[354,103172,103173],{},[357,103174,103175,103179,103184],{},[360,103176,103177],{"align":23827},[200,103178,103165],{},[360,103180,103181,103183],{"align":23827},[200,103182,31554],{}," 示例",[360,103185,100758],{"align":23827},[398,103187,103188,103202,103217,103236],{},[357,103189,103190,103194,103199],{},[403,103191,103192],{"align":23827},[200,103193,53772],{},[403,103195,103196],{"align":23827},[200,103197,103198],{},"size=\"0.1 0.2 0.3\"",[403,103200,103201],{"align":23827},"x\u002Fy\u002Fz 半边长，不是完整长度",[357,103203,103204,103209,103214],{},[403,103205,103206],{"align":23827},[200,103207,103208],{},"sphere",[403,103210,103211],{"align":23827},[200,103212,103213],{},"size=\"0.1\"",[403,103215,103216],{"align":23827},"球半径",[357,103218,103219,103224,103229],{},[403,103220,103221],{"align":23827},[200,103222,103223],{},"capsule",[403,103225,103226],{"align":23827},[200,103227,103228],{},"size=\"0.03\"",[403,103230,103231,103232,103235],{"align":23827},"胶囊半径，长度常用 ",[200,103233,103234],{},"fromto"," 指定",[357,103237,103238,103243,103248],{},[403,103239,103240],{"align":23827},[200,103241,103242],{},"plane",[403,103244,103245],{"align":23827},[200,103246,103247],{},"size=\"3 3 0.1\"",[403,103249,103250],{"align":23827},"可视平面大小，通常当地面",[19,103252,103253,103254,103256,103257,103259],{},"最容易踩坑的是 box：",[200,103255,102082],{}," 表示边长大约是 ",[200,103258,32095],{},"，因为 MuJoCo 用的是半边长。",[174,103261,103263],{"id":103262},"site-是什么","site 是什么",[19,103265,103266,103269],{},[200,103267,103268],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[157,103271,103272,103275,103278,103281],{},[160,103273,103274],{},"标记机械臂末端。",[160,103276,103277],{},"标记目标位置。",[160,103279,103280],{},"放传感器或相机参考点。",[160,103282,103283],{},"在 Python 中读取某个关键点的世界坐标。",[19,103285,103286,103287,101076,103290,103293],{},"在后面的 Reacher 任务中，",[200,103288,103289],{},"tip",[200,103291,103292],{},"target"," 就会用 site 表示。",[14,103295,101311],{"id":101310},[194,103297,103299],{"className":30436,"code":103298,"language":30438,"meta":27,"style":27},"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",[200,103300,103301,103307,103317,103321,103325,103333,103338,103342,103346,103350,103355,103359,103364,103369,103374,103379,103383,103387,103391,103395,103399,103403,103415,103427,103435,103439,103454,103469,103473,103486,103501,103514,103527,103531,103547,103551,103555,103566,103578,103590,103602,103606,103610,103622],{"__ignoreMap":27},[203,103302,103303,103305],{"class":205,"line":206},[203,103304,30450],{"class":209},[203,103306,101359],{"class":213},[203,103308,103309,103311,103313,103315],{"class":205,"line":124},[203,103310,30450],{"class":209},[203,103312,31438],{"class":213},[203,103314,31441],{"class":209},[203,103316,31444],{"class":213},[203,103318,103319],{"class":205,"line":1269},[203,103320,2489],{"emptyLinePlaceholder":131},[203,103322,103323],{"class":205,"line":1284},[203,103324,2489],{"emptyLinePlaceholder":131},[203,103326,103327,103329,103331],{"class":205,"line":1290},[203,103328,101372],{"class":262},[203,103330,13654],{"class":209},[203,103332,101377],{"class":318},[203,103334,103335],{"class":205,"line":1304},[203,103336,103337],{"class":318},"\u003Cmujoco model=\"xml_basic\">\n",[203,103339,103340],{"class":205,"line":1310},[203,103341,101387],{"class":318},[203,103343,103344],{"class":205,"line":1401},[203,103345,2489],{"emptyLinePlaceholder":131},[203,103347,103348],{"class":205,"line":1407},[203,103349,101396],{"class":318},[203,103351,103352],{"class":205,"line":1419},[203,103353,103354],{"class":318},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[203,103356,103357],{"class":205,"line":1701},[203,103358,2489],{"emptyLinePlaceholder":131},[203,103360,103361],{"class":205,"line":1706},[203,103362,103363],{"class":318},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[203,103365,103366],{"class":205,"line":1712},[203,103367,103368],{"class":318},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[203,103370,103371],{"class":205,"line":1717},[203,103372,103373],{"class":318},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[203,103375,103376],{"class":205,"line":1731},[203,103377,103378],{"class":318},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[203,103380,103381],{"class":205,"line":1736},[203,103382,101425],{"class":318},[203,103384,103385],{"class":205,"line":1742},[203,103386,101430],{"class":318},[203,103388,103389],{"class":205,"line":1763},[203,103390,101435],{"class":318},[203,103392,103393],{"class":205,"line":1768},[203,103394,95756],{"class":318},[203,103396,103397],{"class":205,"line":1782},[203,103398,2489],{"emptyLinePlaceholder":131},[203,103400,103401],{"class":205,"line":1787},[203,103402,2489],{"emptyLinePlaceholder":131},[203,103404,103405,103407,103409,103411,103413],{"class":205,"line":1816},[203,103406,32005],{"class":209},[203,103408,2062],{"class":2052},[203,103410,101456],{"class":213},[203,103412,95744],{"class":262},[203,103414,3828],{"class":213},[203,103416,103417,103419,103421,103423,103425],{"class":205,"line":1821},[203,103418,101465],{"class":213},[203,103420,259],{"class":209},[203,103422,101470],{"class":213},[203,103424,101372],{"class":262},[203,103426,220],{"class":213},[203,103428,103429,103431,103433],{"class":205,"line":1838},[203,103430,101479],{"class":213},[203,103432,259],{"class":209},[203,103434,101484],{"class":213},[203,103436,103437],{"class":205,"line":1843},[203,103438,2489],{"emptyLinePlaceholder":131},[203,103440,103441,103444,103446,103449,103452],{"class":205,"line":1848},[203,103442,103443],{"class":213},"    box_body_id ",[203,103445,259],{"class":209},[203,103447,103448],{"class":213}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[203,103450,103451],{"class":318},"\"red_box\"",[203,103453,220],{"class":213},[203,103455,103456,103459,103461,103464,103467],{"class":205,"line":1853},[203,103457,103458],{"class":213},"    site_id ",[203,103460,259],{"class":209},[203,103462,103463],{"class":213}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[203,103465,103466],{"class":318},"\"box_center\"",[203,103468,220],{"class":213},[203,103470,103471],{"class":205,"line":1867},[203,103472,2489],{"emptyLinePlaceholder":131},[203,103474,103475,103477,103480,103482,103484],{"class":205,"line":1872},[203,103476,3190],{"class":209},[203,103478,103479],{"class":213}," box_body_id ",[203,103481,1124],{"class":209},[203,103483,4182],{"class":262},[203,103485,3828],{"class":213},[203,103487,103488,103491,103494,103496,103499],{"class":205,"line":2666},[203,103489,103490],{"class":209},"        raise",[203,103492,103493],{"class":262}," RuntimeError",[203,103495,214],{"class":213},[203,103497,103498],{"class":318},"\"body red_box not found\"",[203,103500,220],{"class":213},[203,103502,103503,103505,103508,103510,103512],{"class":205,"line":2680},[203,103504,3190],{"class":209},[203,103506,103507],{"class":213}," site_id ",[203,103509,1124],{"class":209},[203,103511,4182],{"class":262},[203,103513,3828],{"class":213},[203,103515,103516,103518,103520,103522,103525],{"class":205,"line":2688},[203,103517,103490],{"class":209},[203,103519,103493],{"class":262},[203,103521,214],{"class":213},[203,103523,103524],{"class":318},"\"site box_center not found\"",[203,103526,220],{"class":213},[203,103528,103529],{"class":205,"line":2693},[203,103530,2489],{"emptyLinePlaceholder":131},[203,103532,103533,103535,103537,103539,103541,103543,103545],{"class":205,"line":2699},[203,103534,3290],{"class":209},[203,103536,101559],{"class":213},[203,103538,26101],{"class":209},[203,103540,32501],{"class":262},[203,103542,214],{"class":213},[203,103544,1811],{"class":262},[203,103546,30844],{"class":213},[203,103548,103549],{"class":205,"line":2705},[203,103550,101574],{"class":213},[203,103552,103553],{"class":205,"line":2710},[203,103554,2489],{"emptyLinePlaceholder":131},[203,103556,103557,103559,103561,103564],{"class":205,"line":8038},[203,103558,31357],{"class":262},[203,103560,214],{"class":213},[203,103562,103563],{"class":318},"\"simulation time:\"",[203,103565,101536],{"class":213},[203,103567,103568,103570,103572,103575],{"class":205,"line":8062},[203,103569,31357],{"class":262},[203,103571,214],{"class":213},[203,103573,103574],{"class":318},"\"box body position:\"",[203,103576,103577],{"class":213},", data.xpos[box_body_id].copy())\n",[203,103579,103580,103582,103584,103587],{"class":205,"line":8067},[203,103581,31357],{"class":262},[203,103583,214],{"class":213},[203,103585,103586],{"class":318},"\"site position:\"",[203,103588,103589],{"class":213},", data.site_xpos[site_id].copy())\n",[203,103591,103592,103594,103596,103599],{"class":205,"line":8073},[203,103593,31357],{"class":262},[203,103595,214],{"class":213},[203,103597,103598],{"class":318},"\"box qpos:\"",[203,103600,103601],{"class":213},", np.array(data.qpos))\n",[203,103603,103604],{"class":205,"line":8100},[203,103605,2489],{"emptyLinePlaceholder":131},[203,103607,103608],{"class":205,"line":8105},[203,103609,2489],{"emptyLinePlaceholder":131},[203,103611,103612,103614,103616,103618,103620],{"class":205,"line":8111},[203,103613,1620],{"class":209},[203,103615,31278],{"class":262},[203,103617,101617],{"class":209},[203,103619,101620],{"class":318},[203,103621,3828],{"class":213},[203,103623,103624],{"class":205,"line":8123},[203,103625,101627],{"class":213},[19,103627,103628],{},"保存为：",[194,103630,103632],{"className":23913,"code":103631,"language":23915,"meta":27,"style":27},"touch ch2_xml_basic.py\n",[200,103633,103634],{"__ignoreMap":27},[203,103635,103636,103638],{"class":205,"line":206},[203,103637,101341],{"class":2052},[203,103639,103640],{"class":318}," ch2_xml_basic.py\n",[19,103642,102359],{},[194,103644,103646],{"className":23913,"code":103645,"language":23915,"meta":27,"style":27},"python ch2_xml_basic.py\n",[200,103647,103648],{"__ignoreMap":27},[203,103649,103650,103652],{"class":205,"line":206},[203,103651,30438],{"class":2052},[203,103653,103640],{"class":318},[174,103655,101630],{"id":101630},[19,103657,103658],{},"用名字查找 body：",[194,103660,103662],{"className":30436,"code":103661,"language":30438,"meta":27,"style":27},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[200,103663,103664],{"__ignoreMap":27},[203,103665,103666,103669,103671,103673,103675],{"class":205,"line":206},[203,103667,103668],{"class":213},"box_body_id ",[203,103670,259],{"class":209},[203,103672,103448],{"class":213},[203,103674,103451],{"class":318},[203,103676,220],{"class":213},[19,103678,103679],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,103681,103682],{},"用名字查找 site：",[194,103684,103686],{"className":30436,"code":103685,"language":30438,"meta":27,"style":27},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[200,103687,103688],{"__ignoreMap":27},[203,103689,103690,103693,103695,103697,103699],{"class":205,"line":206},[203,103691,103692],{"class":213},"site_id ",[203,103694,259],{"class":209},[203,103696,103463],{"class":213},[203,103698,103466],{"class":318},[203,103700,220],{"class":213},[19,103702,103703,103704,103707,103708,103711],{},"注意第二个参数是对象类型。查 body 就用 ",[200,103705,103706],{},"mjOBJ_BODY","，查 site 就用 ",[200,103709,103710],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,103713,103714],{},"读取世界坐标：",[194,103716,103718],{"className":30436,"code":103717,"language":30438,"meta":27,"style":27},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[200,103719,103720,103725],{"__ignoreMap":27},[203,103721,103722],{"class":205,"line":206},[203,103723,103724],{"class":213},"data.xpos[box_body_id]\n",[203,103726,103727],{"class":205,"line":124},[203,103728,103729],{"class":213},"data.site_xpos[site_id]\n",[19,103731,103732,103735,103736,103739],{},[200,103733,103734],{},"xpos"," 是 body 的世界坐标，",[200,103737,103738],{},"site_xpos"," 是 site 的世界坐标。",[174,103741,101766],{"id":101766},[194,103743,103745],{"className":30436,"code":103744,"language":30438,"meta":27,"style":27},"import mujoco\nimport numpy as np\n",[200,103746,103747,103753],{"__ignoreMap":27},[203,103748,103749,103751],{"class":205,"line":206},[203,103750,30450],{"class":209},[203,103752,101359],{"class":213},[203,103754,103755,103757,103759,103761],{"class":205,"line":124},[203,103756,30450],{"class":209},[203,103758,31438],{"class":213},[203,103760,31441],{"class":209},[203,103762,31444],{"class":213},[19,103764,103765,103766,103769,103770,103773,103774,426,103777,28443],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[200,103767,103768],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[200,103771,103772],{},"as np"," 是习惯写法，后面就可以写 ",[200,103775,103776],{},"np.array(...)",[200,103778,103779],{},"np.round(...)",[194,103781,103782],{"className":30436,"code":101653,"language":30438,"meta":27,"style":27},[200,103783,103784,103792,103796],{"__ignoreMap":27},[203,103785,103786,103788,103790],{"class":205,"line":206},[203,103787,101372],{"class":262},[203,103789,13654],{"class":209},[203,103791,101377],{"class":318},[203,103793,103794],{"class":205,"line":124},[203,103795,101668],{"class":318},[203,103797,103798],{"class":205,"line":1269},[203,103799,95756],{"class":318},[19,103801,103802,103803,28443],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[200,103804,103805],{},"mujoco.MjModel.from_xml_string(XML)",[194,103807,103809],{"className":53125,"code":103808,"language":53127,"meta":27,"style":27},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[200,103810,103811],{"__ignoreMap":27},[203,103812,103813,103815,103817,103819,103821,103823,103825,103827,103830,103832,103834,103837,103839,103841,103844],{"class":205,"line":206},[203,103814,1124],{"class":213},[203,103816,103268],{"class":51358},[203,103818,15010],{"class":2052},[203,103820,259],{"class":213},[203,103822,103466],{"class":318},[203,103824,101164],{"class":2052},[203,103826,259],{"class":213},[203,103828,103829],{"class":318},"\"0 0 0\"",[203,103831,101194],{"class":2052},[203,103833,259],{"class":213},[203,103835,103836],{"class":318},"\"0.03\"",[203,103838,78825],{"class":2052},[203,103840,259],{"class":213},[203,103842,103843],{"class":318},"\"0 1 0 1\"",[203,103845,101202],{"class":213},[19,103847,103848,103850,103851,103854,103855,103857,103858,103861],{},[200,103849,103268],{}," 是标记点。",[200,103852,103853],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[200,103856,103228],{}," 表示显示出来的小球大小。",[200,103859,103860],{},"rgba=\"0 1 0 1\""," 表示绿色。",[194,103863,103864],{"className":30436,"code":103661,"language":30438,"meta":27,"style":27},[200,103865,103866],{"__ignoreMap":27},[203,103867,103868,103870,103872,103874,103876],{"class":205,"line":206},[203,103869,103668],{"class":213},[203,103871,259],{"class":209},[203,103873,103448],{"class":213},[203,103875,103451],{"class":318},[203,103877,220],{"class":213},[19,103879,103880,103881,103883],{},"这行的作用是：根据名字 ",[200,103882,103451],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,103885,103886],{},"拆开看：",[157,103888,103889,103895,103900,103906],{},[160,103890,103891,103894],{},[200,103892,103893],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[160,103896,103897,103899],{},[200,103898,102143],{}," 是被查询的模型。",[160,103901,103902,103905],{},[200,103903,103904],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[160,103907,103908,103910],{},[200,103909,103451],{}," 是 XML 里写的名字。",[194,103912,103913],{"className":30436,"code":103685,"language":30438,"meta":27,"style":27},[200,103914,103915],{"__ignoreMap":27},[203,103916,103917,103919,103921,103923,103925],{"class":205,"line":206},[203,103918,103692],{"class":213},[203,103920,259],{"class":209},[203,103922,103463],{"class":213},[203,103924,103466],{"class":318},[203,103926,220],{"class":213},[19,103928,103929,103930,28443],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[200,103931,103466],{},[194,103933,103935],{"className":30436,"code":103934,"language":30438,"meta":27,"style":27},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[200,103936,103937,103949],{"__ignoreMap":27},[203,103938,103939,103941,103943,103945,103947],{"class":205,"line":206},[203,103940,1620],{"class":209},[203,103942,103479],{"class":213},[203,103944,1124],{"class":209},[203,103946,4182],{"class":262},[203,103948,3828],{"class":213},[203,103950,103951,103954,103956,103958,103960],{"class":205,"line":124},[203,103952,103953],{"class":209},"    raise",[203,103955,103493],{"class":262},[203,103957,214],{"class":213},[203,103959,103498],{"class":318},[203,103961,220],{"class":213},[19,103963,103964,103966,103967,103970,103971,103974,103975,103978],{},[200,103965,1620],{}," 是条件判断。",[200,103968,103969],{},"mj_name2id"," 找不到对象时会返回 ",[200,103972,103973],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[200,103976,103977],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[194,103980,103982],{"className":30436,"code":103981,"language":30438,"meta":27,"style":27},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[200,103983,103984,104000],{"__ignoreMap":27},[203,103985,103986,103988,103990,103992,103994,103996,103998],{"class":205,"line":206},[203,103987,3114],{"class":209},[203,103989,101559],{"class":213},[203,103991,26101],{"class":209},[203,103993,32501],{"class":262},[203,103995,214],{"class":213},[203,103997,1811],{"class":262},[203,103999,30844],{"class":213},[203,104001,104002],{"class":205,"line":124},[203,104003,101757],{"class":213},[19,104005,104006],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[194,104008,104010],{"className":30436,"code":104009,"language":30438,"meta":27,"style":27},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[200,104011,104012],{"__ignoreMap":27},[203,104013,104014,104016,104018,104020],{"class":205,"line":206},[203,104015,30473],{"class":262},[203,104017,214],{"class":213},[203,104019,103574],{"class":318},[203,104021,103577],{"class":213},[19,104023,104024,104026,104027,104030],{},[200,104025,101137],{}," 保存所有 body 的世界坐标。",[200,104028,104029],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[194,104032,104034],{"className":30436,"code":104033,"language":30438,"meta":27,"style":27},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[200,104035,104036],{"__ignoreMap":27},[203,104037,104038,104040,104042,104044],{"class":205,"line":206},[203,104039,30473],{"class":262},[203,104041,214],{"class":213},[203,104043,103586],{"class":318},[203,104045,103589],{"class":213},[19,104047,104048,104051,104052,104054],{},[200,104049,104050],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[200,104053,103035],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[194,104056,104058],{"className":30436,"code":104057,"language":30438,"meta":27,"style":27},"print(\"box qpos:\", np.array(data.qpos))\n",[200,104059,104060],{"__ignoreMap":27},[203,104061,104062,104064,104066,104068],{"class":205,"line":206},[203,104063,30473],{"class":262},[203,104065,214],{"class":213},[203,104067,103598],{"class":318},[203,104069,103601],{"class":213},[19,104071,104072,104073,104076],{},"这里打印广义位置数组。",[200,104074,104075],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104078,102374],{"id":102373},[19,104080,104081,104082,104085,104086,28443],{},"程序会输出 ",[200,104083,104084],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[200,104087,104088],{},"qpos",[19,104090,104091,104093,104094,104097,104098,104101],{},[200,104092,104029],{}," 是 body 的世界坐标位置。",[200,104095,104096],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[200,104099,104100],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104103,82280,104104,82588,104106,104108],{},[200,104105,103035],{},[200,104107,103853],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104110,104111],{},"如果你把 site 改成：",[194,104113,104115],{"className":53125,"code":104114,"language":53127,"meta":27,"style":27},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[200,104116,104117],{"__ignoreMap":27},[203,104118,104119,104121,104123,104125,104127,104130,104132,104134,104137,104139,104141,104143,104145,104147,104149],{"class":205,"line":206},[203,104120,1124],{"class":213},[203,104122,103268],{"class":51358},[203,104124,15010],{"class":2052},[203,104126,259],{"class":213},[203,104128,104129],{"class":318},"\"box_top\"",[203,104131,101164],{"class":2052},[203,104133,259],{"class":213},[203,104135,104136],{"class":318},"\"0 0 0.15\"",[203,104138,101194],{"class":2052},[203,104140,259],{"class":213},[203,104142,103836],{"class":318},[203,104144,78825],{"class":2052},[203,104146,259],{"class":213},[203,104148,103843],{"class":318},[203,104150,101202],{"class":213},[19,104152,104153,104154,104157],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[200,104155,104156],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104159,102406],{"id":102405},[157,104161,104162,104171,104174,104181,104187,104198],{},[160,104163,102469,104164,104166,104167,102472,104169,28443],{},[200,104165,103039],{}," 的初始高度从 ",[200,104168,431],{},[200,104170,291],{},[160,104172,104173],{},"重新运行程序。",[160,104175,104176,104177,104180],{},"观察 ",[200,104178,104179],{},"box qpos"," 和最终位置是否变化。",[160,104182,104183,104184,104186],{},"故意把 ",[200,104185,103268],{}," 名称改错，确认程序能报错。",[160,104188,102469,104189,104191,104192,102472,104194,104197],{},[200,104190,101178],{}," 的颜色 ",[200,104193,102090],{},[200,104195,104196],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[160,104199,102469,104200,82588,104202,102472,104205,104208,104209,104211],{},[200,104201,103035],{},[200,104203,104204],{},"pos",[200,104206,104207],{},"0 0 0.2","，观察 ",[200,104210,104156],{}," 如何变化。",[14,104213,102511],{"id":102510},[174,104215,104217],{"id":104216},"xml-error-schema-violation",[200,104218,104219],{},"XML Error: Schema violation",[19,104221,104222],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[174,104224,104226,81348,104228],{"id":104225},"mj_name2id-返回-1",[200,104227,103969],{},[200,104229,103973],{},[19,104231,104232,104233,104236],{},"说明名字没有找到。检查 XML 中 ",[200,104234,104235],{},"name=\"...\"","，并确认对象类型正确。",[174,104238,104239],{"id":104239},"物体不下落",[19,104241,102581],{},[157,104243,104244,104249,104254],{},[160,104245,104246,104247],{},"body 是否有 ",[200,104248,101678],{},[160,104250,104251,104252],{},"gravity 是否为 ",[200,104253,102647],{},[160,104255,104256,104257,104259],{},"body 是否被固定在 ",[200,104258,101899],{}," 中",[174,104261,104262],{"id":104262},"坐标看起来不符合预期",[19,104264,104265],{},"先区分两种坐标：",[351,104267,104268,104277],{},[354,104269,104270],{},[357,104271,104272,104275],{},[360,104273,104274],{"align":23827},"坐标",[360,104276,100758],{"align":23827},[398,104278,104279,104289],{},[357,104280,104281,104286],{},[403,104282,104283,104284],{"align":23827},"XML 里的 ",[200,104285,104204],{},[403,104287,104288],{"align":23827},"相对父 body 的局部坐标",[357,104290,104291,104297],{},[403,104292,104293,25036,104295],{"align":23827},[200,104294,101137],{},[200,104296,104050],{},[403,104298,104299],{"align":23827},"仿真更新后的世界坐标",[19,104301,104302,104303,104305,104306,82597,104309,104311],{},"如果你修改了 ",[200,104304,101128],{},"，但还没调用 ",[200,104307,104308],{},"mj_forward",[200,104310,101273],{},"，世界坐标可能还没有更新。",[14,104313,102665],{"id":102664},[19,104315,104316],{},"MJCF 建模先掌握四件事：",[157,104318,104319,104324,104329,104334],{},[160,104320,104321,104323],{},[200,104322,51858],{}," 表示刚体层级。",[160,104325,104326,104328],{},[200,104327,101178],{}," 表示形状、碰撞和质量。",[160,104330,104331,104333],{},[200,104332,103014],{}," 决定 body 能不能动、怎么动。",[160,104335,104336,104338],{},[200,104337,103268],{}," 用来标记关键点，方便 Python 读取位置。",[19,104340,104341],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5216,104343,104344],{},"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":27,"searchDepth":124,"depth":124,"links":104346},[104347,104348,104349,104355,104359,104360,104361,104368],{"id":100704,"depth":124,"text":100705},{"id":100827,"depth":124,"text":100828},{"id":101102,"depth":124,"text":101103,"children":104350},[104351,104352,104353,104354],{"id":103018,"depth":1269,"text":103018},{"id":103132,"depth":1269,"text":103132},{"id":103158,"depth":1269,"text":103159},{"id":103262,"depth":1269,"text":103263},{"id":101310,"depth":124,"text":101311,"children":104356},[104357,104358],{"id":101630,"depth":1269,"text":101630},{"id":101766,"depth":1269,"text":101766},{"id":102373,"depth":124,"text":102374},{"id":102405,"depth":124,"text":102406},{"id":102510,"depth":124,"text":102511,"children":104362},[104363,104364,104366,104367],{"id":104216,"depth":1269,"text":104219},{"id":104225,"depth":1269,"text":104365},"mj_name2id 返回 -1",{"id":104239,"depth":1269,"text":104239},{"id":104262,"depth":1269,"text":104262},{"id":102664,"depth":124,"text":102665},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102712,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104375,"title":104376,"body":104377,"description":27,"extension":129,"meta":105872,"navigation":131,"path":105873,"seo":105874,"stem":105875,"__hash__":105876},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104378,"toc":105844},[104379,104382,104384,104387,104390,104428,104431,104437,104440,104442,104444,104471,104473,104487,104489,104530,104532,104556,104558,104561,104570,104579,104582,104591,104599,104608,104611,104621,104624,104676,104683,104689,104697,104745,104748,104767,104770,104778,104782,104791,104824,104826,105174,105176,105188,105190,105201,105203,105206,105227,105233,105236,105261,105271,105274,105282,105285,105288,105309,105320,105322,105342,105345,105366,105375,105394,105400,105425,105428,105442,105449,105473,105476,105484,105493,105509,105521,105529,105538,105540,105543,105567,105572,105575,105597,105599,105638,105640,105647,105649,105657,105660,105663,105675,105716,105723,105734,105741,105744,105793,105796,105799,105805,105807,105812,105838,105841],[10,104380,104376],{"id":104381},"_3python-控制接口读取状态与推进仿真",[14,104383,100705],{"id":100704},[19,104385,104386],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104388,104389],{},"你将学习:",[157,104391,104392,104397,104402,104406,104411,104422],{},[160,104393,104394],{},[200,104395,104396],{},"MjModel.from_xml_string",[160,104398,104399],{},[200,104400,104401],{},"MjData(model)",[160,104403,104404],{},[200,104405,101273],{},[160,104407,104408],{},[200,104409,104410],{},"mj_resetData",[160,104412,104413,104414,426,104416,426,104419],{},"读取 ",[200,104415,104088],{},[200,104417,104418],{},"qvel",[200,104420,104421],{},"ctrl",[160,104423,104424,104425],{},"使用 ",[200,104426,104427],{},"model.opt.timestep",[19,104429,104430],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[194,104432,104435],{"className":104433,"code":104434,"language":5277,"meta":27},[5275],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[200,104436,104434],{"__ignoreMap":27},[19,104438,104439],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104441,100828],{"id":100827},[19,104443,100831],{},[194,104445,104447],{"className":23913,"code":104446,"language":23915,"meta":27,"style":27},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[200,104448,104449],{"__ignoreMap":27},[203,104450,104451,104453,104455,104457,104459,104462,104464,104466,104468],{"class":205,"line":206},[203,104452,24634],{"class":2052},[203,104454,26373],{"class":318},[203,104456,23925],{"class":318},[203,104458,26458],{"class":262},[203,104460,104461],{"class":318}," python3",[203,104463,100856],{"class":318},[203,104465,102559],{"class":318},[203,104467,100872],{"class":318},[203,104469,104470],{"class":318}," glfw\n",[19,104472,102877],{},[194,104474,104475],{"className":23913,"code":100977,"language":23915,"meta":27,"style":27},[200,104476,104477],{"__ignoreMap":27},[203,104478,104479,104481,104483,104485],{"class":205,"line":206},[203,104480,23922],{"class":2052},[203,104482,23925],{"class":318},[203,104484,100988],{"class":318},[203,104486,100991],{"class":318},[19,104488,102894],{},[194,104490,104492],{"className":23913,"code":104491,"language":23915,"meta":27,"style":27},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[200,104493,104494,104511,104520],{"__ignoreMap":27},[203,104495,104496,104498,104500,104502,104505,104507,104509],{"class":205,"line":206},[203,104497,30388],{"class":2052},[203,104499,29234],{"class":318},[203,104501,25173],{"class":262},[203,104503,104504],{"class":318}," mujoco-python-api",[203,104506,101033],{"class":318},[203,104508,101036],{"class":262},[203,104510,101039],{"class":262},[203,104512,104513,104515,104517],{"class":205,"line":124},[203,104514,30388],{"class":2052},[203,104516,101046],{"class":318},[203,104518,104519],{"class":318}," mujoco-python-api\n",[203,104521,104522,104524,104526,104528],{"class":205,"line":1269},[203,104523,23922],{"class":2052},[203,104525,23925],{"class":318},[203,104527,100988],{"class":318},[203,104529,100991],{"class":318},[19,104531,101062],{},[157,104533,104534,104541,104550],{},[160,104535,104536,101076,104538,104540],{},[200,104537,100733],{},[200,104539,100738],{}," 是官方 Python bindings 的类名。",[160,104542,104543,104544,104547,104548,28443],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[200,104545,104546],{},"mjModel"," 在 Python 中是 ",[200,104549,100767],{},[160,104551,104552,104553,28443],{},"不要使用 ",[200,104554,104555],{},"sim = mujoco_py.MjSim(...)",[14,104557,101103],{"id":101102},[19,104559,104560],{},"仿真推进核心代码:",[194,104562,104564],{"className":30436,"code":104563,"language":30438,"meta":27,"style":27},"mujoco.mj_step(model, data)\n",[200,104565,104566],{"__ignoreMap":27},[203,104567,104568],{"class":205,"line":206},[203,104569,104563],{"class":213},[19,104571,104572,104573,426,104575,426,104577,28443],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[200,104574,101128],{},[200,104576,101131],{},[200,104578,101125],{},[19,104580,104581],{},"重置仿真:",[194,104583,104585],{"className":30436,"code":104584,"language":30438,"meta":27,"style":27},"mujoco.mj_resetData(model, data)\n",[200,104586,104587],{"__ignoreMap":27},[203,104588,104589],{"class":205,"line":206},[203,104590,104584],{"class":213},[19,104592,104593,104594,82597,104596,104598],{},"如果手动修改了 ",[200,104595,101128],{},[200,104597,101131],{},"，通常应调用:",[194,104600,104602],{"className":30436,"code":104601,"language":30438,"meta":27,"style":27},"mujoco.mj_forward(model, data)\n",[200,104603,104604],{"__ignoreMap":27},[203,104605,104606],{"class":205,"line":206},[203,104607,104601],{"class":213},[19,104609,104610],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[174,104612,104614,426,104616,426,104618,104620],{"id":104613},"qposqvelctrl-是什么",[200,104615,104088],{},[200,104617,104418],{},[200,104619,104421],{}," 是什么",[19,104622,104623],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[351,104625,104626,104638],{},[354,104627,104628],{},[357,104629,104630,104633,104635],{},[360,104631,104632],{"align":23827},"字段",[360,104634,100758],{"align":23827},[360,104636,104637],{"align":23827},"谁来修改",[398,104639,104640,104652,104664],{},[357,104641,104642,104646,104649],{},[403,104643,104644],{"align":23827},[200,104645,101128],{},[403,104647,104648],{"align":23827},"广义位置，例如小车位置、关节角、自由物体位置姿态",[403,104650,104651],{"align":23827},"MuJoCo 更新，也可以手动设置初始状态",[357,104653,104654,104658,104661],{},[403,104655,104656],{"align":23827},[200,104657,101131],{},[403,104659,104660],{"align":23827},"广义速度，例如小车速度、关节角速度",[403,104662,104663],{"align":23827},"MuJoCo 更新，也可以手动清零",[357,104665,104666,104670,104673],{},[403,104667,104668],{"align":23827},[200,104669,101134],{},[403,104671,104672],{"align":23827},"actuator 的控制输入",[403,104674,104675],{"align":23827},"主要由你的控制代码写入",[19,104677,9115,104678,101076,104680,104682],{},[200,104679,104088],{},[200,104681,104418],{}," 不一定同维。自由刚体就是典型例子：",[194,104684,104687],{"className":104685,"code":104686,"language":5277,"meta":27},[5275],"freejoint: qpos 7 维，qvel 6 维\n",[200,104688,104686],{"__ignoreMap":27},[174,104690,104692,101076,104694,104696],{"id":104691},"mj_step-和-mj_forward-的区别",[200,104693,101273],{},[200,104695,104308],{}," 的区别",[351,104698,104699,104712],{},[354,104700,104701],{},[357,104702,104703,104706,104709],{},[360,104704,104705],{"align":23827},"函数",[360,104707,104708],{"align":23827},"是否推进时间",[360,104710,104711],{"align":23827},"什么时候用",[398,104713,104714,104727],{},[357,104715,104716,104721,104724],{},[403,104717,104718],{"align":23827},[200,104719,104720],{},"mj_step(model, data)",[403,104722,104723],{"align":23827},"是",[403,104725,104726],{"align":23827},"正常仿真循环，每调用一次前进一步",[357,104728,104729,104734,104737],{},[403,104730,104731],{"align":23827},[200,104732,104733],{},"mj_forward(model, data)",[403,104735,104736],{"align":23827},"否",[403,104738,104739,104740,426,104742,104744],{"align":23827},"手动改了 ",[200,104741,104088],{},[200,104743,104418],{}," 后，刷新派生量",[19,104746,104747],{},"例如你写：",[194,104749,104751],{"className":30436,"code":104750,"language":30438,"meta":27,"style":27},"data.qpos[2] = 2.0\n",[200,104752,104753],{"__ignoreMap":27},[203,104754,104755,104758,104760,104762,104764],{"class":205,"line":206},[203,104756,104757],{"class":213},"data.qpos[",[203,104759,291],{"class":262},[203,104761,4532],{"class":213},[203,104763,259],{"class":209},[203,104765,104766],{"class":262}," 2.0\n",[19,104768,104769],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[194,104771,104772],{"className":30436,"code":104601,"language":30438,"meta":27,"style":27},[200,104773,104774],{"__ignoreMap":27},[203,104775,104776],{"class":205,"line":206},[203,104777,104601],{"class":213},[174,104779,104781],{"id":104780},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,104783,104784,104787,104788,104790],{},[200,104785,104786],{},"mujoco.mj_resetData(model, data)"," 会把 ",[200,104789,33459],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[194,104792,104794],{"className":30436,"code":104793,"language":30438,"meta":27,"style":27},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[200,104795,104796,104800,104810,104820],{"__ignoreMap":27},[203,104797,104798],{"class":205,"line":206},[203,104799,104584],{"class":213},[203,104801,104802,104805,104807],{"class":205,"line":124},[203,104803,104804],{"class":213},"data.qpos[:] ",[203,104806,259],{"class":209},[203,104808,104809],{"class":213}," random_qpos\n",[203,104811,104812,104815,104817],{"class":205,"line":1269},[203,104813,104814],{"class":213},"data.qvel[:] ",[203,104816,259],{"class":209},[203,104818,104819],{"class":262}," 0.0\n",[203,104821,104822],{"class":205,"line":1284},[203,104823,104601],{"class":213},[14,104825,101311],{"id":101310},[194,104827,104829],{"className":30436,"code":104828,"language":30438,"meta":27,"style":27},"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",[200,104830,104831,104837,104847,104851,104855,104863,104868,104872,104876,104880,104885,104889,104894,104899,104904,104908,104912,104916,104920,104924,104928,104947,104954,104966,104977,104993,105009,105013,105017,105029,105041,105049,105053,105064,105068,105084,105088,105092,105101,105105,105110,105119,105123,105136,105141,105150,105154,105158,105170],{"__ignoreMap":27},[203,104832,104833,104835],{"class":205,"line":206},[203,104834,30450],{"class":209},[203,104836,101359],{"class":213},[203,104838,104839,104841,104843,104845],{"class":205,"line":124},[203,104840,30450],{"class":209},[203,104842,31438],{"class":213},[203,104844,31441],{"class":209},[203,104846,31444],{"class":213},[203,104848,104849],{"class":205,"line":1269},[203,104850,2489],{"emptyLinePlaceholder":131},[203,104852,104853],{"class":205,"line":1284},[203,104854,2489],{"emptyLinePlaceholder":131},[203,104856,104857,104859,104861],{"class":205,"line":1290},[203,104858,101372],{"class":262},[203,104860,13654],{"class":209},[203,104862,101377],{"class":318},[203,104864,104865],{"class":205,"line":1304},[203,104866,104867],{"class":318},"\u003Cmujoco model=\"state_api\">\n",[203,104869,104870],{"class":205,"line":1310},[203,104871,101387],{"class":318},[203,104873,104874],{"class":205,"line":1401},[203,104875,2489],{"emptyLinePlaceholder":131},[203,104877,104878],{"class":205,"line":1407},[203,104879,101396],{"class":318},[203,104881,104882],{"class":205,"line":1419},[203,104883,104884],{"class":318},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[203,104886,104887],{"class":205,"line":1701},[203,104888,2489],{"emptyLinePlaceholder":131},[203,104890,104891],{"class":205,"line":1706},[203,104892,104893],{"class":318},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[203,104895,104896],{"class":205,"line":1712},[203,104897,104898],{"class":318},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[203,104900,104901],{"class":205,"line":1717},[203,104902,104903],{"class":318},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[203,104905,104906],{"class":205,"line":1731},[203,104907,101425],{"class":318},[203,104909,104910],{"class":205,"line":1736},[203,104911,101430],{"class":318},[203,104913,104914],{"class":205,"line":1742},[203,104915,101435],{"class":318},[203,104917,104918],{"class":205,"line":1763},[203,104919,95756],{"class":318},[203,104921,104922],{"class":205,"line":1768},[203,104923,2489],{"emptyLinePlaceholder":131},[203,104925,104926],{"class":205,"line":1782},[203,104927,2489],{"emptyLinePlaceholder":131},[203,104929,104930,104932,104935,104938,104940,104943,104945],{"class":205,"line":1787},[203,104931,32005],{"class":209},[203,104933,104934],{"class":2052}," print_state",[203,104936,104937],{"class":213},"(prefix: ",[203,104939,1389],{"class":262},[203,104941,104942],{"class":213},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[203,104944,95744],{"class":262},[203,104946,3828],{"class":213},[203,104948,104949,104951],{"class":205,"line":1816},[203,104950,31357],{"class":262},[203,104952,104953],{"class":213},"(prefix)\n",[203,104955,104956,104958,104960,104963],{"class":205,"line":1821},[203,104957,31357],{"class":262},[203,104959,214],{"class":213},[203,104961,104962],{"class":318},"\"  timestep:\"",[203,104964,104965],{"class":213},", model.opt.timestep)\n",[203,104967,104968,104970,104972,104975],{"class":205,"line":1838},[203,104969,31357],{"class":262},[203,104971,214],{"class":213},[203,104973,104974],{"class":318},"\"  time:\"",[203,104976,101536],{"class":213},[203,104978,104979,104981,104983,104986,104989,104991],{"class":205,"line":1843},[203,104980,31357],{"class":262},[203,104982,214],{"class":213},[203,104984,104985],{"class":318},"\"  qpos:\"",[203,104987,104988],{"class":213},", np.round(data.qpos.copy(), ",[203,104990,507],{"class":262},[203,104992,30555],{"class":213},[203,104994,104995,104997,104999,105002,105005,105007],{"class":205,"line":1848},[203,104996,31357],{"class":262},[203,104998,214],{"class":213},[203,105000,105001],{"class":318},"\"  qvel:\"",[203,105003,105004],{"class":213},", np.round(data.qvel.copy(), ",[203,105006,507],{"class":262},[203,105008,30555],{"class":213},[203,105010,105011],{"class":205,"line":1853},[203,105012,2489],{"emptyLinePlaceholder":131},[203,105014,105015],{"class":205,"line":1867},[203,105016,2489],{"emptyLinePlaceholder":131},[203,105018,105019,105021,105023,105025,105027],{"class":205,"line":1872},[203,105020,32005],{"class":209},[203,105022,2062],{"class":2052},[203,105024,101456],{"class":213},[203,105026,95744],{"class":262},[203,105028,3828],{"class":213},[203,105030,105031,105033,105035,105037,105039],{"class":205,"line":2666},[203,105032,101465],{"class":213},[203,105034,259],{"class":209},[203,105036,101470],{"class":213},[203,105038,101372],{"class":262},[203,105040,220],{"class":213},[203,105042,105043,105045,105047],{"class":205,"line":2680},[203,105044,101479],{"class":213},[203,105046,259],{"class":209},[203,105048,101484],{"class":213},[203,105050,105051],{"class":205,"line":2688},[203,105052,2489],{"emptyLinePlaceholder":131},[203,105054,105055,105058,105061],{"class":205,"line":2693},[203,105056,105057],{"class":213},"    print_state(",[203,105059,105060],{"class":318},"\"initial\"",[203,105062,105063],{"class":213},", model, data)\n",[203,105065,105066],{"class":205,"line":2699},[203,105067,2489],{"emptyLinePlaceholder":131},[203,105069,105070,105072,105074,105076,105078,105080,105082],{"class":205,"line":2705},[203,105071,3290],{"class":209},[203,105073,101559],{"class":213},[203,105075,26101],{"class":209},[203,105077,32501],{"class":262},[203,105079,214],{"class":213},[203,105081,870],{"class":262},[203,105083,30844],{"class":213},[203,105085,105086],{"class":205,"line":2710},[203,105087,101574],{"class":213},[203,105089,105090],{"class":205,"line":8038},[203,105091,2489],{"emptyLinePlaceholder":131},[203,105093,105094,105096,105099],{"class":205,"line":8062},[203,105095,105057],{"class":213},[203,105097,105098],{"class":318},"\"after 50 steps\"",[203,105100,105063],{"class":213},[203,105102,105103],{"class":205,"line":8067},[203,105104,2489],{"emptyLinePlaceholder":131},[203,105106,105107],{"class":205,"line":8073},[203,105108,105109],{"class":213},"    mujoco.mj_resetData(model, data)\n",[203,105111,105112,105114,105117],{"class":205,"line":8100},[203,105113,105057],{"class":213},[203,105115,105116],{"class":318},"\"after reset\"",[203,105118,105063],{"class":213},[203,105120,105121],{"class":205,"line":8105},[203,105122,2489],{"emptyLinePlaceholder":131},[203,105124,105125,105128,105130,105132,105134],{"class":205,"line":8111},[203,105126,105127],{"class":213},"    data.qpos[",[203,105129,291],{"class":262},[203,105131,4532],{"class":213},[203,105133,259],{"class":209},[203,105135,104766],{"class":262},[203,105137,105138],{"class":205,"line":8123},[203,105139,105140],{"class":213},"    mujoco.mj_forward(model, data)\n",[203,105142,105143,105145,105148],{"class":205,"line":8135},[203,105144,105057],{"class":213},[203,105146,105147],{"class":318},"\"after manual qpos edit\"",[203,105149,105063],{"class":213},[203,105151,105152],{"class":205,"line":8147},[203,105153,2489],{"emptyLinePlaceholder":131},[203,105155,105156],{"class":205,"line":9806},[203,105157,2489],{"emptyLinePlaceholder":131},[203,105159,105160,105162,105164,105166,105168],{"class":205,"line":9831},[203,105161,1620],{"class":209},[203,105163,31278],{"class":262},[203,105165,101617],{"class":209},[203,105167,101620],{"class":318},[203,105169,3828],{"class":213},[203,105171,105172],{"class":205,"line":9854},[203,105173,101627],{"class":213},[19,105175,103628],{},[194,105177,105179],{"className":23913,"code":105178,"language":23915,"meta":27,"style":27},"touch ch3_python_state.py\n",[200,105180,105181],{"__ignoreMap":27},[203,105182,105183,105185],{"class":205,"line":206},[203,105184,101341],{"class":2052},[203,105186,105187],{"class":318}," ch3_python_state.py\n",[19,105189,102359],{},[194,105191,105193],{"className":23913,"code":105192,"language":23915,"meta":27,"style":27},"python ch3_python_state.py\n",[200,105194,105195],{"__ignoreMap":27},[203,105196,105197,105199],{"class":205,"line":206},[203,105198,30438],{"class":2052},[203,105200,105187],{"class":318},[174,105202,101630],{"id":101630},[19,105204,105205],{},"打印状态的函数：",[194,105207,105209],{"className":30436,"code":105208,"language":30438,"meta":27,"style":27},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[200,105210,105211],{"__ignoreMap":27},[203,105212,105213,105215,105217,105219,105221,105223,105225],{"class":205,"line":206},[203,105214,32005],{"class":209},[203,105216,104934],{"class":2052},[203,105218,104937],{"class":213},[203,105220,1389],{"class":262},[203,105222,104942],{"class":213},[203,105224,95744],{"class":262},[203,105226,3828],{"class":213},[19,105228,105229,105230,105232],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[200,105231,33459],{}," 里发生了什么。",[19,105234,105235],{},"推进 50 步：",[194,105237,105239],{"className":30436,"code":105238,"language":30438,"meta":27,"style":27},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[200,105240,105241,105257],{"__ignoreMap":27},[203,105242,105243,105245,105247,105249,105251,105253,105255],{"class":205,"line":206},[203,105244,3114],{"class":209},[203,105246,101559],{"class":213},[203,105248,26101],{"class":209},[203,105250,32501],{"class":262},[203,105252,214],{"class":213},[203,105254,870],{"class":262},[203,105256,30844],{"class":213},[203,105258,105259],{"class":205,"line":124},[203,105260,101757],{"class":213},[19,105262,105263,105264,105267,105268,105270],{},"由于 ",[200,105265,105266],{},"timestep=0.01","，所以 50 步后时间约为 ",[200,105269,35387],{}," 秒。",[19,105272,105273],{},"重置：",[194,105275,105276],{"className":30436,"code":104584,"language":30438,"meta":27,"style":27},[200,105277,105278],{"__ignoreMap":27},[203,105279,105280],{"class":205,"line":206},[203,105281,104584],{"class":213},[19,105283,105284],{},"这会把时间、位置、速度恢复到初始状态。",[19,105286,105287],{},"手动改高度：",[194,105289,105291],{"className":30436,"code":105290,"language":30438,"meta":27,"style":27},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[200,105292,105293,105305],{"__ignoreMap":27},[203,105294,105295,105297,105299,105301,105303],{"class":205,"line":206},[203,105296,104757],{"class":213},[203,105298,291],{"class":262},[203,105300,4532],{"class":213},[203,105302,259],{"class":209},[203,105304,104766],{"class":262},[203,105306,105307],{"class":205,"line":124},[203,105308,104601],{"class":213},[19,105310,105311,105312,105315,105316,105319],{},"这个例子里 ",[200,105313,105314],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[200,105317,105318],{},"2.0"," 表示把小球放到更高的位置。",[174,105321,101766],{"id":101766},[194,105323,105324],{"className":30436,"code":105208,"language":30438,"meta":27,"style":27},[200,105325,105326],{"__ignoreMap":27},[203,105327,105328,105330,105332,105334,105336,105338,105340],{"class":205,"line":206},[203,105329,32005],{"class":209},[203,105331,104934],{"class":2052},[203,105333,104937],{"class":213},[203,105335,1389],{"class":262},[203,105337,104942],{"class":213},[203,105339,95744],{"class":262},[203,105341,3828],{"class":213},[19,105343,105344],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[157,105346,105347,105356,105361],{},[160,105348,105349,105352,105353,105355],{},[200,105350,105351],{},"prefix","：一段文字，比如 ",[200,105354,105060],{},"，用来说明现在打印的是哪个阶段。",[160,105357,105358,105360],{},[200,105359,102143],{},"：MuJoCo 模型。",[160,105362,105363,105365],{},[200,105364,33459],{},"：MuJoCo 当前状态。",[19,105367,105368,426,105371,105374],{},[200,105369,105370],{},"prefix: str",[200,105372,105373],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[194,105376,105378],{"className":30436,"code":105377,"language":30438,"meta":27,"style":27},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[200,105379,105380],{"__ignoreMap":27},[203,105381,105382,105384,105386,105388,105390,105392],{"class":205,"line":206},[203,105383,30473],{"class":262},[203,105385,214],{"class":213},[203,105387,104985],{"class":318},[203,105389,104988],{"class":213},[203,105391,507],{"class":262},[203,105393,30555],{"class":213},[19,105395,105396,105399],{},[200,105397,105398],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[194,105401,105403],{"className":30436,"code":105402,"language":30438,"meta":27,"style":27},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[200,105404,105405,105417],{"__ignoreMap":27},[203,105406,105407,105409,105411,105413,105415],{"class":205,"line":206},[203,105408,101692],{"class":213},[203,105410,259],{"class":209},[203,105412,101470],{"class":213},[203,105414,101372],{"class":262},[203,105416,220],{"class":213},[203,105418,105419,105421,105423],{"class":205,"line":124},[203,105420,101716],{"class":213},[203,105422,259],{"class":209},[203,105424,101484],{"class":213},[19,105426,105427],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[194,105429,105431],{"className":30436,"code":105430,"language":30438,"meta":27,"style":27},"print_state(\"initial\", model, data)\n",[200,105432,105433],{"__ignoreMap":27},[203,105434,105435,105438,105440],{"class":205,"line":206},[203,105436,105437],{"class":213},"print_state(",[203,105439,105060],{"class":318},[203,105441,105063],{"class":213},[19,105443,105444,105445,105448],{},"调用刚才定义的 ",[200,105446,105447],{},"print_state"," 函数，打印初始状态。",[194,105450,105451],{"className":30436,"code":105238,"language":30438,"meta":27,"style":27},[200,105452,105453,105469],{"__ignoreMap":27},[203,105454,105455,105457,105459,105461,105463,105465,105467],{"class":205,"line":206},[203,105456,3114],{"class":209},[203,105458,101559],{"class":213},[203,105460,26101],{"class":209},[203,105462,32501],{"class":262},[203,105464,214],{"class":213},[203,105466,870],{"class":262},[203,105468,30844],{"class":213},[203,105470,105471],{"class":205,"line":124},[203,105472,101757],{"class":213},[19,105474,105475],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[194,105477,105478],{"className":30436,"code":104584,"language":30438,"meta":27,"style":27},[200,105479,105480],{"__ignoreMap":27},[203,105481,105482],{"class":205,"line":206},[203,105483,104584],{"class":213},[19,105485,105486,105487,105489,105490,105492],{},"重置 ",[200,105488,33459],{},"。注意它不会重新创建 ",[200,105491,102143],{},"，因为模型结构没有变，只是状态回到初始值。",[194,105494,105495],{"className":30436,"code":104750,"language":30438,"meta":27,"style":27},[200,105496,105497],{"__ignoreMap":27},[203,105498,105499,105501,105503,105505,105507],{"class":205,"line":206},[203,105500,104757],{"class":213},[203,105502,291],{"class":262},[203,105504,4532],{"class":213},[203,105506,259],{"class":209},[203,105508,104766],{"class":262},[19,105510,105511,105512,426,105515,426,105518,105520],{},"这行是“手动改状态”。在 freejoint 中，",[200,105513,105514],{},"qpos[0]",[200,105516,105517],{},"qpos[1]",[200,105519,105314],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[194,105522,105523],{"className":30436,"code":104601,"language":30438,"meta":27,"style":27},[200,105524,105525],{"__ignoreMap":27},[203,105526,105527],{"class":205,"line":206},[203,105528,104601],{"class":213},[19,105530,105531,105532,105534,105535,105537],{},"手动改完 ",[200,105533,104088],{}," 后，调用 ",[200,105536,104308],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,105539,102374],{"id":102373},[19,105541,105542],{},"你会看到:",[157,105544,105545,105550,105555,105558],{},[160,105546,105547,105548],{},"初始时间为 ",[200,105549,405],{},[160,105551,105552,105553],{},"50 步后时间约为 ",[200,105554,35387],{},[160,105556,105557],{},"reset 后状态恢复",[160,105559,105560,105561,105564,105565],{},"手动修改 ",[200,105562,105563],{},"data.qpos[2]"," 后，小球高度变为 ",[200,105566,105318],{},[19,105568,105569,105571],{},[200,105570,105314],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,105573,105574],{},"输出里可以重点看三件事：",[157,105576,105577,105585,105590],{},[160,105578,105579,105581,105582,105584],{},[200,105580,2476],{}," 是否随着 ",[200,105583,101273],{}," 增加。",[160,105586,105587,105589],{},[200,105588,104088],{}," 的 z 坐标是否因为下落而变化。",[160,105591,105592,105594,105595,28443],{},[200,105593,104410],{}," 后时间是否回到 ",[200,105596,405],{},[14,105598,102406],{"id":102405},[157,105600,105601,105607,105613,105619,105622,105631],{},[160,105602,105603,105604,28443],{},"修改 timestep 为 ",[200,105605,105606],{},"0.005",[160,105608,105609,105610,28443],{},"重新运行，检查 50 步后时间是否约为 ",[200,105611,105612],{},"0.25",[160,105614,105615,105616,28443],{},"修改重力为 ",[200,105617,105618],{},"0 0 -1.0",[160,105620,105621],{},"观察小球下降速度是否变慢。",[160,105623,102469,105624,102472,105627,105630],{},[200,105625,105626],{},"data.qpos[2] = 2.0",[200,105628,105629],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[160,105632,105633,105634,105637],{},"注释掉 ",[200,105635,105636],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,105639,102511],{"id":102510},[174,105641,105643,105644,105646],{"id":105642},"修改-dataqpos-后位置没有更新","修改 ",[200,105645,101128],{}," 后位置没有更新",[19,105648,102520],{},[194,105650,105651],{"className":30436,"code":104601,"language":30438,"meta":27,"style":27},[200,105652,105653],{"__ignoreMap":27},[203,105654,105655],{"class":205,"line":206},[203,105656,104601],{"class":213},[174,105658,105659],{"id":105659},"数组维度看不懂",[19,105661,105662],{},"打印模型维度:",[194,105664,105666],{"className":30436,"code":105665,"language":30438,"meta":27,"style":27},"print(model.nq, model.nv, model.nu)\n",[200,105667,105668],{"__ignoreMap":27},[203,105669,105670,105672],{"class":205,"line":206},[203,105671,30473],{"class":262},[203,105673,105674],{"class":213},"(model.nq, model.nv, model.nu)\n",[351,105676,105677,105685],{},[354,105678,105679],{},[357,105680,105681,105683],{},[360,105682,104632],{"align":23827},[360,105684,100758],{"align":23827},[398,105686,105687,105697,105707],{},[357,105688,105689,105694],{},[403,105690,105691],{"align":23827},[200,105692,105693],{},"nq",[403,105695,105696],{"align":23827},"位置变量数量",[357,105698,105699,105704],{},[403,105700,105701],{"align":23827},[200,105702,105703],{},"nv",[403,105705,105706],{"align":23827},"速度变量数量",[357,105708,105709,105713],{},[403,105710,105711],{"align":23827},[200,105712,102220],{},[403,105714,105715],{"align":23827},"控制输入数量",[174,105717,105719,105720,105722],{"id":105718},"误以为-qpos-一定等于关节数","误以为 ",[200,105721,104088],{}," 一定等于关节数",[19,105724,105725,105726,82588,105728,105730,105731,105733],{},"不是。例如 ",[200,105727,101678],{},[200,105729,104088],{}," 是 7 维，但 ",[200,105732,104418],{}," 是 6 维。",[174,105735,105737,105738,105740],{"id":105736},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[200,105739,104088],{}," 的第几位",[19,105742,105743],{},"初学时可以先打印：",[194,105745,105747],{"className":30436,"code":105746,"language":30438,"meta":27,"style":27},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[200,105748,105749,105759,105769,105781],{"__ignoreMap":27},[203,105750,105751,105753,105755,105757],{"class":205,"line":206},[203,105752,30473],{"class":262},[203,105754,214],{"class":213},[203,105756,101497],{"class":318},[203,105758,101500],{"class":213},[203,105760,105761,105763,105765,105767],{"class":205,"line":124},[203,105762,30473],{"class":262},[203,105764,214],{"class":213},[203,105766,101509],{"class":318},[203,105768,101512],{"class":213},[203,105770,105771,105773,105775,105778],{"class":205,"line":1269},[203,105772,30473],{"class":262},[203,105774,214],{"class":213},[203,105776,105777],{"class":318},"\"qpos:\"",[203,105779,105780],{"class":213},", data.qpos)\n",[203,105782,105783,105785,105787,105790],{"class":205,"line":1284},[203,105784,30473],{"class":262},[203,105786,214],{"class":213},[203,105788,105789],{"class":318},"\"qvel:\"",[203,105791,105792],{"class":213},", data.qvel)\n",[19,105794,105795],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[174,105797,105798],{"id":105798},"仿真结果每次都一样",[19,105800,105801,105802,105804],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[200,105803,104088],{},"、目标点或控制输入。",[14,105806,102665],{"id":102664},[19,105808,105809,105810,24676],{},"Python 控制 MuJoCo 的核心就是读写 ",[200,105811,33459],{},[157,105813,105814,105822,105827,105832],{},[160,105815,105816,105817,101076,105819,105821],{},"用 ",[200,105818,101128],{},[200,105820,101131],{}," 读取状态。",[160,105823,105816,105824,105826],{},[200,105825,101134],{}," 写入控制。",[160,105828,105816,105829,105831],{},[200,105830,101273],{}," 推进时间。",[160,105833,105834,105835,105837],{},"手动改状态后用 ",[200,105836,104308],{}," 刷新派生量。",[19,105839,105840],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5216,105842,105843],{},"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":27,"searchDepth":124,"depth":124,"links":105845},[105846,105847,105848,105855,105859,105860,105861,105871],{"id":100704,"depth":124,"text":100705},{"id":100827,"depth":124,"text":100828},{"id":101102,"depth":124,"text":101103,"children":105849},[105850,105852,105854],{"id":104613,"depth":1269,"text":105851},"qpos、qvel、ctrl 是什么",{"id":104691,"depth":1269,"text":105853},"mj_step 和 mj_forward 的区别",{"id":104780,"depth":1269,"text":104781},{"id":101310,"depth":124,"text":101311,"children":105856},[105857,105858],{"id":101630,"depth":1269,"text":101630},{"id":101766,"depth":1269,"text":101766},{"id":102373,"depth":124,"text":102374},{"id":102405,"depth":124,"text":102406},{"id":102510,"depth":124,"text":102511,"children":105862},[105863,105865,105866,105868,105870],{"id":105642,"depth":1269,"text":105864},"修改 data.qpos 后位置没有更新",{"id":105659,"depth":1269,"text":105659},{"id":105718,"depth":1269,"text":105867},"误以为 qpos 一定等于关节数",{"id":105736,"depth":1269,"text":105869},"不知道某个元素在 qpos 的第几位",{"id":105798,"depth":1269,"text":105798},{"id":102664,"depth":124,"text":102665},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104376,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105878,"title":105879,"body":105880,"description":27,"extension":129,"meta":107570,"navigation":131,"path":107571,"seo":107572,"stem":107573,"__hash__":107574},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105881,"toc":107546},[105882,105885,105887,105890,105892,105917,105920,105939,105942,105944,105946,105970,105972,105986,105988,106029,106031,106055,106057,106060,106094,106096,106109,106112,106180,106189,106193,106196,106230,106236,106239,106243,106282,106285,106305,106309,106352,106354,106383,106386,106392,106395,106397,106791,106793,106805,106807,106818,106820,106823,106852,106860,106863,106898,106901,106903,106911,106914,106916,106927,106937,106957,106960,106996,107008,107056,107075,107117,107130,107158,107163,107184,107194,107212,107215,107249,107252,107272,107275,107294,107300,107302,107305,107311,107317,107327,107330,107336,107345,107347,107393,107395,107401,107407,107410,107413,107433,107436,107442,107448,107450,107473,107476,107479,107488,107491,107529,107531,107534,107540,107543],[10,105883,105879],{"id":105884},"_4关节actuator-与力控制",[14,105886,100705],{"id":100704},[19,105888,105889],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,105891,104389],{},[157,105893,105894,105900,105905,105909,105914],{},[160,105895,105896,105899],{},[200,105897,105898],{},"hinge"," 关节",[160,105901,105902],{},[200,105903,105904],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[160,105906,105907],{},[200,105908,101134],{},[160,105910,105911],{},[200,105912,105913],{},"ctrlrange",[160,105915,105916],{},"读取关节角和角速度",[19,105918,105919],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[194,105921,105923],{"className":30436,"code":105922,"language":30438,"meta":27,"style":27},"data.ctrl[0] = ...\n",[200,105924,105925],{"__ignoreMap":27},[203,105926,105927,105930,105932,105934,105936],{"class":205,"line":206},[203,105928,105929],{"class":213},"data.ctrl[",[203,105931,405],{"class":262},[203,105933,4532],{"class":213},[203,105935,259],{"class":209},[203,105937,105938],{"class":262}," ...\n",[19,105940,105941],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,105943,100828],{"id":100827},[19,105945,100831],{},[194,105947,105948],{"className":23913,"code":104446,"language":23915,"meta":27,"style":27},[200,105949,105950],{"__ignoreMap":27},[203,105951,105952,105954,105956,105958,105960,105962,105964,105966,105968],{"class":205,"line":206},[203,105953,24634],{"class":2052},[203,105955,26373],{"class":318},[203,105957,23925],{"class":318},[203,105959,26458],{"class":262},[203,105961,104461],{"class":318},[203,105963,100856],{"class":318},[203,105965,102559],{"class":318},[203,105967,100872],{"class":318},[203,105969,104470],{"class":318},[19,105971,102877],{},[194,105973,105974],{"className":23913,"code":100977,"language":23915,"meta":27,"style":27},[200,105975,105976],{"__ignoreMap":27},[203,105977,105978,105980,105982,105984],{"class":205,"line":206},[203,105979,23922],{"class":2052},[203,105981,23925],{"class":318},[203,105983,100988],{"class":318},[203,105985,100991],{"class":318},[19,105987,102894],{},[194,105989,105991],{"className":23913,"code":105990,"language":23915,"meta":27,"style":27},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[200,105992,105993,106010,106019],{"__ignoreMap":27},[203,105994,105995,105997,105999,106001,106004,106006,106008],{"class":205,"line":206},[203,105996,30388],{"class":2052},[203,105998,29234],{"class":318},[203,106000,25173],{"class":262},[203,106002,106003],{"class":318}," mujoco-control",[203,106005,101033],{"class":318},[203,106007,101036],{"class":262},[203,106009,101039],{"class":262},[203,106011,106012,106014,106016],{"class":205,"line":124},[203,106013,30388],{"class":2052},[203,106015,101046],{"class":318},[203,106017,106018],{"class":318}," mujoco-control\n",[203,106020,106021,106023,106025,106027],{"class":205,"line":1269},[203,106022,23922],{"class":2052},[203,106024,23925],{"class":318},[203,106026,100988],{"class":318},[203,106028,100991],{"class":318},[19,106030,101062],{},[157,106032,106033,106039,106046,106052],{},[160,106034,106035,106038],{},[200,106036,106037],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[160,106040,106041,106043,106044,28443],{},[200,106042,101134],{}," 长度等于 ",[200,106045,102216],{},[160,106047,82280,106048,106051],{},[200,106049,106050],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[160,106053,106054],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106056,101103],{"id":101102},[19,106058,106059],{},"关节决定 body 如何运动:",[194,106061,106063],{"className":53125,"code":106062,"language":53127,"meta":27,"style":27},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[200,106064,106065],{"__ignoreMap":27},[203,106066,106067,106069,106071,106073,106075,106078,106080,106082,106084,106087,106089,106092],{"class":205,"line":206},[203,106068,1124],{"class":213},[203,106070,103014],{"class":51358},[203,106072,15010],{"class":2052},[203,106074,259],{"class":213},[203,106076,106077],{"class":318},"\"hinge\"",[203,106079,53882],{"class":2052},[203,106081,259],{"class":213},[203,106083,106077],{"class":318},[203,106085,106086],{"class":2052}," axis",[203,106088,259],{"class":213},[203,106090,106091],{"class":318},"\"0 1 0\"",[203,106093,101202],{"class":213},[19,106095,103110],{},[157,106097,106098,106103,106106],{},[160,106099,106100,106101],{},"名字是 ",[200,106102,105898],{},[160,106104,106105],{},"类型是旋转关节",[160,106107,106108],{},"绕 y 轴旋转",[19,106110,106111],{},"actuator 决定如何施加控制:",[194,106113,106115],{"className":53125,"code":106114,"language":53127,"meta":27,"style":27},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[200,106116,106117,106126,106172],{"__ignoreMap":27},[203,106118,106119,106121,106124],{"class":205,"line":206},[203,106120,1124],{"class":213},[203,106122,106123],{"class":51358},"actuator",[203,106125,51365],{"class":213},[203,106127,106128,106130,106133,106135,106137,106140,106143,106145,106147,106150,106152,106154,106157,106159,106162,106165,106167,106170],{"class":205,"line":124},[203,106129,52202],{"class":213},[203,106131,106132],{"class":51358},"motor",[203,106134,15010],{"class":2052},[203,106136,259],{"class":213},[203,106138,106139],{"class":318},"\"hinge_motor\"",[203,106141,106142],{"class":2052}," joint",[203,106144,259],{"class":213},[203,106146,106077],{"class":318},[203,106148,106149],{"class":2052}," gear",[203,106151,259],{"class":213},[203,106153,3767],{"class":318},[203,106155,106156],{"class":2052}," ctrlrange",[203,106158,259],{"class":213},[203,106160,106161],{"class":318},"\"-2 2\"",[203,106163,106164],{"class":2052}," ctrllimited",[203,106166,259],{"class":213},[203,106168,106169],{"class":318},"\"true\"",[203,106171,101202],{"class":213},[203,106173,106174,106176,106178],{"class":205,"line":1269},[203,106175,51843],{"class":213},[203,106177,106123],{"class":51358},[203,106179,51365],{"class":213},[19,106181,106182,106185,106186,28443],{},[200,106183,106184],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[200,106187,106188],{},"[-2, 2]",[174,106190,106192],{"id":106191},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106194,106195],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[351,106197,106198,106208],{},[354,106199,106200],{},[357,106201,106202,106204,106206],{},[360,106203,25811],{"align":23827},[360,106205,102754],{"align":23827},[360,106207,100792],{"align":23827},[398,106209,106210,106220],{},[357,106211,106212,106214,106217],{},[403,106213,103014],{"align":23827},[403,106215,106216],{"align":23827},"定义能怎么动",[403,106218,106219],{"align":23827},"门轴允许门旋转",[357,106221,106222,106224,106227],{},[403,106223,106123],{"align":23827},[403,106225,106226],{"align":23827},"定义怎么施力或控制",[403,106228,106229],{"align":23827},"人推门、马达带动门",[19,106231,106232,106233,106235],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[200,106234,101134],{}," 主动控制它。",[19,106237,106238],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[174,106240,106242],{"id":106241},"hinge-joint","hinge joint",[194,106244,106246],{"className":53125,"code":106245,"language":53127,"meta":27,"style":27},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[200,106247,106248],{"__ignoreMap":27},[203,106249,106250,106252,106254,106256,106258,106260,106262,106264,106266,106268,106270,106272,106275,106277,106280],{"class":205,"line":206},[203,106251,1124],{"class":213},[203,106253,103014],{"class":51358},[203,106255,15010],{"class":2052},[203,106257,259],{"class":213},[203,106259,106077],{"class":318},[203,106261,53882],{"class":2052},[203,106263,259],{"class":213},[203,106265,106077],{"class":318},[203,106267,106086],{"class":2052},[203,106269,259],{"class":213},[203,106271,106091],{"class":318},[203,106273,106274],{"class":2052}," damping",[203,106276,259],{"class":213},[203,106278,106279],{"class":318},"\"0.1\"",[203,106281,101202],{"class":213},[19,106283,106284],{},"含义：",[157,106286,106287,106293,106299],{},[160,106288,106289,106292],{},[200,106290,106291],{},"type=\"hinge\"","：只能绕一个轴旋转。",[160,106294,106295,106298],{},[200,106296,106297],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[160,106300,106301,106304],{},[200,106302,106303],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[174,106306,106308],{"id":106307},"motor-actuator","motor actuator",[194,106310,106312],{"className":53125,"code":106311,"language":53127,"meta":27,"style":27},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[200,106313,106314],{"__ignoreMap":27},[203,106315,106316,106318,106320,106322,106324,106326,106328,106330,106332,106334,106336,106338,106340,106342,106344,106346,106348,106350],{"class":205,"line":206},[203,106317,1124],{"class":213},[203,106319,106132],{"class":51358},[203,106321,15010],{"class":2052},[203,106323,259],{"class":213},[203,106325,106139],{"class":318},[203,106327,106142],{"class":2052},[203,106329,259],{"class":213},[203,106331,106077],{"class":318},[203,106333,106149],{"class":2052},[203,106335,259],{"class":213},[203,106337,3767],{"class":318},[203,106339,106156],{"class":2052},[203,106341,259],{"class":213},[203,106343,106161],{"class":318},[203,106345,106164],{"class":2052},[203,106347,259],{"class":213},[203,106349,106169],{"class":318},[203,106351,101202],{"class":213},[19,106353,106284],{},[157,106355,106356,106365,106371,106377],{},[160,106357,106358,106361,106362,106364],{},[200,106359,106360],{},"joint=\"hinge\"","：这个电机作用在名为 ",[200,106363,105898],{}," 的关节上。",[160,106366,106367,106370],{},[200,106368,106369],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[160,106372,106373,106376],{},[200,106374,106375],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[160,106378,106379,106382],{},[200,106380,106381],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106384,106385],{},"简单理解：",[194,106387,106390],{"className":106388,"code":106389,"language":5277,"meta":27},[5275],"实际施加效果 ≈ data.ctrl[0] * gear\n",[200,106391,106389],{"__ignoreMap":27},[19,106393,106394],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106396,101311],{"id":101310},[194,106398,106400],{"className":30436,"code":106399,"language":30438,"meta":27,"style":27},"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",[200,106401,106402,106409,106413,106419,106429,106433,106437,106445,106450,106455,106459,106463,106468,106473,106477,106482,106487,106492,106497,106501,106505,106509,106514,106519,106524,106528,106532,106536,106540,106552,106564,106572,106576,106586,106596,106606,106610,106623,106636,106640,106657,106671,106706,106710,106714,106725,106740,106755,106767,106771,106775,106787],{"__ignoreMap":27},[203,106403,106404,106406],{"class":205,"line":206},[203,106405,30450],{"class":209},[203,106407,106408],{"class":213}," math\n",[203,106410,106411],{"class":205,"line":124},[203,106412,2489],{"emptyLinePlaceholder":131},[203,106414,106415,106417],{"class":205,"line":1269},[203,106416,30450],{"class":209},[203,106418,101359],{"class":213},[203,106420,106421,106423,106425,106427],{"class":205,"line":1284},[203,106422,30450],{"class":209},[203,106424,31438],{"class":213},[203,106426,31441],{"class":209},[203,106428,31444],{"class":213},[203,106430,106431],{"class":205,"line":1290},[203,106432,2489],{"emptyLinePlaceholder":131},[203,106434,106435],{"class":205,"line":1304},[203,106436,2489],{"emptyLinePlaceholder":131},[203,106438,106439,106441,106443],{"class":205,"line":1310},[203,106440,101372],{"class":262},[203,106442,13654],{"class":209},[203,106444,101377],{"class":318},[203,106446,106447],{"class":205,"line":1401},[203,106448,106449],{"class":318},"\u003Cmujoco model=\"one_link_motor\">\n",[203,106451,106452],{"class":205,"line":1407},[203,106453,106454],{"class":318},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[203,106456,106457],{"class":205,"line":1419},[203,106458,2489],{"emptyLinePlaceholder":131},[203,106460,106461],{"class":205,"line":1701},[203,106462,101396],{"class":318},[203,106464,106465],{"class":205,"line":1706},[203,106466,106467],{"class":318},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[203,106469,106470],{"class":205,"line":1712},[203,106471,106472],{"class":318},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[203,106474,106475],{"class":205,"line":1717},[203,106476,2489],{"emptyLinePlaceholder":131},[203,106478,106479],{"class":205,"line":1731},[203,106480,106481],{"class":318},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[203,106483,106484],{"class":205,"line":1736},[203,106485,106486],{"class":318},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[203,106488,106489],{"class":205,"line":1742},[203,106490,106491],{"class":318},"        \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",[203,106493,106494],{"class":205,"line":1763},[203,106495,106496],{"class":318},"      \u003C\u002Fbody>\n",[203,106498,106499],{"class":205,"line":1768},[203,106500,101425],{"class":318},[203,106502,106503],{"class":205,"line":1782},[203,106504,101430],{"class":318},[203,106506,106507],{"class":205,"line":1787},[203,106508,2489],{"emptyLinePlaceholder":131},[203,106510,106511],{"class":205,"line":1816},[203,106512,106513],{"class":318},"  \u003Cactuator>\n",[203,106515,106516],{"class":205,"line":1821},[203,106517,106518],{"class":318},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[203,106520,106521],{"class":205,"line":1838},[203,106522,106523],{"class":318},"  \u003C\u002Factuator>\n",[203,106525,106526],{"class":205,"line":1843},[203,106527,101435],{"class":318},[203,106529,106530],{"class":205,"line":1848},[203,106531,95756],{"class":318},[203,106533,106534],{"class":205,"line":1853},[203,106535,2489],{"emptyLinePlaceholder":131},[203,106537,106538],{"class":205,"line":1867},[203,106539,2489],{"emptyLinePlaceholder":131},[203,106541,106542,106544,106546,106548,106550],{"class":205,"line":1872},[203,106543,32005],{"class":209},[203,106545,2062],{"class":2052},[203,106547,101456],{"class":213},[203,106549,95744],{"class":262},[203,106551,3828],{"class":213},[203,106553,106554,106556,106558,106560,106562],{"class":205,"line":2666},[203,106555,101465],{"class":213},[203,106557,259],{"class":209},[203,106559,101470],{"class":213},[203,106561,101372],{"class":262},[203,106563,220],{"class":213},[203,106565,106566,106568,106570],{"class":205,"line":2680},[203,106567,101479],{"class":213},[203,106569,259],{"class":209},[203,106571,101484],{"class":213},[203,106573,106574],{"class":205,"line":2688},[203,106575,2489],{"emptyLinePlaceholder":131},[203,106577,106578,106580,106582,106584],{"class":205,"line":2693},[203,106579,31357],{"class":262},[203,106581,214],{"class":213},[203,106583,101497],{"class":318},[203,106585,101500],{"class":213},[203,106587,106588,106590,106592,106594],{"class":205,"line":2699},[203,106589,31357],{"class":262},[203,106591,214],{"class":213},[203,106593,101509],{"class":318},[203,106595,101512],{"class":213},[203,106597,106598,106600,106602,106604],{"class":205,"line":2705},[203,106599,31357],{"class":262},[203,106601,214],{"class":213},[203,106603,101521],{"class":318},[203,106605,101524],{"class":213},[203,106607,106608],{"class":205,"line":2710},[203,106609,2489],{"emptyLinePlaceholder":131},[203,106611,106612,106614,106617,106619,106621],{"class":205,"line":8038},[203,106613,3190],{"class":209},[203,106615,106616],{"class":213}," model.nu ",[203,106618,21038],{"class":209},[203,106620,25176],{"class":262},[203,106622,3828],{"class":213},[203,106624,106625,106627,106629,106631,106634],{"class":205,"line":8062},[203,106626,103490],{"class":209},[203,106628,103493],{"class":262},[203,106630,214],{"class":213},[203,106632,106633],{"class":318},"\"expected exactly one actuator\"",[203,106635,220],{"class":213},[203,106637,106638],{"class":205,"line":8067},[203,106639,2489],{"emptyLinePlaceholder":131},[203,106641,106642,106644,106646,106648,106650,106652,106655],{"class":205,"line":8073},[203,106643,3290],{"class":209},[203,106645,31674],{"class":213},[203,106647,26101],{"class":209},[203,106649,32501],{"class":262},[203,106651,214],{"class":213},[203,106653,106654],{"class":262},"2000",[203,106656,30844],{"class":213},[203,106658,106659,106662,106664,106666,106668],{"class":205,"line":8100},[203,106660,106661],{"class":213},"        t ",[203,106663,259],{"class":209},[203,106665,31674],{"class":213},[203,106667,669],{"class":209},[203,106669,106670],{"class":213}," model.opt.timestep\n",[203,106672,106673,106676,106678,106680,106682,106685,106687,106690,106692,106694,106697,106699,106701,106703],{"class":205,"line":8105},[203,106674,106675],{"class":213},"        data.ctrl[",[203,106677,405],{"class":262},[203,106679,4532],{"class":213},[203,106681,259],{"class":209},[203,106683,106684],{"class":262}," 1.5",[203,106686,6608],{"class":209},[203,106688,106689],{"class":213}," math.sin(",[203,106691,105318],{"class":262},[203,106693,6608],{"class":209},[203,106695,106696],{"class":213}," math.pi ",[203,106698,669],{"class":209},[203,106700,61925],{"class":262},[203,106702,6608],{"class":209},[203,106704,106705],{"class":213}," t)\n",[203,106707,106708],{"class":205,"line":8111},[203,106709,101574],{"class":213},[203,106711,106712],{"class":205,"line":8123},[203,106713,2489],{"emptyLinePlaceholder":131},[203,106715,106716,106718,106720,106723],{"class":205,"line":8135},[203,106717,31357],{"class":262},[203,106719,214],{"class":213},[203,106721,106722],{"class":318},"\"time:\"",[203,106724,101536],{"class":213},[203,106726,106727,106729,106731,106734,106736,106738],{"class":205,"line":8147},[203,106728,31357],{"class":262},[203,106730,214],{"class":213},[203,106732,106733],{"class":318},"\"joint qpos:\"",[203,106735,104988],{"class":213},[203,106737,507],{"class":262},[203,106739,30555],{"class":213},[203,106741,106742,106744,106746,106749,106751,106753],{"class":205,"line":9806},[203,106743,31357],{"class":262},[203,106745,214],{"class":213},[203,106747,106748],{"class":318},"\"joint qvel:\"",[203,106750,105004],{"class":213},[203,106752,507],{"class":262},[203,106754,30555],{"class":213},[203,106756,106757,106759,106761,106764],{"class":205,"line":9831},[203,106758,31357],{"class":262},[203,106760,214],{"class":213},[203,106762,106763],{"class":318},"\"last ctrl:\"",[203,106765,106766],{"class":213},", data.ctrl.copy())\n",[203,106768,106769],{"class":205,"line":9854},[203,106770,2489],{"emptyLinePlaceholder":131},[203,106772,106773],{"class":205,"line":9878},[203,106774,2489],{"emptyLinePlaceholder":131},[203,106776,106777,106779,106781,106783,106785],{"class":205,"line":9883},[203,106778,1620],{"class":209},[203,106780,31278],{"class":262},[203,106782,101617],{"class":209},[203,106784,101620],{"class":318},[203,106786,3828],{"class":213},[203,106788,106789],{"class":205,"line":9888},[203,106790,101627],{"class":213},[19,106792,103628],{},[194,106794,106796],{"className":23913,"code":106795,"language":23915,"meta":27,"style":27},"touch ch4_joint_motor.py\n",[200,106797,106798],{"__ignoreMap":27},[203,106799,106800,106802],{"class":205,"line":206},[203,106801,101341],{"class":2052},[203,106803,106804],{"class":318}," ch4_joint_motor.py\n",[19,106806,102359],{},[194,106808,106810],{"className":23913,"code":106809,"language":23915,"meta":27,"style":27},"python ch4_joint_motor.py\n",[200,106811,106812],{"__ignoreMap":27},[203,106813,106814,106816],{"class":205,"line":206},[203,106815,30438],{"class":2052},[203,106817,106804],{"class":318},[174,106819,101630],{"id":101630},[19,106821,106822],{},"检查 actuator 数量：",[194,106824,106826],{"className":30436,"code":106825,"language":30438,"meta":27,"style":27},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[200,106827,106828,106840],{"__ignoreMap":27},[203,106829,106830,106832,106834,106836,106838],{"class":205,"line":206},[203,106831,1620],{"class":209},[203,106833,106616],{"class":213},[203,106835,21038],{"class":209},[203,106837,25176],{"class":262},[203,106839,3828],{"class":213},[203,106841,106842,106844,106846,106848,106850],{"class":205,"line":124},[203,106843,103953],{"class":209},[203,106845,103493],{"class":262},[203,106847,214],{"class":213},[203,106849,106633],{"class":318},[203,106851,220],{"class":213},[19,106853,106854,106856,106857,106859],{},[200,106855,102216],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[200,106858,101134],{}," 长度应该是 1。",[19,106861,106862],{},"产生正弦控制信号：",[194,106864,106866],{"className":30436,"code":106865,"language":30438,"meta":27,"style":27},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[200,106867,106868],{"__ignoreMap":27},[203,106869,106870,106872,106874,106876,106878,106880,106882,106884,106886,106888,106890,106892,106894,106896],{"class":205,"line":206},[203,106871,105929],{"class":213},[203,106873,405],{"class":262},[203,106875,4532],{"class":213},[203,106877,259],{"class":209},[203,106879,106684],{"class":262},[203,106881,6608],{"class":209},[203,106883,106689],{"class":213},[203,106885,105318],{"class":262},[203,106887,6608],{"class":209},[203,106889,106696],{"class":213},[203,106891,669],{"class":209},[203,106893,61925],{"class":262},[203,106895,6608],{"class":209},[203,106897,106705],{"class":213},[19,106899,106900],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,106902,101731],{},[194,106904,106905],{"className":30436,"code":104563,"language":30438,"meta":27,"style":27},[200,106906,106907],{"__ignoreMap":27},[203,106908,106909],{"class":205,"line":206},[203,106910,104563],{"class":213},[19,106912,106913],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[174,106915,101766],{"id":101766},[194,106917,106919],{"className":30436,"code":106918,"language":30438,"meta":27,"style":27},"import math\n",[200,106920,106921],{"__ignoreMap":27},[203,106922,106923,106925],{"class":205,"line":206},[203,106924,30450],{"class":209},[203,106926,106408],{"class":213},[19,106928,106929,106930,101076,106933,106936],{},"导入 Python 标准库里的数学模块。后面要用 ",[200,106931,106932],{},"math.sin",[200,106934,106935],{},"math.pi"," 生成周期变化的控制信号。",[194,106938,106939],{"className":30436,"code":103744,"language":30438,"meta":27,"style":27},[200,106940,106941,106947],{"__ignoreMap":27},[203,106942,106943,106945],{"class":205,"line":206},[203,106944,30450],{"class":209},[203,106946,101359],{"class":213},[203,106948,106949,106951,106953,106955],{"class":205,"line":124},[203,106950,30450],{"class":209},[203,106952,31438],{"class":213},[203,106954,31441],{"class":209},[203,106956,31444],{"class":213},[19,106958,106959],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[194,106961,106962],{"className":53125,"code":106245,"language":53127,"meta":27,"style":27},[200,106963,106964],{"__ignoreMap":27},[203,106965,106966,106968,106970,106972,106974,106976,106978,106980,106982,106984,106986,106988,106990,106992,106994],{"class":205,"line":206},[203,106967,1124],{"class":213},[203,106969,103014],{"class":51358},[203,106971,15010],{"class":2052},[203,106973,259],{"class":213},[203,106975,106077],{"class":318},[203,106977,53882],{"class":2052},[203,106979,259],{"class":213},[203,106981,106077],{"class":318},[203,106983,106086],{"class":2052},[203,106985,259],{"class":213},[203,106987,106091],{"class":318},[203,106989,106274],{"class":2052},[203,106991,259],{"class":213},[203,106993,106279],{"class":318},[203,106995,101202],{"class":213},[19,106997,106998,106999,107001,107002,107004,107005,107007],{},"这行定义关节。",[200,107000,105898],{}," 表示旋转关节。",[200,107003,106297],{}," 表示绕 y 轴旋转。",[200,107006,106303],{}," 表示有一点阻尼，运动不会完全无损耗。",[194,107009,107011],{"className":53125,"code":107010,"language":53127,"meta":27,"style":27},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[200,107012,107013],{"__ignoreMap":27},[203,107014,107015,107017,107019,107021,107023,107026,107028,107030,107033,107036,107038,107041,107043,107045,107047,107049,107051,107054],{"class":205,"line":206},[203,107016,1124],{"class":213},[203,107018,101178],{"class":51358},[203,107020,15010],{"class":2052},[203,107022,259],{"class":213},[203,107024,107025],{"class":318},"\"link_geom\"",[203,107027,53882],{"class":2052},[203,107029,259],{"class":213},[203,107031,107032],{"class":318},"\"capsule\"",[203,107034,107035],{"class":2052}," fromto",[203,107037,259],{"class":213},[203,107039,107040],{"class":318},"\"0 0 0 0 0 0.5\"",[203,107042,101194],{"class":2052},[203,107044,259],{"class":213},[203,107046,103836],{"class":318},[203,107048,102059],{"class":2052},[203,107050,259],{"class":213},[203,107052,107053],{"class":318},"\"0.5\"",[203,107055,101202],{"class":213},[19,107057,107058,107059,107061,107062,107064,107065,107068,107069,28443,107072,107074],{},"这行定义摆杆的形状。",[200,107060,103223],{}," 是胶囊体，适合表示杆子。",[200,107063,103234],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[200,107066,107067],{},"(0,0,0)"," 延伸到 ",[200,107070,107071],{},"(0,0,0.5)",[200,107073,103228],{}," 是半径。",[194,107076,107077],{"className":53125,"code":106311,"language":53127,"meta":27,"style":27},[200,107078,107079],{"__ignoreMap":27},[203,107080,107081,107083,107085,107087,107089,107091,107093,107095,107097,107099,107101,107103,107105,107107,107109,107111,107113,107115],{"class":205,"line":206},[203,107082,1124],{"class":213},[203,107084,106132],{"class":51358},[203,107086,15010],{"class":2052},[203,107088,259],{"class":213},[203,107090,106139],{"class":318},[203,107092,106142],{"class":2052},[203,107094,259],{"class":213},[203,107096,106077],{"class":318},[203,107098,106149],{"class":2052},[203,107100,259],{"class":213},[203,107102,3767],{"class":318},[203,107104,106156],{"class":2052},[203,107106,259],{"class":213},[203,107108,106161],{"class":318},[203,107110,106164],{"class":2052},[203,107112,259],{"class":213},[203,107114,106169],{"class":318},[203,107116,101202],{"class":213},[19,107118,107119,107120,107122,107123,107126,107127,107129],{},"这行定义电机。它作用在 ",[200,107121,105898],{}," 关节上。",[200,107124,107125],{},"gear"," 可以理解成放大倍数。",[200,107128,105913],{}," 限制控制输入范围。",[194,107131,107132],{"className":30436,"code":106825,"language":30438,"meta":27,"style":27},[200,107133,107134,107146],{"__ignoreMap":27},[203,107135,107136,107138,107140,107142,107144],{"class":205,"line":206},[203,107137,1620],{"class":209},[203,107139,106616],{"class":213},[203,107141,21038],{"class":209},[203,107143,25176],{"class":262},[203,107145,3828],{"class":213},[203,107147,107148,107150,107152,107154,107156],{"class":205,"line":124},[203,107149,103953],{"class":209},[203,107151,103493],{"class":262},[203,107153,214],{"class":213},[203,107155,106633],{"class":318},[203,107157,220],{"class":213},[19,107159,107160,107162],{},[200,107161,102216],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[194,107164,107166],{"className":30436,"code":107165,"language":30438,"meta":27,"style":27},"for step in range(2000):\n",[200,107167,107168],{"__ignoreMap":27},[203,107169,107170,107172,107174,107176,107178,107180,107182],{"class":205,"line":206},[203,107171,3114],{"class":209},[203,107173,31674],{"class":213},[203,107175,26101],{"class":209},[203,107177,32501],{"class":262},[203,107179,214],{"class":213},[203,107181,106654],{"class":262},[203,107183,30844],{"class":213},[19,107185,107186,107187,107189,107190,107193],{},"循环 2000 步。这里没有用 ",[200,107188,1206],{},"，而是用 ",[200,107191,107192],{},"step","，因为后面要用当前步数计算时间。",[194,107195,107197],{"className":30436,"code":107196,"language":30438,"meta":27,"style":27},"t = step * model.opt.timestep\n",[200,107198,107199],{"__ignoreMap":27},[203,107200,107201,107204,107206,107208,107210],{"class":205,"line":206},[203,107202,107203],{"class":213},"t ",[203,107205,259],{"class":209},[203,107207,31674],{"class":213},[203,107209,669],{"class":209},[203,107211,106670],{"class":213},[19,107213,107214],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[194,107216,107217],{"className":30436,"code":106865,"language":30438,"meta":27,"style":27},[200,107218,107219],{"__ignoreMap":27},[203,107220,107221,107223,107225,107227,107229,107231,107233,107235,107237,107239,107241,107243,107245,107247],{"class":205,"line":206},[203,107222,105929],{"class":213},[203,107224,405],{"class":262},[203,107226,4532],{"class":213},[203,107228,259],{"class":209},[203,107230,106684],{"class":262},[203,107232,6608],{"class":209},[203,107234,106689],{"class":213},[203,107236,105318],{"class":262},[203,107238,6608],{"class":209},[203,107240,106696],{"class":213},[203,107242,669],{"class":209},[203,107244,61925],{"class":262},[203,107246,6608],{"class":209},[203,107248,106705],{"class":213},[19,107250,107251],{},"这行给电机输入一个正弦波。拆开看：",[157,107253,107254,107260,107266],{},[160,107255,107256,107259],{},[200,107257,107258],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[160,107261,107262,107265],{},[200,107263,107264],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[160,107267,107268,107271],{},[200,107269,107270],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107273,107274],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[194,107276,107278],{"className":30436,"code":107277,"language":30438,"meta":27,"style":27},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[200,107279,107280],{"__ignoreMap":27},[203,107281,107282,107284,107286,107288,107290,107292],{"class":205,"line":206},[203,107283,30473],{"class":262},[203,107285,214],{"class":213},[203,107287,106733],{"class":318},[203,107289,104988],{"class":213},[203,107291,507],{"class":262},[203,107293,30555],{"class":213},[19,107295,107296,107297,107299],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[200,107298,101128],{}," 只有一个数。",[14,107301,102374],{"id":102373},[19,107303,107304],{},"输出类似:",[194,107306,107309],{"className":107307,"code":107308,"language":5277,"meta":27},[5275],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[200,107310,107308],{"__ignoreMap":27},[19,107312,107313,107314,107316],{},"这里 ",[200,107315,106184],{}," 是电机输入。",[19,107318,107319,107322,107323,107326],{},[200,107320,107321],{},"joint qpos"," 是关节角度，单位通常是弧度。",[200,107324,107325],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107328,107329],{},"角度单位提示：",[194,107331,107334],{"className":107332,"code":107333,"language":5277,"meta":27},[5275],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[200,107335,107333],{"__ignoreMap":27},[19,107337,107338,107339,107341,107342,107344],{},"如果你看到 ",[200,107340,104088],{}," 是 ",[200,107343,35387],{},"，大约就是 28.6 度。",[14,107346,102406],{"id":102405},[157,107348,107349,107356,107359,107366,107369,107377,107385],{},[160,107350,102469,107351,102472,107353,28443],{},[200,107352,106369],{},[200,107354,107355],{},"gear=\"5\"",[160,107357,107358],{},"重新运行，观察关节运动是否更剧烈。",[160,107360,102469,107361,102472,107363,28443],{},[200,107362,105913],{},[200,107364,107365],{},"-0.2 0.2",[160,107367,107368],{},"重新运行，观察控制能力是否变弱。",[160,107370,107371,107372,107374,107375,28443],{},"去掉 actuator，确认 ",[200,107373,102216],{}," 变成 ",[200,107376,405],{},[160,107378,102469,107379,102472,107381,107384],{},[200,107380,106303],{},[200,107382,107383],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[160,107386,102469,107387,102472,107389,107392],{},[200,107388,106297],{},[200,107390,107391],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107394,102511],{"id":102510},[174,107396,107398],{"id":107397},"indexerror-index-0-is-out-of-bounds",[200,107399,107400],{},"IndexError: index 0 is out of bounds",[19,107402,107403,107404,107406],{},"原因是 ",[200,107405,106050],{},"，没有 actuator。",[174,107408,107409],{"id":107409},"关节几乎不动",[19,107411,107412],{},"可能原因:",[157,107414,107415,107420,107424,107430],{},[160,107416,107417,107419],{},[200,107418,107125],{}," 太小",[160,107421,107422,107419],{},[200,107423,105913],{},[160,107425,107426,107429],{},[200,107427,107428],{},"damping"," 太大",[160,107431,107432],{},"重力方向导致运动不明显",[174,107434,107435],{"id":107435},"模型编译失败",[19,107437,107438,107439,107441],{},"检查 actuator 引用的 ",[200,107440,106360],{}," 是否存在，joint 名称是否拼写一致。",[174,107443,107445,107447],{"id":107444},"datactrl0-写了但没有效果",[200,107446,106184],{}," 写了但没有效果",[19,107449,102633],{},[157,107451,107452,107457,107460,107465,107470],{},[160,107453,107454,107456],{},[200,107455,102216],{}," 是否大于 0。",[160,107458,107459],{},"motor 是否引用了正确 joint。",[160,107461,107462,107464],{},[200,107463,107125],{}," 是否太小。",[160,107466,107467,107469],{},[200,107468,105913],{}," 是否把输入限制得太小。",[160,107471,107472],{},"body 是否真的有可动 joint。",[174,107474,107475],{"id":107475},"控制输入超过范围会怎样",[19,107477,107478],{},"如果设置了：",[194,107480,107482],{"className":53125,"code":107481,"language":53127,"meta":27,"style":27},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[200,107483,107484],{"__ignoreMap":27},[203,107485,107486],{"class":205,"line":206},[203,107487,107481],{"class":213},[19,107489,107490],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[194,107492,107494],{"className":30436,"code":107493,"language":30438,"meta":27,"style":27},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[200,107495,107496,107516],{"__ignoreMap":27},[203,107497,107498,107501,107503,107506,107508,107510,107512,107514],{"class":205,"line":206},[203,107499,107500],{"class":213},"action ",[203,107502,259],{"class":209},[203,107504,107505],{"class":213}," np.clip(action, ",[203,107507,746],{"class":209},[203,107509,105318],{"class":262},[203,107511,12525],{"class":213},[203,107513,105318],{"class":262},[203,107515,220],{"class":213},[203,107517,107518,107520,107522,107524,107526],{"class":205,"line":124},[203,107519,105929],{"class":213},[203,107521,405],{"class":262},[203,107523,4532],{"class":213},[203,107525,259],{"class":209},[203,107527,107528],{"class":213}," action\n",[14,107530,102665],{"id":102664},[19,107532,107533],{},"这一章建立了控制任务的基本形式：",[194,107535,107538],{"className":107536,"code":107537,"language":5277,"meta":27},[5275],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[200,107539,107537],{"__ignoreMap":27},[19,107541,107542],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5216,107544,107545],{},"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":27,"searchDepth":124,"depth":124,"links":107547},[107548,107549,107550,107555,107559,107560,107561,107569],{"id":100704,"depth":124,"text":100705},{"id":100827,"depth":124,"text":100828},{"id":101102,"depth":124,"text":101103,"children":107551},[107552,107553,107554],{"id":106191,"depth":1269,"text":106192},{"id":106241,"depth":1269,"text":106242},{"id":106307,"depth":1269,"text":106308},{"id":101310,"depth":124,"text":101311,"children":107556},[107557,107558],{"id":101630,"depth":1269,"text":101630},{"id":101766,"depth":1269,"text":101766},{"id":102373,"depth":124,"text":102374},{"id":102405,"depth":124,"text":102406},{"id":102510,"depth":124,"text":102511,"children":107562},[107563,107564,107565,107566,107568],{"id":107397,"depth":1269,"text":107400},{"id":107409,"depth":1269,"text":107409},{"id":107435,"depth":1269,"text":107435},{"id":107444,"depth":1269,"text":107567},"data.ctrl[0] 写了但没有效果",{"id":107475,"depth":1269,"text":107475},{"id":102664,"depth":124,"text":102665},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105879,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107576,"title":107577,"body":107578,"description":27,"extension":129,"meta":109487,"navigation":131,"path":109488,"seo":109489,"stem":109490,"__hash__":109491},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107579,"toc":109463},[107580,107583,107585,107588,107596,107599,107616,107619,107644,107647,107693,107695,107697,107752,107754,107773,107775,107818,107821,107838,107841,107857,107867,107874,107876,107879,107882,107916,107919,107967,107971,107974,107988,107997,108001,108004,108029,108032,108036,108049,108052,108058,108061,108076,108078,108081,108341,108343,108355,108358,108670,108672,108684,108686,108689,108704,108709,108712,108734,108737,108740,108774,108777,108781,108792,108795,108812,108815,108829,108836,108856,108863,108877,108880,108892,108907,108927,108930,108952,108955,108959,108974,108985,109000,109003,109033,109049,109078,109086,109110,109113,109131,109141,109153,109160,109169,109175,109184,109187,109189,109198,109201,109216,109218,109221,109232,109235,109246,109249,109267,109269,109286,109289,109317,109319,109323,109326,109356,109362,109365,109369,109377,109380,109382,109403,109406,109409,109425,109428,109444,109446,109449,109460],[10,107581,107577],{"id":107582},"_5viewer-可视化与-renderer-离屏渲染",[14,107584,100705],{"id":100704},[19,107586,107587],{},"本章掌握两类可视化方式:",[157,107589,107590,107593],{},[160,107591,107592],{},"交互式 viewer: 适合人工观察仿真",[160,107594,107595],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,107597,107598],{},"使用官方接口:",[194,107600,107602],{"className":30436,"code":107601,"language":30438,"meta":27,"style":27},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[200,107603,107604,107611],{"__ignoreMap":27},[203,107605,107606,107608],{"class":205,"line":206},[203,107607,30450],{"class":209},[203,107609,107610],{"class":213}," mujoco.viewer\n",[203,107612,107613],{"class":205,"line":124},[203,107614,107615],{"class":213},"mujoco.viewer.launch_passive(model, data)\n",[19,107617,107618],{},"以及:",[194,107620,107622],{"className":30436,"code":107621,"language":30438,"meta":27,"style":27},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[200,107623,107624,107634],{"__ignoreMap":27},[203,107625,107626,107629,107631],{"class":205,"line":206},[203,107627,107628],{"class":213},"renderer ",[203,107630,259],{"class":209},[203,107632,107633],{"class":213}," mujoco.Renderer(model)\n",[203,107635,107636,107639,107641],{"class":205,"line":124},[203,107637,107638],{"class":213},"image ",[203,107640,259],{"class":209},[203,107642,107643],{"class":213}," renderer.render()\n",[19,107645,107646],{},"新手建议先理解二者区别：",[351,107648,107649,107665],{},[354,107650,107651],{},[357,107652,107653,107656,107659,107662],{},[360,107654,107655],{"align":23827},"工具",[360,107657,107658],{"align":23827},"用途",[360,107660,107661],{"align":23827},"是否打开窗口",[360,107663,107664],{"align":23827},"常见场景",[398,107666,107667,107680],{},[357,107668,107669,107672,107675,107677],{},[403,107670,107671],{"align":23827},"Viewer",[403,107673,107674],{"align":23827},"人眼实时观察仿真",[403,107676,104723],{"align":23827},[403,107678,107679],{"align":23827},"调试模型、看控制效果",[357,107681,107682,107685,107688,107690],{},[403,107683,107684],{"align":23827},"Renderer",[403,107686,107687],{"align":23827},"生成图像数组",[403,107689,104736],{"align":23827},[403,107691,107692],{"align":23827},"保存图片、训练视觉策略、服务器批量采集",[14,107694,100828],{"id":100827},[19,107696,100831],{},[194,107698,107700],{"className":23913,"code":107699,"language":23915,"meta":27,"style":27},"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",[200,107701,107702,107714,107724,107732,107740],{"__ignoreMap":27},[203,107703,107704,107706,107708,107710,107712],{"class":205,"line":206},[203,107705,24634],{"class":2052},[203,107707,26373],{"class":318},[203,107709,23925],{"class":318},[203,107711,26458],{"class":262},[203,107713,24736],{"class":262},[203,107715,107716,107718,107720,107722],{"class":205,"line":124},[203,107717,100866],{"class":318},[203,107719,100869],{"class":318},[203,107721,100872],{"class":318},[203,107723,24736],{"class":262},[203,107725,107726,107728,107730],{"class":205,"line":1269},[203,107727,100879],{"class":318},[203,107729,100882],{"class":318},[203,107731,24736],{"class":262},[203,107733,107734,107736,107738],{"class":205,"line":1284},[203,107735,100889],{"class":318},[203,107737,100892],{"class":318},[203,107739,24736],{"class":262},[203,107741,107742,107744,107746,107748,107750],{"class":205,"line":1290},[203,107743,100899],{"class":318},[203,107745,100902],{"class":318},[203,107747,100905],{"class":318},[203,107749,100908],{"class":318},[203,107751,102574],{"class":318},[19,107753,102877],{},[194,107755,107757],{"className":23913,"code":107756,"language":23915,"meta":27,"style":27},"pip install \"mujoco>=2.3\" numpy pillow\n",[200,107758,107759],{"__ignoreMap":27},[203,107760,107761,107763,107765,107767,107770],{"class":205,"line":206},[203,107762,23922],{"class":2052},[203,107764,23925],{"class":318},[203,107766,100988],{"class":318},[203,107768,107769],{"class":318}," numpy",[203,107771,107772],{"class":318}," pillow\n",[19,107774,102894],{},[194,107776,107778],{"className":23913,"code":107777,"language":23915,"meta":27,"style":27},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[200,107779,107780,107797,107806],{"__ignoreMap":27},[203,107781,107782,107784,107786,107788,107791,107793,107795],{"class":205,"line":206},[203,107783,30388],{"class":2052},[203,107785,29234],{"class":318},[203,107787,25173],{"class":262},[203,107789,107790],{"class":318}," mujoco-render",[203,107792,101033],{"class":318},[203,107794,101036],{"class":262},[203,107796,101039],{"class":262},[203,107798,107799,107801,107803],{"class":205,"line":124},[203,107800,30388],{"class":2052},[203,107802,101046],{"class":318},[203,107804,107805],{"class":318}," mujoco-render\n",[203,107807,107808,107810,107812,107814,107816],{"class":205,"line":1269},[203,107809,23922],{"class":2052},[203,107811,23925],{"class":318},[203,107813,100988],{"class":318},[203,107815,107769],{"class":318},[203,107817,107772],{"class":318},[19,107819,107820],{},"离屏渲染后端:",[194,107822,107824],{"className":23913,"code":107823,"language":23915,"meta":27,"style":27},"export MUJOCO_GL=egl\n",[200,107825,107826],{"__ignoreMap":27},[203,107827,107828,107830,107833,107835],{"class":205,"line":206},[203,107829,25100],{"class":209},[203,107831,107832],{"class":213}," MUJOCO_GL",[203,107834,259],{"class":209},[203,107836,107837],{"class":213},"egl\n",[19,107839,107840],{},"或:",[194,107842,107844],{"className":23913,"code":107843,"language":23915,"meta":27,"style":27},"export MUJOCO_GL=osmesa\n",[200,107845,107846],{"__ignoreMap":27},[203,107847,107848,107850,107852,107854],{"class":205,"line":206},[203,107849,25100],{"class":209},[203,107851,107832],{"class":213},[203,107853,259],{"class":209},[203,107855,107856],{"class":213},"osmesa\n",[19,107858,107859,107860,107863,107864,28443],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[200,107861,107862],{},"egl"," 失败，再尝试 ",[200,107865,107866],{},"osmesa",[19,107868,107869,107870,107873],{},"如果你在本机桌面环境运行，通常先不要设置 ",[200,107871,107872],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,107875,101103],{"id":101102},[19,107877,107878],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,107880,107881],{},"典型 viewer 流程:",[194,107883,107885],{"className":30436,"code":107884,"language":30438,"meta":27,"style":27},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[200,107886,107887,107900,107907,107911],{"__ignoreMap":27},[203,107888,107889,107892,107895,107897],{"class":205,"line":206},[203,107890,107891],{"class":209},"with",[203,107893,107894],{"class":213}," mujoco.viewer.launch_passive(model, data) ",[203,107896,31441],{"class":209},[203,107898,107899],{"class":213}," viewer:\n",[203,107901,107902,107904],{"class":205,"line":124},[203,107903,2340],{"class":209},[203,107905,107906],{"class":213}," viewer.is_running():\n",[203,107908,107909],{"class":205,"line":1269},[203,107910,101574],{"class":213},[203,107912,107913],{"class":205,"line":1284},[203,107914,107915],{"class":213},"        viewer.sync()\n",[19,107917,107918],{},"典型 renderer 流程:",[194,107920,107922],{"className":30436,"code":107921,"language":30438,"meta":27,"style":27},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[200,107923,107924,107950,107954,107959],{"__ignoreMap":27},[203,107925,107926,107928,107930,107933,107935,107937,107939,107941,107943,107945,107948],{"class":205,"line":206},[203,107927,107628],{"class":213},[203,107929,259],{"class":209},[203,107931,107932],{"class":213}," mujoco.Renderer(model, ",[203,107934,25039],{"class":5306},[203,107936,259],{"class":209},[203,107938,42400],{"class":262},[203,107940,12525],{"class":213},[203,107942,25035],{"class":5306},[203,107944,259],{"class":209},[203,107946,107947],{"class":262},"640",[203,107949,220],{"class":213},[203,107951,107952],{"class":205,"line":124},[203,107953,104563],{"class":213},[203,107955,107956],{"class":205,"line":1269},[203,107957,107958],{"class":213},"renderer.update_scene(data)\n",[203,107960,107961,107963,107965],{"class":205,"line":1284},[203,107962,107638],{"class":213},[203,107964,259],{"class":209},[203,107966,107643],{"class":213},[174,107968,107970],{"id":107969},"viewer-的同步逻辑","viewer 的同步逻辑",[19,107972,107973],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[194,107975,107977],{"className":30436,"code":107976,"language":30438,"meta":27,"style":27},"mujoco.mj_step(model, data)\nviewer.sync()\n",[200,107978,107979,107983],{"__ignoreMap":27},[203,107980,107981],{"class":205,"line":206},[203,107982,104563],{"class":213},[203,107984,107985],{"class":205,"line":124},[203,107986,107987],{"class":213},"viewer.sync()\n",[19,107989,107990,107992,107993,107996],{},[200,107991,101273],{}," 负责算物理，",[200,107994,107995],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[174,107998,108000],{"id":107999},"为什么要-sleep","为什么要 sleep",[19,108002,108003],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[194,108005,108007],{"className":30436,"code":108006,"language":30438,"meta":27,"style":27},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[200,108008,108009],{"__ignoreMap":27},[203,108010,108011,108014,108016,108019,108021,108024,108026],{"class":205,"line":206},[203,108012,108013],{"class":213},"sleep_time ",[203,108015,259],{"class":209},[203,108017,108018],{"class":213}," model.opt.timestep ",[203,108020,746],{"class":209},[203,108022,108023],{"class":213}," (time.time() ",[203,108025,746],{"class":209},[203,108027,108028],{"class":213}," step_start)\n",[19,108030,108031],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[174,108033,108035],{"id":108034},"renderer-输出是什么","renderer 输出是什么",[194,108037,108039],{"className":30436,"code":108038,"language":30438,"meta":27,"style":27},"image = renderer.render()\n",[200,108040,108041],{"__ignoreMap":27},[203,108042,108043,108045,108047],{"class":205,"line":206},[203,108044,107638],{"class":213},[203,108046,259],{"class":209},[203,108048,107643],{"class":213},[19,108050,108051],{},"得到的是 NumPy 数组，形状通常是：",[194,108053,108056],{"className":108054,"code":108055,"language":5277,"meta":27},[5275],"(height, width, 3)\n",[200,108057,108055],{"__ignoreMap":27},[19,108059,108060],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[194,108062,108064],{"className":30436,"code":108063,"language":30438,"meta":27,"style":27},"Image.fromarray(image).save(\"render_output.png\")\n",[200,108065,108066],{"__ignoreMap":27},[203,108067,108068,108071,108074],{"class":205,"line":206},[203,108069,108070],{"class":213},"Image.fromarray(image).save(",[203,108072,108073],{"class":318},"\"render_output.png\"",[203,108075,220],{"class":213},[14,108077,101311],{"id":101310},[19,108079,108080],{},"交互式 Viewer:",[194,108082,108084],{"className":30436,"code":108083,"language":30438,"meta":27,"style":27},"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",[200,108085,108086,108092,108096,108102,108108,108112,108116,108124,108129,108133,108137,108141,108146,108151,108155,108159,108163,108168,108172,108176,108180,108184,108188,108192,108204,108216,108224,108228,108238,108258,108268,108273,108278,108282,108299,108312,108317,108321,108325,108337],{"__ignoreMap":27},[203,108087,108088,108090],{"class":205,"line":206},[203,108089,30450],{"class":209},[203,108091,31887],{"class":213},[203,108093,108094],{"class":205,"line":124},[203,108095,2489],{"emptyLinePlaceholder":131},[203,108097,108098,108100],{"class":205,"line":1269},[203,108099,30450],{"class":209},[203,108101,101359],{"class":213},[203,108103,108104,108106],{"class":205,"line":1284},[203,108105,30450],{"class":209},[203,108107,107610],{"class":213},[203,108109,108110],{"class":205,"line":1290},[203,108111,2489],{"emptyLinePlaceholder":131},[203,108113,108114],{"class":205,"line":1304},[203,108115,2489],{"emptyLinePlaceholder":131},[203,108117,108118,108120,108122],{"class":205,"line":1310},[203,108119,101372],{"class":262},[203,108121,13654],{"class":209},[203,108123,101377],{"class":318},[203,108125,108126],{"class":205,"line":1401},[203,108127,108128],{"class":318},"\u003Cmujoco model=\"viewer_demo\">\n",[203,108130,108131],{"class":205,"line":1407},[203,108132,101387],{"class":318},[203,108134,108135],{"class":205,"line":1419},[203,108136,2489],{"emptyLinePlaceholder":131},[203,108138,108139],{"class":205,"line":1701},[203,108140,101396],{"class":318},[203,108142,108143],{"class":205,"line":1706},[203,108144,108145],{"class":318},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[203,108147,108148],{"class":205,"line":1712},[203,108149,108150],{"class":318},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[203,108152,108153],{"class":205,"line":1717},[203,108154,2489],{"emptyLinePlaceholder":131},[203,108156,108157],{"class":205,"line":1731},[203,108158,101410],{"class":318},[203,108160,108161],{"class":205,"line":1736},[203,108162,101415],{"class":318},[203,108164,108165],{"class":205,"line":1742},[203,108166,108167],{"class":318},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[203,108169,108170],{"class":205,"line":1763},[203,108171,101425],{"class":318},[203,108173,108174],{"class":205,"line":1768},[203,108175,101430],{"class":318},[203,108177,108178],{"class":205,"line":1782},[203,108179,101435],{"class":318},[203,108181,108182],{"class":205,"line":1787},[203,108183,95756],{"class":318},[203,108185,108186],{"class":205,"line":1816},[203,108187,2489],{"emptyLinePlaceholder":131},[203,108189,108190],{"class":205,"line":1821},[203,108191,2489],{"emptyLinePlaceholder":131},[203,108193,108194,108196,108198,108200,108202],{"class":205,"line":1838},[203,108195,32005],{"class":209},[203,108197,2062],{"class":2052},[203,108199,101456],{"class":213},[203,108201,95744],{"class":262},[203,108203,3828],{"class":213},[203,108205,108206,108208,108210,108212,108214],{"class":205,"line":1843},[203,108207,101465],{"class":213},[203,108209,259],{"class":209},[203,108211,101470],{"class":213},[203,108213,101372],{"class":262},[203,108215,220],{"class":213},[203,108217,108218,108220,108222],{"class":205,"line":1848},[203,108219,101479],{"class":213},[203,108221,259],{"class":209},[203,108223,101484],{"class":213},[203,108225,108226],{"class":205,"line":1853},[203,108227,2489],{"emptyLinePlaceholder":131},[203,108229,108230,108232,108234,108236],{"class":205,"line":1867},[203,108231,34236],{"class":209},[203,108233,107894],{"class":213},[203,108235,31441],{"class":209},[203,108237,107899],{"class":213},[203,108239,108240,108243,108246,108248,108251,108253,108256],{"class":205,"line":1872},[203,108241,108242],{"class":209},"        while",[203,108244,108245],{"class":213}," viewer.is_running() ",[203,108247,30520],{"class":209},[203,108249,108250],{"class":213}," data.time ",[203,108252,1124],{"class":209},[203,108254,108255],{"class":262}," 5.0",[203,108257,3828],{"class":213},[203,108259,108260,108263,108265],{"class":205,"line":2666},[203,108261,108262],{"class":213},"            step_start ",[203,108264,259],{"class":209},[203,108266,108267],{"class":213}," time.time()\n",[203,108269,108270],{"class":205,"line":2680},[203,108271,108272],{"class":213},"            mujoco.mj_step(model, data)\n",[203,108274,108275],{"class":205,"line":2688},[203,108276,108277],{"class":213},"            viewer.sync()\n",[203,108279,108280],{"class":205,"line":2693},[203,108281,2489],{"emptyLinePlaceholder":131},[203,108283,108284,108287,108289,108291,108293,108295,108297],{"class":205,"line":2699},[203,108285,108286],{"class":213},"            sleep_time ",[203,108288,259],{"class":209},[203,108290,108018],{"class":213},[203,108292,746],{"class":209},[203,108294,108023],{"class":213},[203,108296,746],{"class":209},[203,108298,108028],{"class":213},[203,108300,108301,108303,108306,108308,108310],{"class":205,"line":2705},[203,108302,4731],{"class":209},[203,108304,108305],{"class":213}," sleep_time ",[203,108307,1174],{"class":209},[203,108309,4182],{"class":262},[203,108311,3828],{"class":213},[203,108313,108314],{"class":205,"line":2710},[203,108315,108316],{"class":213},"                time.sleep(sleep_time)\n",[203,108318,108319],{"class":205,"line":8038},[203,108320,2489],{"emptyLinePlaceholder":131},[203,108322,108323],{"class":205,"line":8062},[203,108324,2489],{"emptyLinePlaceholder":131},[203,108326,108327,108329,108331,108333,108335],{"class":205,"line":8067},[203,108328,1620],{"class":209},[203,108330,31278],{"class":262},[203,108332,101617],{"class":209},[203,108334,101620],{"class":318},[203,108336,3828],{"class":213},[203,108338,108339],{"class":205,"line":8073},[203,108340,101627],{"class":213},[19,108342,103628],{},[194,108344,108346],{"className":23913,"code":108345,"language":23915,"meta":27,"style":27},"touch ch5_viewer.py\n",[200,108347,108348],{"__ignoreMap":27},[203,108349,108350,108352],{"class":205,"line":206},[203,108351,101341],{"class":2052},[203,108353,108354],{"class":318}," ch5_viewer.py\n",[19,108356,108357],{},"离屏 Renderer 保存图片:",[194,108359,108361],{"className":30436,"code":108360,"language":30438,"meta":27,"style":27},"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",[200,108362,108363,108375,108379,108385,108395,108399,108403,108411,108416,108420,108424,108428,108432,108437,108441,108445,108449,108453,108457,108461,108465,108469,108473,108477,108481,108493,108505,108513,108538,108542,108558,108562,108566,108581,108590,108594,108608,108613,108618,108622,108634,108646,108650,108654,108666],{"__ignoreMap":27},[203,108364,108365,108367,108370,108372],{"class":205,"line":206},[203,108366,30795],{"class":209},[203,108368,108369],{"class":213}," pathlib ",[203,108371,30450],{"class":209},[203,108373,108374],{"class":213}," Path\n",[203,108376,108377],{"class":205,"line":124},[203,108378,2489],{"emptyLinePlaceholder":131},[203,108380,108381,108383],{"class":205,"line":1269},[203,108382,30450],{"class":209},[203,108384,101359],{"class":213},[203,108386,108387,108389,108391,108393],{"class":205,"line":1284},[203,108388,30795],{"class":209},[203,108390,47321],{"class":262},[203,108392,47324],{"class":209},[203,108394,47327],{"class":213},[203,108396,108397],{"class":205,"line":1290},[203,108398,2489],{"emptyLinePlaceholder":131},[203,108400,108401],{"class":205,"line":1304},[203,108402,2489],{"emptyLinePlaceholder":131},[203,108404,108405,108407,108409],{"class":205,"line":1310},[203,108406,101372],{"class":262},[203,108408,13654],{"class":209},[203,108410,101377],{"class":318},[203,108412,108413],{"class":205,"line":1401},[203,108414,108415],{"class":318},"\u003Cmujoco model=\"renderer_demo\">\n",[203,108417,108418],{"class":205,"line":1407},[203,108419,101387],{"class":318},[203,108421,108422],{"class":205,"line":1419},[203,108423,2489],{"emptyLinePlaceholder":131},[203,108425,108426],{"class":205,"line":1701},[203,108427,101396],{"class":318},[203,108429,108430],{"class":205,"line":1706},[203,108431,108145],{"class":318},[203,108433,108434],{"class":205,"line":1712},[203,108435,108436],{"class":318},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[203,108438,108439],{"class":205,"line":1717},[203,108440,108150],{"class":318},[203,108442,108443],{"class":205,"line":1731},[203,108444,2489],{"emptyLinePlaceholder":131},[203,108446,108447],{"class":205,"line":1736},[203,108448,101410],{"class":318},[203,108450,108451],{"class":205,"line":1742},[203,108452,101415],{"class":318},[203,108454,108455],{"class":205,"line":1763},[203,108456,108167],{"class":318},[203,108458,108459],{"class":205,"line":1768},[203,108460,101425],{"class":318},[203,108462,108463],{"class":205,"line":1782},[203,108464,101430],{"class":318},[203,108466,108467],{"class":205,"line":1787},[203,108468,101435],{"class":318},[203,108470,108471],{"class":205,"line":1816},[203,108472,95756],{"class":318},[203,108474,108475],{"class":205,"line":1821},[203,108476,2489],{"emptyLinePlaceholder":131},[203,108478,108479],{"class":205,"line":1838},[203,108480,2489],{"emptyLinePlaceholder":131},[203,108482,108483,108485,108487,108489,108491],{"class":205,"line":1843},[203,108484,32005],{"class":209},[203,108486,2062],{"class":2052},[203,108488,101456],{"class":213},[203,108490,95744],{"class":262},[203,108492,3828],{"class":213},[203,108494,108495,108497,108499,108501,108503],{"class":205,"line":1848},[203,108496,101465],{"class":213},[203,108498,259],{"class":209},[203,108500,101470],{"class":213},[203,108502,101372],{"class":262},[203,108504,220],{"class":213},[203,108506,108507,108509,108511],{"class":205,"line":1853},[203,108508,101479],{"class":213},[203,108510,259],{"class":209},[203,108512,101484],{"class":213},[203,108514,108515,108518,108520,108522,108524,108526,108528,108530,108532,108534,108536],{"class":205,"line":1867},[203,108516,108517],{"class":213},"    renderer ",[203,108519,259],{"class":209},[203,108521,107932],{"class":213},[203,108523,25039],{"class":5306},[203,108525,259],{"class":209},[203,108527,42400],{"class":262},[203,108529,12525],{"class":213},[203,108531,25035],{"class":5306},[203,108533,259],{"class":209},[203,108535,107947],{"class":262},[203,108537,220],{"class":213},[203,108539,108540],{"class":205,"line":1872},[203,108541,2489],{"emptyLinePlaceholder":131},[203,108543,108544,108546,108548,108550,108552,108554,108556],{"class":205,"line":2666},[203,108545,3290],{"class":209},[203,108547,101559],{"class":213},[203,108549,26101],{"class":209},[203,108551,32501],{"class":262},[203,108553,214],{"class":213},[203,108555,525],{"class":262},[203,108557,30844],{"class":213},[203,108559,108560],{"class":205,"line":2680},[203,108561,101574],{"class":213},[203,108563,108564],{"class":205,"line":2688},[203,108565,2489],{"emptyLinePlaceholder":131},[203,108567,108568,108571,108574,108576,108579],{"class":205,"line":2693},[203,108569,108570],{"class":213},"    renderer.update_scene(data, ",[203,108572,108573],{"class":5306},"camera",[203,108575,259],{"class":209},[203,108577,108578],{"class":318},"\"fixed_camera\"",[203,108580,220],{"class":213},[203,108582,108583,108586,108588],{"class":205,"line":2699},[203,108584,108585],{"class":213},"    image ",[203,108587,259],{"class":209},[203,108589,107643],{"class":213},[203,108591,108592],{"class":205,"line":2705},[203,108593,2489],{"emptyLinePlaceholder":131},[203,108595,108596,108599,108601,108604,108606],{"class":205,"line":2710},[203,108597,108598],{"class":213},"    output_path ",[203,108600,259],{"class":209},[203,108602,108603],{"class":213}," Path(",[203,108605,108073],{"class":318},[203,108607,220],{"class":213},[203,108609,108610],{"class":205,"line":8038},[203,108611,108612],{"class":213},"    Image.fromarray(image).save(output_path)\n",[203,108614,108615],{"class":205,"line":8062},[203,108616,108617],{"class":213},"    renderer.close()\n",[203,108619,108620],{"class":205,"line":8067},[203,108621,2489],{"emptyLinePlaceholder":131},[203,108623,108624,108626,108628,108631],{"class":205,"line":8073},[203,108625,31357],{"class":262},[203,108627,214],{"class":213},[203,108629,108630],{"class":318},"\"saved:\"",[203,108632,108633],{"class":213},", output_path.resolve())\n",[203,108635,108636,108638,108640,108643],{"class":205,"line":8100},[203,108637,31357],{"class":262},[203,108639,214],{"class":213},[203,108641,108642],{"class":318},"\"image shape:\"",[203,108644,108645],{"class":213},", image.shape)\n",[203,108647,108648],{"class":205,"line":8105},[203,108649,2489],{"emptyLinePlaceholder":131},[203,108651,108652],{"class":205,"line":8111},[203,108653,2489],{"emptyLinePlaceholder":131},[203,108655,108656,108658,108660,108662,108664],{"class":205,"line":8123},[203,108657,1620],{"class":209},[203,108659,31278],{"class":262},[203,108661,101617],{"class":209},[203,108663,101620],{"class":318},[203,108665,3828],{"class":213},[203,108667,108668],{"class":205,"line":8135},[203,108669,101627],{"class":213},[19,108671,103628],{},[194,108673,108675],{"className":23913,"code":108674,"language":23915,"meta":27,"style":27},"touch ch5_renderer.py\n",[200,108676,108677],{"__ignoreMap":27},[203,108678,108679,108681],{"class":205,"line":206},[203,108680,101341],{"class":2052},[203,108682,108683],{"class":318}," ch5_renderer.py\n",[174,108685,101630],{"id":101630},[19,108687,108688],{},"viewer 上下文：",[194,108690,108692],{"className":30436,"code":108691,"language":30438,"meta":27,"style":27},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[200,108693,108694],{"__ignoreMap":27},[203,108695,108696,108698,108700,108702],{"class":205,"line":206},[203,108697,107891],{"class":209},[203,108699,107894],{"class":213},[203,108701,31441],{"class":209},[203,108703,107899],{"class":213},[19,108705,108706,108708],{},[200,108707,107891],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,108710,108711],{},"窗口循环：",[194,108713,108715],{"className":30436,"code":108714,"language":30438,"meta":27,"style":27},"while viewer.is_running() and data.time \u003C 5.0:\n",[200,108716,108717],{"__ignoreMap":27},[203,108718,108719,108722,108724,108726,108728,108730,108732],{"class":205,"line":206},[203,108720,108721],{"class":209},"while",[203,108723,108245],{"class":213},[203,108725,30520],{"class":209},[203,108727,108250],{"class":213},[203,108729,1124],{"class":209},[203,108731,108255],{"class":262},[203,108733,3828],{"class":213},[19,108735,108736],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,108738,108739],{},"固定相机：",[194,108741,108743],{"className":53125,"code":108742,"language":53127,"meta":27,"style":27},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[200,108744,108745],{"__ignoreMap":27},[203,108746,108747,108749,108751,108753,108755,108757,108759,108761,108764,108767,108769,108772],{"class":205,"line":206},[203,108748,1124],{"class":213},[203,108750,108573],{"class":51358},[203,108752,15010],{"class":2052},[203,108754,259],{"class":213},[203,108756,108578],{"class":318},[203,108758,101164],{"class":2052},[203,108760,259],{"class":213},[203,108762,108763],{"class":318},"\"1.5 -2.0 1.2\"",[203,108765,108766],{"class":2052}," xyaxes",[203,108768,259],{"class":213},[203,108770,108771],{"class":318},"\"1 0.75 0 0 0 1\"",[203,108773,101202],{"class":213},[19,108775,108776],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[174,108778,108780],{"id":108779},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[194,108782,108784],{"className":30436,"code":108783,"language":30438,"meta":27,"style":27},"import time\n",[200,108785,108786],{"__ignoreMap":27},[203,108787,108788,108790],{"class":205,"line":206},[203,108789,30450],{"class":209},[203,108791,31887],{"class":213},[19,108793,108794],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[194,108796,108798],{"className":30436,"code":108797,"language":30438,"meta":27,"style":27},"import mujoco\nimport mujoco.viewer\n",[200,108799,108800,108806],{"__ignoreMap":27},[203,108801,108802,108804],{"class":205,"line":206},[203,108803,30450],{"class":209},[203,108805,101359],{"class":213},[203,108807,108808,108810],{"class":205,"line":124},[203,108809,30450],{"class":209},[203,108811,107610],{"class":213},[19,108813,108814],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[194,108816,108817],{"className":30436,"code":108691,"language":30438,"meta":27,"style":27},[200,108818,108819],{"__ignoreMap":27},[203,108820,108821,108823,108825,108827],{"class":205,"line":206},[203,108822,107891],{"class":209},[203,108824,107894],{"class":213},[203,108826,31441],{"class":209},[203,108828,107899],{"class":213},[19,108830,108831,108832,108835],{},"打开一个 viewer 窗口。",[200,108833,108834],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[194,108837,108838],{"className":30436,"code":108714,"language":30438,"meta":27,"style":27},[200,108839,108840],{"__ignoreMap":27},[203,108841,108842,108844,108846,108848,108850,108852,108854],{"class":205,"line":206},[203,108843,108721],{"class":209},[203,108845,108245],{"class":213},[203,108847,30520],{"class":209},[203,108849,108250],{"class":213},[203,108851,1124],{"class":209},[203,108853,108255],{"class":262},[203,108855,3828],{"class":213},[19,108857,108858,108859,108862],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[200,108860,108861],{},"viewer.is_running()"," 会变成 false，循环结束。",[194,108864,108866],{"className":30436,"code":108865,"language":30438,"meta":27,"style":27},"step_start = time.time()\n",[200,108867,108868],{"__ignoreMap":27},[203,108869,108870,108873,108875],{"class":205,"line":206},[203,108871,108872],{"class":213},"step_start ",[203,108874,259],{"class":209},[203,108876,108267],{"class":213},[19,108878,108879],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[194,108881,108882],{"className":30436,"code":107976,"language":30438,"meta":27,"style":27},[200,108883,108884,108888],{"__ignoreMap":27},[203,108885,108886],{"class":205,"line":206},[203,108887,104563],{"class":213},[203,108889,108890],{"class":205,"line":124},[203,108891,107987],{"class":213},[19,108893,108894,108896,108897,108899,108900,108902,108903,108906],{},[200,108895,101273],{}," 推进物理仿真。",[200,108898,107995],{}," 把最新的 ",[200,108901,33459],{}," 同步到窗口里显示。没有 ",[200,108904,108905],{},"sync()","，窗口可能看不到最新状态。",[194,108908,108909],{"className":30436,"code":108006,"language":30438,"meta":27,"style":27},[200,108910,108911],{"__ignoreMap":27},[203,108912,108913,108915,108917,108919,108921,108923,108925],{"class":205,"line":206},[203,108914,108013],{"class":213},[203,108916,259],{"class":209},[203,108918,108018],{"class":213},[203,108920,746],{"class":209},[203,108922,108023],{"class":213},[203,108924,746],{"class":209},[203,108926,108028],{"class":213},[19,108928,108929],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[194,108931,108933],{"className":30436,"code":108932,"language":30438,"meta":27,"style":27},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[200,108934,108935,108947],{"__ignoreMap":27},[203,108936,108937,108939,108941,108943,108945],{"class":205,"line":206},[203,108938,1620],{"class":209},[203,108940,108305],{"class":213},[203,108942,1174],{"class":209},[203,108944,4182],{"class":262},[203,108946,3828],{"class":213},[203,108948,108949],{"class":205,"line":124},[203,108950,108951],{"class":213},"    time.sleep(sleep_time)\n",[19,108953,108954],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[174,108956,108958],{"id":108957},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[194,108960,108962],{"className":30436,"code":108961,"language":30438,"meta":27,"style":27},"from pathlib import Path\n",[200,108963,108964],{"__ignoreMap":27},[203,108965,108966,108968,108970,108972],{"class":205,"line":206},[203,108967,30795],{"class":209},[203,108969,108369],{"class":213},[203,108971,30450],{"class":209},[203,108973,108374],{"class":213},[19,108975,108976,108977,108980,108981,108984],{},"导入 ",[200,108978,108979],{},"Path","，用来处理文件路径。相比直接写字符串，",[200,108982,108983],{},"Path(\"render_output.png\")"," 更清晰。",[194,108986,108988],{"className":30436,"code":108987,"language":30438,"meta":27,"style":27},"from PIL import Image\n",[200,108989,108990],{"__ignoreMap":27},[203,108991,108992,108994,108996,108998],{"class":205,"line":206},[203,108993,30795],{"class":209},[203,108995,47321],{"class":262},[203,108997,47324],{"class":209},[203,108999,47327],{"class":213},[19,109001,109002],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[194,109004,109005],{"className":53125,"code":108742,"language":53127,"meta":27,"style":27},[200,109006,109007],{"__ignoreMap":27},[203,109008,109009,109011,109013,109015,109017,109019,109021,109023,109025,109027,109029,109031],{"class":205,"line":206},[203,109010,1124],{"class":213},[203,109012,108573],{"class":51358},[203,109014,15010],{"class":2052},[203,109016,259],{"class":213},[203,109018,108578],{"class":318},[203,109020,101164],{"class":2052},[203,109022,259],{"class":213},[203,109024,108763],{"class":318},[203,109026,108766],{"class":2052},[203,109028,259],{"class":213},[203,109030,108771],{"class":318},[203,109032,101202],{"class":213},[19,109034,109035,109036,109038,109039,109041,109042,109045,109046,109048],{},"定义一个相机。",[200,109037,79868],{}," 是相机名字。",[200,109040,104204],{}," 是相机在世界里的位置。",[200,109043,109044],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[200,109047,104204],{}," 来调视角。",[194,109050,109052],{"className":30436,"code":109051,"language":30438,"meta":27,"style":27},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[200,109053,109054],{"__ignoreMap":27},[203,109055,109056,109058,109060,109062,109064,109066,109068,109070,109072,109074,109076],{"class":205,"line":206},[203,109057,107628],{"class":213},[203,109059,259],{"class":209},[203,109061,107932],{"class":213},[203,109063,25039],{"class":5306},[203,109065,259],{"class":209},[203,109067,42400],{"class":262},[203,109069,12525],{"class":213},[203,109071,25035],{"class":5306},[203,109073,259],{"class":209},[203,109075,107947],{"class":262},[203,109077,220],{"class":213},[19,109079,109080,109081,101076,109083,109085],{},"创建离屏渲染器。",[200,109082,25039],{},[200,109084,25035],{}," 决定输出图片大小。",[194,109087,109088],{"className":30436,"code":101734,"language":30438,"meta":27,"style":27},[200,109089,109090,109106],{"__ignoreMap":27},[203,109091,109092,109094,109096,109098,109100,109102,109104],{"class":205,"line":206},[203,109093,3114],{"class":209},[203,109095,101559],{"class":213},[203,109097,26101],{"class":209},[203,109099,32501],{"class":262},[203,109101,214],{"class":213},[203,109103,525],{"class":262},[203,109105,30844],{"class":213},[203,109107,109108],{"class":205,"line":124},[203,109109,101757],{"class":213},[19,109111,109112],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[194,109114,109116],{"className":30436,"code":109115,"language":30438,"meta":27,"style":27},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[200,109117,109118],{"__ignoreMap":27},[203,109119,109120,109123,109125,109127,109129],{"class":205,"line":206},[203,109121,109122],{"class":213},"renderer.update_scene(data, ",[203,109124,108573],{"class":5306},[203,109126,259],{"class":209},[203,109128,108578],{"class":318},[203,109130,220],{"class":213},[19,109132,109133,109134,109136,109137,109140],{},"告诉 renderer：用当前 ",[200,109135,33459],{}," 的状态更新画面，并使用名为 ",[200,109138,109139],{},"fixed_camera"," 的相机视角。",[194,109142,109143],{"className":30436,"code":108038,"language":30438,"meta":27,"style":27},[200,109144,109145],{"__ignoreMap":27},[203,109146,109147,109149,109151],{"class":205,"line":206},[203,109148,107638],{"class":213},[203,109150,259],{"class":209},[203,109152,107643],{"class":213},[19,109154,109155,109156,109159],{},"真正渲染出图像。",[200,109157,109158],{},"image"," 是一个 NumPy 数组，不是文件。",[194,109161,109163],{"className":30436,"code":109162,"language":30438,"meta":27,"style":27},"Image.fromarray(image).save(output_path)\n",[200,109164,109165],{"__ignoreMap":27},[203,109166,109167],{"class":205,"line":206},[203,109168,109162],{"class":213},[19,109170,109171,109172,28443],{},"把数组转换成图片，并保存到 ",[200,109173,109174],{},"render_output.png",[194,109176,109178],{"className":30436,"code":109177,"language":30438,"meta":27,"style":27},"renderer.close()\n",[200,109179,109180],{"__ignoreMap":27},[203,109181,109182],{"class":205,"line":206},[203,109183,109177],{"class":213},[19,109185,109186],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109188,102374],{"id":102373},[19,109190,109191,109192,109194,109195,28443],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[200,109193,109174],{},"，并输出图像数组形状，例如 ",[200,109196,109197],{},"(480, 640, 3)",[19,109199,109200],{},"如果图片里看不到方块，先检查：",[157,109202,109203,109206,109209],{},[160,109204,109205],{},"方块是否掉到相机视野外。",[160,109207,109208],{},"camera 位置是否合理。",[160,109210,109211,109212,109215],{},"是否在 ",[200,109213,109214],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109217,102406],{"id":102405},[19,109219,109220],{},"运行 viewer:",[194,109222,109224],{"className":23913,"code":109223,"language":23915,"meta":27,"style":27},"python ch5_viewer.py\n",[200,109225,109226],{"__ignoreMap":27},[203,109227,109228,109230],{"class":205,"line":206},[203,109229,30438],{"class":2052},[203,109231,108354],{"class":318},[19,109233,109234],{},"运行 renderer:",[194,109236,109238],{"className":23913,"code":109237,"language":23915,"meta":27,"style":27},"python ch5_renderer.py\n",[200,109239,109240],{"__ignoreMap":27},[203,109241,109242,109244],{"class":205,"line":206},[203,109243,30438],{"class":2052},[203,109245,108683],{"class":318},[19,109247,109248],{},"如果在服务器上运行:",[194,109250,109252],{"className":23913,"code":109251,"language":23915,"meta":27,"style":27},"MUJOCO_GL=egl python ch5_renderer.py\n",[200,109253,109254],{"__ignoreMap":27},[203,109255,109256,109258,109260,109262,109265],{"class":205,"line":206},[203,109257,107872],{"class":213},[203,109259,259],{"class":209},[203,109261,107862],{"class":318},[203,109263,109264],{"class":2052}," python",[203,109266,108683],{"class":318},[19,109268,107840],{},[194,109270,109272],{"className":23913,"code":109271,"language":23915,"meta":27,"style":27},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[200,109273,109274],{"__ignoreMap":27},[203,109275,109276,109278,109280,109282,109284],{"class":205,"line":206},[203,109277,107872],{"class":213},[203,109279,259],{"class":209},[203,109281,107866],{"class":318},[203,109283,109264],{"class":2052},[203,109285,108683],{"class":318},[19,109287,109288],{},"再做几个练习：",[157,109290,109291,109298,109301,109307],{},[160,109292,109293,109294,109297],{},"把 renderer 分辨率改成 ",[200,109295,109296],{},"height=240, width=320","，观察输出 shape。",[160,109299,109300],{},"把方块颜色改成蓝色，重新保存图片。",[160,109302,109303,109304,109306],{},"把相机 ",[200,109305,104204],{}," 改远一点，观察画面中物体是否变小。",[160,109308,109309,109310,102472,109313,109316],{},"把 viewer 示例中的 ",[200,109311,109312],{},"data.time \u003C 5.0",[200,109314,109315],{},"data.time \u003C 20.0","，观察更长时间。",[14,109318,102511],{"id":102510},[174,109320,109322],{"id":109321},"viewer-窗口打不开","viewer 窗口打不开",[19,109324,109325],{},"安装:",[194,109327,109329],{"className":23913,"code":109328,"language":23915,"meta":27,"style":27},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[200,109330,109331],{"__ignoreMap":27},[203,109332,109333,109335,109337,109339,109341,109343,109345,109347,109349,109351,109353],{"class":205,"line":206},[203,109334,24634],{"class":2052},[203,109336,26373],{"class":318},[203,109338,23925],{"class":318},[203,109340,26458],{"class":262},[203,109342,102564],{"class":318},[203,109344,100892],{"class":318},[203,109346,102569],{"class":318},[203,109348,100905],{"class":318},[203,109350,100911],{"class":318},[203,109352,100902],{"class":318},[203,109354,109355],{"class":318}," libXinerama\n",[174,109357,109359],{"id":109358},"glfwerror",[200,109360,109361],{},"GLFWError",[19,109363,109364],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[174,109366,109368],{"id":109367},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109370,109371,109372,82597,109374,109376],{},"尝试 ",[200,109373,101095],{},[200,109375,101098],{},"。可能存在版本差异。",[174,109378,109379],{"id":109379},"保存图片是黑的",[19,109381,102633],{},[157,109383,109384,109387,109390,109400],{},[160,109385,109386],{},"XML 里是否有 light。",[160,109388,109389],{},"相机是否对着模型。",[160,109391,109392,109393,109396,109397,28443],{},"是否先 ",[200,109394,109395],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[200,109398,109399],{},"renderer.render()",[160,109401,109402],{},"物体是否已经掉出视野。",[174,109404,109405],{"id":109405},"远程服务器没有显示器",[19,109407,109408],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[194,109410,109411],{"className":23913,"code":109251,"language":23915,"meta":27,"style":27},[200,109412,109413],{"__ignoreMap":27},[203,109414,109415,109417,109419,109421,109423],{"class":205,"line":206},[203,109416,107872],{"class":213},[203,109418,259],{"class":209},[203,109420,107862],{"class":318},[203,109422,109264],{"class":2052},[203,109424,108683],{"class":318},[19,109426,109427],{},"如果 EGL 不可用，再尝试：",[194,109429,109430],{"className":23913,"code":109271,"language":23915,"meta":27,"style":27},[200,109431,109432],{"__ignoreMap":27},[203,109433,109434,109436,109438,109440,109442],{"class":205,"line":206},[203,109435,107872],{"class":213},[203,109437,259],{"class":209},[203,109439,107866],{"class":318},[203,109441,109264],{"class":2052},[203,109443,108683],{"class":318},[14,109445,102665],{"id":102664},[19,109447,109448],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[157,109450,109451,109454,109457],{},[160,109452,109453],{},"先用 viewer 看模型和控制是否正常。",[160,109455,109456],{},"再用 renderer 保存图片或构造视觉观测。",[160,109458,109459],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5216,109461,109462],{},"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":27,"searchDepth":124,"depth":124,"links":109464},[109465,109466,109467,109472,109477,109478,109479,109486],{"id":100704,"depth":124,"text":100705},{"id":100827,"depth":124,"text":100828},{"id":101102,"depth":124,"text":101103,"children":109468},[109469,109470,109471],{"id":107969,"depth":1269,"text":107970},{"id":107999,"depth":1269,"text":108000},{"id":108034,"depth":1269,"text":108035},{"id":101310,"depth":124,"text":101311,"children":109473},[109474,109475,109476],{"id":101630,"depth":1269,"text":101630},{"id":108779,"depth":1269,"text":108780},{"id":108957,"depth":1269,"text":108958},{"id":102373,"depth":124,"text":102374},{"id":102405,"depth":124,"text":102406},{"id":102510,"depth":124,"text":102511,"children":109480},[109481,109482,109483,109484,109485],{"id":109321,"depth":1269,"text":109322},{"id":109358,"depth":1269,"text":109361},{"id":109367,"depth":1269,"text":109368},{"id":109379,"depth":1269,"text":109379},{"id":109405,"depth":1269,"text":109405},{"id":102664,"depth":124,"text":102665},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107577,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109493,"title":109494,"body":109495,"description":27,"extension":129,"meta":111406,"navigation":131,"path":111407,"seo":111408,"stem":111409,"__hash__":111410},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109496,"toc":111382},[109497,109500,109502,109505,109507,109526,109529,109535,109538,109540,109542,109566,109568,109582,109584,109625,109627,109638,109640,109643,109649,109652,109686,109689,109721,109724,109756,109760,109763,109803,109806,109812,109815,109821,109825,109828,109834,109837,109841,109844,109884,109886,109899,109902,109904,110486,110488,110500,110503,110514,110516,110519,110538,110550,110553,110574,110577,110580,110623,110626,110629,110649,110656,110658,110676,110691,110694,110700,110703,110709,110726,110733,110764,110775,110809,110820,110837,110846,110854,110859,110873,110876,110897,110903,110917,110922,110952,110962,110987,110995,111018,111021,111037,111040,111048,111054,111076,111089,111110,111119,111158,111169,111171,111174,111180,111183,111186,111192,111195,111215,111218,111220,111259,111261,111264,111272,111275,111278,111305,111308,111318,111324,111327,111333,111335,111341,111345,111348,111350,111353,111377,111380],[10,109498,109494],{"id":109499},"_6控制任务cartpole",[14,109501,100705],{"id":100704},[19,109503,109504],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109506,104389],{},[157,109508,109509,109512,109514,109517,109520,109523],{},[160,109510,109511],{},"slide joint",[160,109513,106242],{},[160,109515,109516],{},"cart force actuator",[160,109518,109519],{},"状态观测",[160,109521,109522],{},"简单控制循环",[160,109524,109525],{},"reward 设计雏形",[19,109527,109528],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[194,109530,109533],{"className":109531,"code":109532,"language":5277,"meta":27},[5275],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[200,109534,109532],{"__ignoreMap":27},[19,109536,109537],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,109539,100828],{"id":100827},[19,109541,100831],{},[194,109543,109544],{"className":23913,"code":104446,"language":23915,"meta":27,"style":27},[200,109545,109546],{"__ignoreMap":27},[203,109547,109548,109550,109552,109554,109556,109558,109560,109562,109564],{"class":205,"line":206},[203,109549,24634],{"class":2052},[203,109551,26373],{"class":318},[203,109553,23925],{"class":318},[203,109555,26458],{"class":262},[203,109557,104461],{"class":318},[203,109559,100856],{"class":318},[203,109561,102559],{"class":318},[203,109563,100872],{"class":318},[203,109565,104470],{"class":318},[19,109567,102877],{},[194,109569,109570],{"className":23913,"code":100977,"language":23915,"meta":27,"style":27},[200,109571,109572],{"__ignoreMap":27},[203,109573,109574,109576,109578,109580],{"class":205,"line":206},[203,109575,23922],{"class":2052},[203,109577,23925],{"class":318},[203,109579,100988],{"class":318},[203,109581,100991],{"class":318},[19,109583,102894],{},[194,109585,109587],{"className":23913,"code":109586,"language":23915,"meta":27,"style":27},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[200,109588,109589,109606,109615],{"__ignoreMap":27},[203,109590,109591,109593,109595,109597,109600,109602,109604],{"class":205,"line":206},[203,109592,30388],{"class":2052},[203,109594,29234],{"class":318},[203,109596,25173],{"class":262},[203,109598,109599],{"class":318}," mujoco-cartpole",[203,109601,101033],{"class":318},[203,109603,101036],{"class":262},[203,109605,101039],{"class":262},[203,109607,109608,109610,109612],{"class":205,"line":124},[203,109609,30388],{"class":2052},[203,109611,101046],{"class":318},[203,109613,109614],{"class":318}," mujoco-cartpole\n",[203,109616,109617,109619,109621,109623],{"class":205,"line":1269},[203,109618,23922],{"class":2052},[203,109620,23925],{"class":318},[203,109622,100988],{"class":318},[203,109624,100991],{"class":318},[19,109626,101062],{},[157,109628,109629,109632,109635],{},[160,109630,109631],{},"本章不依赖 Gymnasium。",[160,109633,109634],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[160,109636,109637],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,109639,101103],{"id":101102},[19,109641,109642],{},"Cartpole 的模型结构:",[194,109644,109647],{"className":109645,"code":109646,"language":5277,"meta":27},[5275],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[200,109648,109646],{"__ignoreMap":27},[19,109650,109651],{},"小车通过 slide joint 左右移动:",[194,109653,109655],{"className":53125,"code":109654,"language":53127,"meta":27,"style":27},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[200,109656,109657],{"__ignoreMap":27},[203,109658,109659,109661,109663,109665,109667,109670,109672,109674,109677,109679,109681,109684],{"class":205,"line":206},[203,109660,1124],{"class":213},[203,109662,103014],{"class":51358},[203,109664,15010],{"class":2052},[203,109666,259],{"class":213},[203,109668,109669],{"class":318},"\"cart_x\"",[203,109671,53882],{"class":2052},[203,109673,259],{"class":213},[203,109675,109676],{"class":318},"\"slide\"",[203,109678,106086],{"class":2052},[203,109680,259],{"class":213},[203,109682,109683],{"class":318},"\"1 0 0\"",[203,109685,101202],{"class":213},[19,109687,109688],{},"杆子通过 hinge joint 旋转:",[194,109690,109692],{"className":53125,"code":109691,"language":53127,"meta":27,"style":27},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[200,109693,109694],{"__ignoreMap":27},[203,109695,109696,109698,109700,109702,109704,109707,109709,109711,109713,109715,109717,109719],{"class":205,"line":206},[203,109697,1124],{"class":213},[203,109699,103014],{"class":51358},[203,109701,15010],{"class":2052},[203,109703,259],{"class":213},[203,109705,109706],{"class":318},"\"pole_hinge\"",[203,109708,53882],{"class":2052},[203,109710,259],{"class":213},[203,109712,106077],{"class":318},[203,109714,106086],{"class":2052},[203,109716,259],{"class":213},[203,109718,106091],{"class":318},[203,109720,101202],{"class":213},[19,109722,109723],{},"控制力作用在小车 slide joint 上:",[194,109725,109727],{"className":53125,"code":109726,"language":53127,"meta":27,"style":27},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[200,109728,109729],{"__ignoreMap":27},[203,109730,109731,109733,109735,109737,109739,109742,109744,109746,109748,109750,109752,109754],{"class":205,"line":206},[203,109732,1124],{"class":213},[203,109734,106132],{"class":51358},[203,109736,15010],{"class":2052},[203,109738,259],{"class":213},[203,109740,109741],{"class":318},"\"cart_motor\"",[203,109743,106142],{"class":2052},[203,109745,259],{"class":213},[203,109747,109669],{"class":318},[203,109749,106149],{"class":2052},[203,109751,259],{"class":213},[203,109753,54374],{"class":318},[203,109755,101202],{"class":213},[174,109757,109759],{"id":109758},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,109761,109762],{},"这个简化模型有两个关节：",[351,109764,109765,109776],{},[354,109766,109767],{},[357,109768,109769,109771,109773],{},[360,109770,102817],{"align":23827},[360,109772,23828],{"align":23827},[360,109774,109775],{"align":23827},"对应状态",[398,109777,109778,109791],{},[357,109779,109780,109785,109788],{},[403,109781,109782],{"align":23827},[200,109783,109784],{},"cart_x",[403,109786,109787],{"align":23827},"slide",[403,109789,109790],{"align":23827},"小车 x 位置",[357,109792,109793,109798,109800],{},[403,109794,109795],{"align":23827},[200,109796,109797],{},"pole_hinge",[403,109799,105898],{"align":23827},[403,109801,109802],{"align":23827},"杆子角度",[19,109804,109805],{},"所以：",[194,109807,109810],{"className":109808,"code":109809,"language":5277,"meta":27},[5275],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[200,109811,109809],{"__ignoreMap":27},[19,109813,109814],{},"把它们拼起来就是观测：",[194,109816,109819],{"className":109817,"code":109818,"language":5277,"meta":27},[5275],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[200,109820,109818],{"__ignoreMap":27},[174,109822,109824],{"id":109823},"action-是什么","action 是什么",[19,109826,109827],{},"本章只有一个 actuator：",[194,109829,109832],{"className":109830,"code":109831,"language":5277,"meta":27},[5275],"data.ctrl[0] = action\n",[200,109833,109831],{"__ignoreMap":27},[19,109835,109836],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[174,109838,109840],{"id":109839},"reward-是什么","reward 是什么",[19,109842,109843],{},"奖励函数：",[194,109845,109847],{"className":30436,"code":109846,"language":30438,"meta":27,"style":27},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[200,109848,109849],{"__ignoreMap":27},[203,109850,109851,109853,109856,109858,109860,109862,109865,109867,109870,109872,109874,109876,109879,109881],{"class":205,"line":206},[203,109852,17136],{"class":209},[203,109854,109855],{"class":262}," float",[203,109857,214],{"class":213},[203,109859,102461],{"class":262},[203,109861,52329],{"class":209},[203,109863,109864],{"class":262}," 0.1",[203,109866,6608],{"class":209},[203,109868,109869],{"class":213}," cart_x ",[203,109871,669],{"class":209},[203,109873,109869],{"class":213},[203,109875,746],{"class":209},[203,109877,109878],{"class":213}," pole_angle ",[203,109880,669],{"class":209},[203,109882,109883],{"class":213}," pole_angle)\n",[19,109885,106284],{},[157,109887,109888,109893,109896],{},[160,109889,109890,109891,28443],{},"基础奖励是 ",[200,109892,102461],{},[160,109894,109895],{},"小车离中心越远，扣分越多。",[160,109897,109898],{},"杆子角度越大，扣分越多。",[19,109900,109901],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,109903,101311],{"id":101310},[194,109905,109907],{"className":30436,"code":109906,"language":30438,"meta":27,"style":27},"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",[200,109908,109909,109915,109925,109929,109933,109941,109946,109950,109954,109958,109963,109967,109972,109977,109982,109986,109991,109996,110001,110005,110009,110013,110017,110021,110026,110030,110034,110038,110042,110046,110056,110063,110067,110071,110085,110099,110112,110142,110146,110150,110162,110174,110182,110186,110199,110203,110207,110216,110220,110236,110246,110259,110272,110276,110299,110317,110321,110333,110337,110341,110351,110361,110365,110381,110422,110426,110446,110462,110466,110470,110482],{"__ignoreMap":27},[203,109910,109911,109913],{"class":205,"line":206},[203,109912,30450],{"class":209},[203,109914,101359],{"class":213},[203,109916,109917,109919,109921,109923],{"class":205,"line":124},[203,109918,30450],{"class":209},[203,109920,31438],{"class":213},[203,109922,31441],{"class":209},[203,109924,31444],{"class":213},[203,109926,109927],{"class":205,"line":1269},[203,109928,2489],{"emptyLinePlaceholder":131},[203,109930,109931],{"class":205,"line":1284},[203,109932,2489],{"emptyLinePlaceholder":131},[203,109934,109935,109937,109939],{"class":205,"line":1290},[203,109936,101372],{"class":262},[203,109938,13654],{"class":209},[203,109940,101377],{"class":318},[203,109942,109943],{"class":205,"line":1304},[203,109944,109945],{"class":318},"\u003Cmujoco model=\"cartpole\">\n",[203,109947,109948],{"class":205,"line":1310},[203,109949,101387],{"class":318},[203,109951,109952],{"class":205,"line":1401},[203,109953,2489],{"emptyLinePlaceholder":131},[203,109955,109956],{"class":205,"line":1407},[203,109957,101396],{"class":318},[203,109959,109960],{"class":205,"line":1419},[203,109961,109962],{"class":318},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[203,109964,109965],{"class":205,"line":1701},[203,109966,2489],{"emptyLinePlaceholder":131},[203,109968,109969],{"class":205,"line":1706},[203,109970,109971],{"class":318},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[203,109973,109974],{"class":205,"line":1712},[203,109975,109976],{"class":318},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[203,109978,109979],{"class":205,"line":1717},[203,109980,109981],{"class":318},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[203,109983,109984],{"class":205,"line":1731},[203,109985,2489],{"emptyLinePlaceholder":131},[203,109987,109988],{"class":205,"line":1736},[203,109989,109990],{"class":318},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[203,109992,109993],{"class":205,"line":1742},[203,109994,109995],{"class":318},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[203,109997,109998],{"class":205,"line":1763},[203,109999,110000],{"class":318},"        \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",[203,110002,110003],{"class":205,"line":1768},[203,110004,106496],{"class":318},[203,110006,110007],{"class":205,"line":1782},[203,110008,101425],{"class":318},[203,110010,110011],{"class":205,"line":1787},[203,110012,101430],{"class":318},[203,110014,110015],{"class":205,"line":1816},[203,110016,2489],{"emptyLinePlaceholder":131},[203,110018,110019],{"class":205,"line":1821},[203,110020,106513],{"class":318},[203,110022,110023],{"class":205,"line":1838},[203,110024,110025],{"class":318},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[203,110027,110028],{"class":205,"line":1843},[203,110029,106523],{"class":318},[203,110031,110032],{"class":205,"line":1848},[203,110033,101435],{"class":318},[203,110035,110036],{"class":205,"line":1853},[203,110037,95756],{"class":318},[203,110039,110040],{"class":205,"line":1867},[203,110041,2489],{"emptyLinePlaceholder":131},[203,110043,110044],{"class":205,"line":1872},[203,110045,2489],{"emptyLinePlaceholder":131},[203,110047,110048,110050,110053],{"class":205,"line":2666},[203,110049,32005],{"class":209},[203,110051,110052],{"class":2052}," get_observation",[203,110054,110055],{"class":213},"(data: mujoco.MjData) -> np.ndarray:\n",[203,110057,110058,110060],{"class":205,"line":2680},[203,110059,4179],{"class":209},[203,110061,110062],{"class":213}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[203,110064,110065],{"class":205,"line":2688},[203,110066,2489],{"emptyLinePlaceholder":131},[203,110068,110069],{"class":205,"line":2693},[203,110070,2489],{"emptyLinePlaceholder":131},[203,110072,110073,110075,110078,110081,110083],{"class":205,"line":2699},[203,110074,32005],{"class":209},[203,110076,110077],{"class":2052}," compute_reward",[203,110079,110080],{"class":213},"(obs: np.ndarray) -> ",[203,110082,253],{"class":262},[203,110084,3828],{"class":213},[203,110086,110087,110090,110092,110095,110097],{"class":205,"line":2705},[203,110088,110089],{"class":213},"    cart_x ",[203,110091,259],{"class":209},[203,110093,110094],{"class":213}," obs[",[203,110096,405],{"class":262},[203,110098,33304],{"class":213},[203,110100,110101,110104,110106,110108,110110],{"class":205,"line":2710},[203,110102,110103],{"class":213},"    pole_angle ",[203,110105,259],{"class":209},[203,110107,110094],{"class":213},[203,110109,431],{"class":262},[203,110111,33304],{"class":213},[203,110113,110114,110116,110118,110120,110122,110124,110126,110128,110130,110132,110134,110136,110138,110140],{"class":205,"line":8038},[203,110115,4179],{"class":209},[203,110117,109855],{"class":262},[203,110119,214],{"class":213},[203,110121,102461],{"class":262},[203,110123,52329],{"class":209},[203,110125,109864],{"class":262},[203,110127,6608],{"class":209},[203,110129,109869],{"class":213},[203,110131,669],{"class":209},[203,110133,109869],{"class":213},[203,110135,746],{"class":209},[203,110137,109878],{"class":213},[203,110139,669],{"class":209},[203,110141,109883],{"class":213},[203,110143,110144],{"class":205,"line":8062},[203,110145,2489],{"emptyLinePlaceholder":131},[203,110147,110148],{"class":205,"line":8067},[203,110149,2489],{"emptyLinePlaceholder":131},[203,110151,110152,110154,110156,110158,110160],{"class":205,"line":8073},[203,110153,32005],{"class":209},[203,110155,2062],{"class":2052},[203,110157,101456],{"class":213},[203,110159,95744],{"class":262},[203,110161,3828],{"class":213},[203,110163,110164,110166,110168,110170,110172],{"class":205,"line":8100},[203,110165,101465],{"class":213},[203,110167,259],{"class":209},[203,110169,101470],{"class":213},[203,110171,101372],{"class":262},[203,110173,220],{"class":213},[203,110175,110176,110178,110180],{"class":205,"line":8105},[203,110177,101479],{"class":213},[203,110179,259],{"class":209},[203,110181,101484],{"class":213},[203,110183,110184],{"class":205,"line":8111},[203,110185,2489],{"emptyLinePlaceholder":131},[203,110187,110188,110190,110192,110194,110196],{"class":205,"line":8123},[203,110189,105127],{"class":213},[203,110191,431],{"class":262},[203,110193,4532],{"class":213},[203,110195,259],{"class":209},[203,110197,110198],{"class":262}," 0.1\n",[203,110200,110201],{"class":205,"line":8135},[203,110202,105140],{"class":213},[203,110204,110205],{"class":205,"line":8147},[203,110206,2489],{"emptyLinePlaceholder":131},[203,110208,110209,110212,110214],{"class":205,"line":9806},[203,110210,110211],{"class":213},"    total_reward ",[203,110213,259],{"class":209},[203,110215,104819],{"class":262},[203,110217,110218],{"class":205,"line":9831},[203,110219,2489],{"emptyLinePlaceholder":131},[203,110221,110222,110224,110226,110228,110230,110232,110234],{"class":205,"line":9854},[203,110223,3290],{"class":209},[203,110225,31674],{"class":213},[203,110227,26101],{"class":209},[203,110229,32501],{"class":262},[203,110231,214],{"class":213},[203,110233,6500],{"class":262},[203,110235,30844],{"class":213},[203,110237,110238,110241,110243],{"class":205,"line":9878},[203,110239,110240],{"class":213},"        obs ",[203,110242,259],{"class":209},[203,110244,110245],{"class":213}," get_observation(data)\n",[203,110247,110248,110251,110253,110255,110257],{"class":205,"line":9883},[203,110249,110250],{"class":213},"        pole_angle ",[203,110252,259],{"class":209},[203,110254,110094],{"class":213},[203,110256,431],{"class":262},[203,110258,33304],{"class":213},[203,110260,110261,110264,110266,110268,110270],{"class":205,"line":9888},[203,110262,110263],{"class":213},"        pole_angular_velocity ",[203,110265,259],{"class":209},[203,110267,110094],{"class":213},[203,110269,285],{"class":262},[203,110271,33304],{"class":213},[203,110273,110274],{"class":205,"line":9893},[203,110275,2489],{"emptyLinePlaceholder":131},[203,110277,110278,110281,110283,110286,110288,110290,110292,110294,110296],{"class":205,"line":9902},[203,110279,110280],{"class":213},"        action ",[203,110282,259],{"class":209},[203,110284,110285],{"class":262}," 2.0",[203,110287,6608],{"class":209},[203,110289,109878],{"class":213},[203,110291,695],{"class":209},[203,110293,61925],{"class":262},[203,110295,6608],{"class":209},[203,110297,110298],{"class":213}," pole_angular_velocity\n",[203,110300,110301,110303,110305,110307,110309,110311,110313,110315],{"class":205,"line":9907},[203,110302,110280],{"class":213},[203,110304,259],{"class":209},[203,110306,107505],{"class":213},[203,110308,746],{"class":209},[203,110310,102461],{"class":262},[203,110312,12525],{"class":213},[203,110314,102461],{"class":262},[203,110316,220],{"class":213},[203,110318,110319],{"class":205,"line":9913},[203,110320,2489],{"emptyLinePlaceholder":131},[203,110322,110323,110325,110327,110329,110331],{"class":205,"line":9934},[203,110324,106675],{"class":213},[203,110326,405],{"class":262},[203,110328,4532],{"class":213},[203,110330,259],{"class":209},[203,110332,107528],{"class":213},[203,110334,110335],{"class":205,"line":9940},[203,110336,101574],{"class":213},[203,110338,110339],{"class":205,"line":9954},[203,110340,2489],{"emptyLinePlaceholder":131},[203,110342,110343,110346,110348],{"class":205,"line":9960},[203,110344,110345],{"class":213},"        reward ",[203,110347,259],{"class":209},[203,110349,110350],{"class":213}," compute_reward(get_observation(data))\n",[203,110352,110353,110356,110358],{"class":205,"line":9987},[203,110354,110355],{"class":213},"        total_reward ",[203,110357,9567],{"class":209},[203,110359,110360],{"class":213}," reward\n",[203,110362,110363],{"class":205,"line":9996},[203,110364,2489],{"emptyLinePlaceholder":131},[203,110366,110367,110369,110371,110373,110375,110377,110379],{"class":205,"line":10002},[203,110368,2586],{"class":209},[203,110370,31674],{"class":213},[203,110372,542],{"class":209},[203,110374,5844],{"class":262},[203,110376,101617],{"class":209},[203,110378,4182],{"class":262},[203,110380,3828],{"class":213},[203,110382,110383,110385,110387,110390,110393,110396,110399,110401,110404,110407,110409,110411,110413,110415,110418,110420],{"class":205,"line":10010},[203,110384,34708],{"class":262},[203,110386,214],{"class":213},[203,110388,110389],{"class":318},"\"step:\"",[203,110391,110392],{"class":213},", step, ",[203,110394,110395],{"class":318},"\"obs:\"",[203,110397,110398],{"class":213},", np.round(obs, ",[203,110400,285],{"class":262},[203,110402,110403],{"class":213},"), ",[203,110405,110406],{"class":318},"\"action:\"",[203,110408,12525],{"class":213},[203,110410,32076],{"class":262},[203,110412,214],{"class":213},[203,110414,253],{"class":262},[203,110416,110417],{"class":213},"(action), ",[203,110419,285],{"class":262},[203,110421,30555],{"class":213},[203,110423,110424],{"class":205,"line":10015},[203,110425,2489],{"emptyLinePlaceholder":131},[203,110427,110428,110430,110432,110435,110437,110439,110442,110444],{"class":205,"line":16694},[203,110429,31357],{"class":262},[203,110431,214],{"class":213},[203,110433,110434],{"class":318},"\"total_reward:\"",[203,110436,12525],{"class":213},[203,110438,32076],{"class":262},[203,110440,110441],{"class":213},"(total_reward, ",[203,110443,285],{"class":262},[203,110445,30555],{"class":213},[203,110447,110448,110450,110452,110455,110458,110460],{"class":205,"line":16700},[203,110449,31357],{"class":262},[203,110451,214],{"class":213},[203,110453,110454],{"class":318},"\"final obs:\"",[203,110456,110457],{"class":213},", np.round(get_observation(data), ",[203,110459,285],{"class":262},[203,110461,30555],{"class":213},[203,110463,110464],{"class":205,"line":16723},[203,110465,2489],{"emptyLinePlaceholder":131},[203,110467,110468],{"class":205,"line":16729},[203,110469,2489],{"emptyLinePlaceholder":131},[203,110471,110472,110474,110476,110478,110480],{"class":205,"line":16752},[203,110473,1620],{"class":209},[203,110475,31278],{"class":262},[203,110477,101617],{"class":209},[203,110479,101620],{"class":318},[203,110481,3828],{"class":213},[203,110483,110484],{"class":205,"line":16766},[203,110485,101627],{"class":213},[19,110487,103628],{},[194,110489,110491],{"className":23913,"code":110490,"language":23915,"meta":27,"style":27},"touch ch6_cartpole.py\n",[200,110492,110493],{"__ignoreMap":27},[203,110494,110495,110497],{"class":205,"line":206},[203,110496,101341],{"class":2052},[203,110498,110499],{"class":318}," ch6_cartpole.py\n",[19,110501,110502],{},"运行：",[194,110504,110506],{"className":23913,"code":110505,"language":23915,"meta":27,"style":27},"python ch6_cartpole.py\n",[200,110507,110508],{"__ignoreMap":27},[203,110509,110510,110512],{"class":205,"line":206},[203,110511,30438],{"class":2052},[203,110513,110499],{"class":318},[174,110515,101630],{"id":101630},[19,110517,110518],{},"构造观测：",[194,110520,110522],{"className":30436,"code":110521,"language":30438,"meta":27,"style":27},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[200,110523,110524,110532],{"__ignoreMap":27},[203,110525,110526,110528,110530],{"class":205,"line":206},[203,110527,32005],{"class":209},[203,110529,110052],{"class":2052},[203,110531,110055],{"class":213},[203,110533,110534,110536],{"class":205,"line":124},[203,110535,4179],{"class":209},[203,110537,110062],{"class":213},[19,110539,110540,110543,110544,110546,110547,110549],{},[200,110541,110542],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[200,110545,104088],{}," 2 维，",[200,110548,104418],{}," 2 维，所以 obs 是 4 维。",[19,110551,110552],{},"设置初始角度：",[194,110554,110556],{"className":30436,"code":110555,"language":30438,"meta":27,"style":27},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[200,110557,110558,110570],{"__ignoreMap":27},[203,110559,110560,110562,110564,110566,110568],{"class":205,"line":206},[203,110561,104757],{"class":213},[203,110563,431],{"class":262},[203,110565,4532],{"class":213},[203,110567,259],{"class":209},[203,110569,110198],{"class":262},[203,110571,110572],{"class":205,"line":124},[203,110573,104601],{"class":213},[19,110575,110576],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,110578,110579],{},"简单反馈控制：",[194,110581,110583],{"className":30436,"code":110582,"language":30438,"meta":27,"style":27},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[200,110584,110585,110605],{"__ignoreMap":27},[203,110586,110587,110589,110591,110593,110595,110597,110599,110601,110603],{"class":205,"line":206},[203,110588,107500],{"class":213},[203,110590,259],{"class":209},[203,110592,110285],{"class":262},[203,110594,6608],{"class":209},[203,110596,109878],{"class":213},[203,110598,695],{"class":209},[203,110600,61925],{"class":262},[203,110602,6608],{"class":209},[203,110604,110298],{"class":213},[203,110606,110607,110609,110611,110613,110615,110617,110619,110621],{"class":205,"line":124},[203,110608,107500],{"class":213},[203,110610,259],{"class":209},[203,110612,107505],{"class":213},[203,110614,746],{"class":209},[203,110616,102461],{"class":262},[203,110618,12525],{"class":213},[203,110620,102461],{"class":262},[203,110622,220],{"class":213},[19,110624,110625],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,110627,110628],{},"限制动作：",[194,110630,110632],{"className":30436,"code":110631,"language":30438,"meta":27,"style":27},"np.clip(action, -1.0, 1.0)\n",[200,110633,110634],{"__ignoreMap":27},[203,110635,110636,110639,110641,110643,110645,110647],{"class":205,"line":206},[203,110637,110638],{"class":213},"np.clip(action, ",[203,110640,746],{"class":209},[203,110642,102461],{"class":262},[203,110644,12525],{"class":213},[203,110646,102461],{"class":262},[203,110648,220],{"class":213},[19,110650,110651,110652,110655],{},"因为 XML 里 ",[200,110653,110654],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[174,110657,101766],{"id":101766},[194,110659,110660],{"className":30436,"code":110521,"language":30438,"meta":27,"style":27},[200,110661,110662,110670],{"__ignoreMap":27},[203,110663,110664,110666,110668],{"class":205,"line":206},[203,110665,32005],{"class":209},[203,110667,110052],{"class":2052},[203,110669,110055],{"class":213},[203,110671,110672,110674],{"class":205,"line":124},[203,110673,4179],{"class":209},[203,110675,110062],{"class":213},[19,110677,110678,110679,110682,110683,110686,110687,110690],{},"这段定义了一个函数，用来获取当前观测。",[200,110680,110681],{},"data.qpos.copy()"," 是位置数组副本，",[200,110684,110685],{},"data.qvel.copy()"," 是速度数组副本。",[200,110688,110689],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,110692,110693],{},"在本章模型里：",[194,110695,110698],{"className":110696,"code":110697,"language":5277,"meta":27},[5275],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[200,110699,110697],{"__ignoreMap":27},[19,110701,110702],{},"所以返回的 obs 是：",[194,110704,110707],{"className":110705,"code":110706,"language":5277,"meta":27},[5275],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[200,110708,110706],{"__ignoreMap":27},[194,110710,110712],{"className":30436,"code":110711,"language":30438,"meta":27,"style":27},"def compute_reward(obs: np.ndarray) -> float:\n",[200,110713,110714],{"__ignoreMap":27},[203,110715,110716,110718,110720,110722,110724],{"class":205,"line":206},[203,110717,32005],{"class":209},[203,110719,110077],{"class":2052},[203,110721,110080],{"class":213},[203,110723,253],{"class":262},[203,110725,3828],{"class":213},[19,110727,110728,110729,110732],{},"这行定义奖励函数。输入是观测 ",[200,110730,110731],{},"obs","，输出是一个浮点数奖励。",[194,110734,110736],{"className":30436,"code":110735,"language":30438,"meta":27,"style":27},"cart_x = obs[0]\npole_angle = obs[1]\n",[200,110737,110738,110751],{"__ignoreMap":27},[203,110739,110740,110743,110745,110747,110749],{"class":205,"line":206},[203,110741,110742],{"class":213},"cart_x ",[203,110744,259],{"class":209},[203,110746,110094],{"class":213},[203,110748,405],{"class":262},[203,110750,33304],{"class":213},[203,110752,110753,110756,110758,110760,110762],{"class":205,"line":124},[203,110754,110755],{"class":213},"pole_angle ",[203,110757,259],{"class":209},[203,110759,110094],{"class":213},[203,110761,431],{"class":262},[203,110763,33304],{"class":213},[19,110765,110766,110767,110770,110771,110774],{},"数组索引从 0 开始。",[200,110768,110769],{},"obs[0]"," 是第一个元素，也就是小车位置。",[200,110772,110773],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[194,110776,110777],{"className":30436,"code":109846,"language":30438,"meta":27,"style":27},[200,110778,110779],{"__ignoreMap":27},[203,110780,110781,110783,110785,110787,110789,110791,110793,110795,110797,110799,110801,110803,110805,110807],{"class":205,"line":206},[203,110782,17136],{"class":209},[203,110784,109855],{"class":262},[203,110786,214],{"class":213},[203,110788,102461],{"class":262},[203,110790,52329],{"class":209},[203,110792,109864],{"class":262},[203,110794,6608],{"class":209},[203,110796,109869],{"class":213},[203,110798,669],{"class":209},[203,110800,109869],{"class":213},[203,110802,746],{"class":209},[203,110804,109878],{"class":213},[203,110806,669],{"class":209},[203,110808,109883],{"class":213},[19,110810,110811,110812,110815,110816,110819],{},"这行计算奖励。",[200,110813,110814],{},"cart_x * cart_x"," 是小车位置的平方，",[200,110817,110818],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[194,110821,110823],{"className":30436,"code":110822,"language":30438,"meta":27,"style":27},"data.qpos[1] = 0.1\n",[200,110824,110825],{"__ignoreMap":27},[203,110826,110827,110829,110831,110833,110835],{"class":205,"line":206},[203,110828,104757],{"class":213},[203,110830,431],{"class":262},[203,110832,4532],{"class":213},[203,110834,259],{"class":209},[203,110836,110198],{"class":262},[19,110838,110839,110840,110842,110843,110845],{},"手动设置杆子的初始角度。因为 ",[200,110841,105514],{}," 是小车位置，",[200,110844,105517],{}," 是杆子角度，所以这里改的是杆子。",[194,110847,110848],{"className":30436,"code":104601,"language":30438,"meta":27,"style":27},[200,110849,110850],{"__ignoreMap":27},[203,110851,110852],{"class":205,"line":206},[203,110853,104601],{"class":213},[19,110855,105560,110856,110858],{},[200,110857,104088],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[194,110860,110862],{"className":30436,"code":110861,"language":30438,"meta":27,"style":27},"total_reward = 0.0\n",[200,110863,110864],{"__ignoreMap":27},[203,110865,110866,110869,110871],{"class":205,"line":206},[203,110867,110868],{"class":213},"total_reward ",[203,110870,259],{"class":209},[203,110872,104819],{"class":262},[19,110874,110875],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[194,110877,110879],{"className":30436,"code":110878,"language":30438,"meta":27,"style":27},"for step in range(1000):\n",[200,110880,110881],{"__ignoreMap":27},[203,110882,110883,110885,110887,110889,110891,110893,110895],{"class":205,"line":206},[203,110884,3114],{"class":209},[203,110886,31674],{"class":213},[203,110888,26101],{"class":209},[203,110890,32501],{"class":262},[203,110892,214],{"class":213},[203,110894,6500],{"class":262},[203,110896,30844],{"class":213},[19,110898,110899,110900,110902],{},"循环 1000 步。",[200,110901,107192],{}," 是当前步数，从 0 到 999。",[194,110904,110906],{"className":30436,"code":110905,"language":30438,"meta":27,"style":27},"obs = get_observation(data)\n",[200,110907,110908],{"__ignoreMap":27},[203,110909,110910,110913,110915],{"class":205,"line":206},[203,110911,110912],{"class":213},"obs ",[203,110914,259],{"class":209},[203,110916,110245],{"class":213},[19,110918,110919,110920,28443],{},"读取当前状态，保存到 ",[200,110921,110731],{},[194,110923,110925],{"className":30436,"code":110924,"language":30438,"meta":27,"style":27},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[200,110926,110927,110939],{"__ignoreMap":27},[203,110928,110929,110931,110933,110935,110937],{"class":205,"line":206},[203,110930,110755],{"class":213},[203,110932,259],{"class":209},[203,110934,110094],{"class":213},[203,110936,431],{"class":262},[203,110938,33304],{"class":213},[203,110940,110941,110944,110946,110948,110950],{"class":205,"line":124},[203,110942,110943],{"class":213},"pole_angular_velocity ",[203,110945,259],{"class":209},[203,110947,110094],{"class":213},[203,110949,285],{"class":262},[203,110951,33304],{"class":213},[19,110953,110954,110955,110958,110959,28443],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[200,110956,110957],{},"obs[3]","？因为 obs 的顺序是 ",[200,110960,110961],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[194,110963,110965],{"className":30436,"code":110964,"language":30438,"meta":27,"style":27},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[200,110966,110967],{"__ignoreMap":27},[203,110968,110969,110971,110973,110975,110977,110979,110981,110983,110985],{"class":205,"line":206},[203,110970,107500],{"class":213},[203,110972,259],{"class":209},[203,110974,110285],{"class":262},[203,110976,6608],{"class":209},[203,110978,109878],{"class":213},[203,110980,695],{"class":209},[203,110982,61925],{"class":262},[203,110984,6608],{"class":209},[203,110986,110298],{"class":213},[19,110988,110989,110990,101076,110992,110994],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[200,110991,105318],{},[200,110993,35387],{}," 是人为设置的系数，不是固定公式。",[194,110996,110998],{"className":30436,"code":110997,"language":30438,"meta":27,"style":27},"action = np.clip(action, -1.0, 1.0)\n",[200,110999,111000],{"__ignoreMap":27},[203,111001,111002,111004,111006,111008,111010,111012,111014,111016],{"class":205,"line":206},[203,111003,107500],{"class":213},[203,111005,259],{"class":209},[203,111007,107505],{"class":213},[203,111009,746],{"class":209},[203,111011,102461],{"class":262},[203,111013,12525],{"class":213},[203,111015,102461],{"class":262},[203,111017,220],{"class":213},[19,111019,111020],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[194,111022,111023],{"className":30436,"code":109831,"language":30438,"meta":27,"style":27},[200,111024,111025],{"__ignoreMap":27},[203,111026,111027,111029,111031,111033,111035],{"class":205,"line":206},[203,111028,105929],{"class":213},[203,111030,405],{"class":262},[203,111032,4532],{"class":213},[203,111034,259],{"class":209},[203,111036,107528],{"class":213},[19,111038,111039],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[194,111041,111042],{"className":30436,"code":104563,"language":30438,"meta":27,"style":27},[200,111043,111044],{"__ignoreMap":27},[203,111045,111046],{"class":205,"line":206},[203,111047,104563],{"class":213},[19,111049,111050,111051,111053],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[200,111052,106184],{}," 计算小车和杆子的下一刻状态。",[194,111055,111057],{"className":30436,"code":111056,"language":30438,"meta":27,"style":27},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[200,111058,111059,111068],{"__ignoreMap":27},[203,111060,111061,111064,111066],{"class":205,"line":206},[203,111062,111063],{"class":213},"reward ",[203,111065,259],{"class":209},[203,111067,110350],{"class":213},[203,111069,111070,111072,111074],{"class":205,"line":124},[203,111071,110868],{"class":213},[203,111073,9567],{"class":209},[203,111075,110360],{"class":213},[19,111077,111078,111079,111081,111082,111085,111086,28443],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[200,111080,9567],{}," 是简写，",[200,111083,111084],{},"total_reward += reward"," 等价于 ",[200,111087,111088],{},"total_reward = total_reward + reward",[194,111090,111092],{"className":30436,"code":111091,"language":30438,"meta":27,"style":27},"if step % 100 == 0:\n",[200,111093,111094],{"__ignoreMap":27},[203,111095,111096,111098,111100,111102,111104,111106,111108],{"class":205,"line":206},[203,111097,1620],{"class":209},[203,111099,31674],{"class":213},[203,111101,542],{"class":209},[203,111103,5844],{"class":262},[203,111105,101617],{"class":209},[203,111107,4182],{"class":262},[203,111109,3828],{"class":213},[19,111111,111112,111114,111115,111118],{},[200,111113,542],{}," 是取余数。",[200,111116,111117],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[194,111120,111122],{"className":30436,"code":111121,"language":30438,"meta":27,"style":27},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[200,111123,111124],{"__ignoreMap":27},[203,111125,111126,111128,111130,111132,111134,111136,111138,111140,111142,111144,111146,111148,111150,111152,111154,111156],{"class":205,"line":206},[203,111127,30473],{"class":262},[203,111129,214],{"class":213},[203,111131,110389],{"class":318},[203,111133,110392],{"class":213},[203,111135,110395],{"class":318},[203,111137,110398],{"class":213},[203,111139,285],{"class":262},[203,111141,110403],{"class":213},[203,111143,110406],{"class":318},[203,111145,12525],{"class":213},[203,111147,32076],{"class":262},[203,111149,214],{"class":213},[203,111151,253],{"class":262},[203,111153,110417],{"class":213},[203,111155,285],{"class":262},[203,111157,30555],{"class":213},[19,111159,111160,111161,111164,111165,111168],{},"打印当前步数、观测和动作。",[200,111162,111163],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[200,111166,111167],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111170,102374],{"id":102373},[19,111172,111173],{},"观测向量:",[194,111175,111178],{"className":111176,"code":111177,"language":5277,"meta":27},[5275],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[200,111179,111177],{"__ignoreMap":27},[19,111181,111182],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111184,111185],{},"每隔 100 步会打印一次：",[194,111187,111190],{"className":111188,"code":111189,"language":5277,"meta":27},[5275],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[200,111191,111189],{"__ignoreMap":27},[19,111193,111194],{},"重点观察：",[157,111196,111197,111203,111208],{},[160,111198,111199,111202],{},[200,111200,111201],{},"pole_angle"," 是否越来越大。",[160,111204,111205,111207],{},[200,111206,109784],{}," 是否跑得太远。",[160,111209,111210,111211,82597,111213,28443],{},"action 是否经常被 clip 到 ",[200,111212,103973],{},[200,111214,431],{},[19,111216,111217],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111219,102406],{"id":102405},[157,111221,111222,111228,111231,111237,111247,111253,111256],{},[160,111223,111224,111225,28443],{},"把初始角度改为 ",[200,111226,111227],{},"data.qpos[1] = 0.3",[160,111229,111230],{},"重新运行，观察控制是否变差。",[160,111232,111233,111234,111236],{},"把 actuator ",[200,111235,107125],{}," 改小。",[160,111238,111239,111240,111243,111244,28443],{},"打印 ",[200,111241,111242],{},"model.nq, model.nv, model.nu","，应为 ",[200,111245,111246],{},"2 2 1",[160,111248,111249,111250,111252],{},"把 reward 里的 ",[200,111251,110818],{}," 系数改大，观察总奖励变化。",[160,111254,111255],{},"把控制器改成反号，观察杆子是否更容易倒。",[160,111257,111258],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111260,102511],{"id":102510},[174,111262,111263],{"id":111263},"杆子方向和预期不一致",[19,111265,102454,111266,111268,111269,111271],{},[200,111267,106297],{}," 和 capsule 的 ",[200,111270,103234],{},"，必要时用 viewer 可视化确认。",[174,111273,111274],{"id":111274},"控制器越控越倒",[19,111276,111277],{},"说明反馈符号可能反了，尝试:",[194,111279,111281],{"className":30436,"code":111280,"language":30438,"meta":27,"style":27},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[200,111282,111283],{"__ignoreMap":27},[203,111284,111285,111287,111289,111291,111293,111295,111297,111299,111301,111303],{"class":205,"line":206},[203,111286,107500],{"class":213},[203,111288,259],{"class":209},[203,111290,52329],{"class":209},[203,111292,105318],{"class":262},[203,111294,6608],{"class":209},[203,111296,109878],{"class":213},[203,111298,746],{"class":209},[203,111300,61925],{"class":262},[203,111302,6608],{"class":209},[203,111304,110298],{"class":213},[174,111306,111307],{"id":111307},"小车飞走",[19,111309,111310,111311,111313,111314,111317],{},"降低 ",[200,111312,107125],{}," 或缩小 ",[200,111315,111316],{},"action"," 的 clip 范围。",[174,111319,111321,111323],{"id":111320},"obs3-为什么是杆子角速度",[200,111322,110957],{}," 为什么是杆子角速度",[19,111325,111326],{},"因为这个模型里：",[194,111328,111331],{"className":111329,"code":111330,"language":5277,"meta":27},[5275],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[200,111332,111330],{"__ignoreMap":27},[19,111334,109805],{},[194,111336,111339],{"className":111337,"code":111338,"language":5277,"meta":27},[5275],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[200,111340,111338],{"__ignoreMap":27},[174,111342,111344],{"id":111343},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111346,111347],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111349,102665],{"id":102664},[19,111351,111352],{},"一个控制任务通常包含：",[157,111354,111355,111358,111366,111371,111374],{},[160,111356,111357],{},"模型：Cartpole 的 body、joint、actuator。",[160,111359,111360,111361,426,111363,111365],{},"观测：从 ",[200,111362,104088],{},[200,111364,104418],{}," 里取状态。",[160,111367,111368,111369,28443],{},"动作：写入 ",[200,111370,101134],{},[160,111372,111373],{},"奖励：根据任务目标打分。",[160,111375,111376],{},"循环：obs -> action -> step -> reward。",[19,111378,111379],{},"这就是后面 Gymnasium 环境的基本骨架。",[5216,111381,104344],{},{"title":27,"searchDepth":124,"depth":124,"links":111383},[111384,111385,111386,111391,111395,111396,111397,111405],{"id":100704,"depth":124,"text":100705},{"id":100827,"depth":124,"text":100828},{"id":101102,"depth":124,"text":101103,"children":111387},[111388,111389,111390],{"id":109758,"depth":1269,"text":109759},{"id":109823,"depth":1269,"text":109824},{"id":109839,"depth":1269,"text":109840},{"id":101310,"depth":124,"text":101311,"children":111392},[111393,111394],{"id":101630,"depth":1269,"text":101630},{"id":101766,"depth":1269,"text":101766},{"id":102373,"depth":124,"text":102374},{"id":102405,"depth":124,"text":102406},{"id":102510,"depth":124,"text":102511,"children":111398},[111399,111400,111401,111402,111404],{"id":111263,"depth":1269,"text":111263},{"id":111274,"depth":1269,"text":111274},{"id":111307,"depth":1269,"text":111307},{"id":111320,"depth":1269,"text":111403},"obs[3] 为什么是杆子角速度",{"id":111343,"depth":1269,"text":111344},{"id":102664,"depth":124,"text":102665},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109494,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111412,"title":111413,"body":111414,"description":27,"extension":129,"meta":113428,"navigation":131,"path":113429,"seo":113430,"stem":113431,"__hash__":113432},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111415,"toc":113404},[111416,111419,111421,111424,111426,111443,111446,111449,111455,111458,111460,111462,111486,111488,111502,111504,111545,111547,111565,111567,111570,111576,111579,111607,111611,111617,111642,111645,111676,111683,111686,111689,111695,111698,111704,111707,111713,111717,111720,111745,111748,111750,112510,112512,112524,112526,112537,112539,112542,112559,112562,112564,112575,112578,112580,112626,112629,112642,112645,112727,112730,112732,112748,112758,112771,112774,112813,112823,112834,112844,112857,112860,112889,112892,112902,112905,112911,112928,112939,112941,112947,112964,112975,112996,112999,113011,113014,113035,113038,113046,113054,113071,113074,113143,113150,113158,113161,113174,113181,113183,113186,113192,113195,113198,113204,113210,113212,113252,113254,113260,113269,113272,113274,113294,113297,113300,113306,113310,113312,113339,113342,113345,113372,113378,113381,113384,113386,113389,113392,113398,113401],[10,111417,111413],{"id":111418},"_7控制任务reacher-机械臂到达目标",[14,111420,100705],{"id":100704},[19,111422,111423],{},"本章搭建一个二维两关节 reacher 任务。",[19,111425,104389],{},[157,111427,111428,111431,111434,111437,111440],{},[160,111429,111430],{},"两个 hinge joint",[160,111432,111433],{},"两个 motor actuator",[160,111435,111436],{},"site 作为末端点和目标点",[160,111438,111439],{},"根据末端和目标距离设计 reward",[160,111441,111442],{},"构造机械臂任务的基本形式",[19,111444,111445],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111447,111448],{},"Reacher 任务可以理解为：",[194,111450,111453],{"className":111451,"code":111452,"language":5277,"meta":27},[5275],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[200,111454,111452],{"__ignoreMap":27},[19,111456,111457],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111459,100828],{"id":100827},[19,111461,100831],{},[194,111463,111464],{"className":23913,"code":104446,"language":23915,"meta":27,"style":27},[200,111465,111466],{"__ignoreMap":27},[203,111467,111468,111470,111472,111474,111476,111478,111480,111482,111484],{"class":205,"line":206},[203,111469,24634],{"class":2052},[203,111471,26373],{"class":318},[203,111473,23925],{"class":318},[203,111475,26458],{"class":262},[203,111477,104461],{"class":318},[203,111479,100856],{"class":318},[203,111481,102559],{"class":318},[203,111483,100872],{"class":318},[203,111485,104470],{"class":318},[19,111487,102877],{},[194,111489,111490],{"className":23913,"code":100977,"language":23915,"meta":27,"style":27},[200,111491,111492],{"__ignoreMap":27},[203,111493,111494,111496,111498,111500],{"class":205,"line":206},[203,111495,23922],{"class":2052},[203,111497,23925],{"class":318},[203,111499,100988],{"class":318},[203,111501,100991],{"class":318},[19,111503,102894],{},[194,111505,111507],{"className":23913,"code":111506,"language":23915,"meta":27,"style":27},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[200,111508,111509,111526,111535],{"__ignoreMap":27},[203,111510,111511,111513,111515,111517,111520,111522,111524],{"class":205,"line":206},[203,111512,30388],{"class":2052},[203,111514,29234],{"class":318},[203,111516,25173],{"class":262},[203,111518,111519],{"class":318}," mujoco-reacher",[203,111521,101033],{"class":318},[203,111523,101036],{"class":262},[203,111525,101039],{"class":262},[203,111527,111528,111530,111532],{"class":205,"line":124},[203,111529,30388],{"class":2052},[203,111531,101046],{"class":318},[203,111533,111534],{"class":318}," mujoco-reacher\n",[203,111536,111537,111539,111541,111543],{"class":205,"line":1269},[203,111538,23922],{"class":2052},[203,111540,23925],{"class":318},[203,111542,100988],{"class":318},[203,111544,100991],{"class":318},[19,111546,101062],{},[157,111548,111549,111552,111555],{},[160,111550,111551],{},"本章使用低维状态，不使用图像输入。",[160,111553,111554],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[160,111556,111557,111558,426,111560,426,111562,111564],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[200,111559,104088],{},[200,111561,104418],{},[200,111563,103738],{}," 的方法一致。",[14,111566,101103],{"id":101102},[19,111568,111569],{},"Reacher 任务核心:",[194,111571,111574],{"className":111572,"code":111573,"language":5277,"meta":27},[5275],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[200,111575,111573],{"__ignoreMap":27},[19,111577,111578],{},"读取 site 世界坐标:",[194,111580,111582],{"className":30436,"code":111581,"language":30438,"meta":27,"style":27},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[200,111583,111584,111597],{"__ignoreMap":27},[203,111585,111586,111588,111590,111592,111595],{"class":205,"line":206},[203,111587,103692],{"class":213},[203,111589,259],{"class":209},[203,111591,103463],{"class":213},[203,111593,111594],{"class":318},"\"tip\"",[203,111596,220],{"class":213},[203,111598,111599,111602,111604],{"class":205,"line":124},[203,111600,111601],{"class":213},"tip_pos ",[203,111603,259],{"class":209},[203,111605,111606],{"class":213}," data.site_xpos[site_id]\n",[174,111608,111610],{"id":111609},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,111612,111613,111614,111616],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[200,111615,104088],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[194,111618,111620],{"className":30436,"code":111619,"language":30438,"meta":27,"style":27},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[200,111621,111622,111632],{"__ignoreMap":27},[203,111623,111624,111627,111629],{"class":205,"line":206},[203,111625,111626],{"class":213},"tip ",[203,111628,259],{"class":209},[203,111630,111631],{"class":213}," data.site_xpos[tip_site_id]\n",[203,111633,111634,111637,111639],{"class":205,"line":124},[203,111635,111636],{"class":213},"target ",[203,111638,259],{"class":209},[203,111640,111641],{"class":213}," data.site_xpos[target_site_id]\n",[19,111643,111644],{},"这样 reward 就很容易写：",[194,111646,111648],{"className":30436,"code":111647,"language":30438,"meta":27,"style":27},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[200,111649,111650,111665],{"__ignoreMap":27},[203,111651,111652,111655,111657,111660,111662],{"class":205,"line":206},[203,111653,111654],{"class":213},"dist ",[203,111656,259],{"class":209},[203,111658,111659],{"class":213}," np.linalg.norm(tip ",[203,111661,746],{"class":209},[203,111663,111664],{"class":213}," target)\n",[203,111666,111667,111669,111671,111673],{"class":205,"line":124},[203,111668,111063],{"class":213},[203,111670,259],{"class":209},[203,111672,52329],{"class":209},[203,111674,111675],{"class":213},"dist\n",[19,111677,111678,111679,111682],{},"距离越小，",[200,111680,111681],{},"-dist"," 越接近 0，奖励越高。",[174,111684,111685],{"id":111685},"两关节机械臂的状态",[19,111687,111688],{},"这个模型有两个 hinge joint：",[194,111690,111693],{"className":111691,"code":111692,"language":5277,"meta":27},[5275],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[200,111694,111692],{"__ignoreMap":27},[19,111696,111697],{},"再加上末端和目标位置：",[194,111699,111702],{"className":111700,"code":111701,"language":5277,"meta":27},[5275],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[200,111703,111701],{"__ignoreMap":27},[19,111705,111706],{},"总维度：",[194,111708,111711],{"className":111709,"code":111710,"language":5277,"meta":27},[5275],"2 + 2 + 3 + 3 = 10\n",[200,111712,111710],{"__ignoreMap":27},[174,111714,111716],{"id":111715},"为什么-gravity-是-0","为什么 gravity 是 0",[19,111718,111719],{},"本章把重力设为：",[194,111721,111723],{"className":53125,"code":111722,"language":53127,"meta":27,"style":27},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[200,111724,111725],{"__ignoreMap":27},[203,111726,111727,111729,111731,111733,111735,111737,111739,111741,111743],{"class":205,"line":206},[203,111728,1124],{"class":213},[203,111730,69224],{"class":51358},[203,111732,101252],{"class":2052},[203,111734,259],{"class":213},[203,111736,101257],{"class":318},[203,111738,101260],{"class":2052},[203,111740,259],{"class":213},[203,111742,103829],{"class":318},[203,111744,101202],{"class":213},[19,111746,111747],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,111749,101311],{"id":101310},[194,111751,111753],{"className":30436,"code":111752,"language":30438,"meta":27,"style":27},"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",[200,111754,111755,111761,111771,111775,111779,111787,111792,111797,111801,111805,111810,111815,111819,111824,111829,111834,111838,111843,111848,111853,111858,111862,111866,111870,111874,111878,111883,111888,111892,111896,111900,111904,111908,111923,111932,111944,111967,111974,111978,111982,111992,112006,112020,112027,112031,112035,112049,112061,112073,112086,112101,112118,112122,112126,112138,112150,112158,112166,112170,112186,112191,112204,112217,112232,112236,112271,112303,112307,112311,112320,112324,112340,112350,112361,112377,112393,112409,112425,112429,112447,112467,112486,112490,112494,112506],{"__ignoreMap":27},[203,111756,111757,111759],{"class":205,"line":206},[203,111758,30450],{"class":209},[203,111760,101359],{"class":213},[203,111762,111763,111765,111767,111769],{"class":205,"line":124},[203,111764,30450],{"class":209},[203,111766,31438],{"class":213},[203,111768,31441],{"class":209},[203,111770,31444],{"class":213},[203,111772,111773],{"class":205,"line":1269},[203,111774,2489],{"emptyLinePlaceholder":131},[203,111776,111777],{"class":205,"line":1284},[203,111778,2489],{"emptyLinePlaceholder":131},[203,111780,111781,111783,111785],{"class":205,"line":1290},[203,111782,101372],{"class":262},[203,111784,13654],{"class":209},[203,111786,101377],{"class":318},[203,111788,111789],{"class":205,"line":1304},[203,111790,111791],{"class":318},"\u003Cmujoco model=\"two_link_reacher\">\n",[203,111793,111794],{"class":205,"line":1310},[203,111795,111796],{"class":318},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[203,111798,111799],{"class":205,"line":1401},[203,111800,2489],{"emptyLinePlaceholder":131},[203,111802,111803],{"class":205,"line":1407},[203,111804,101396],{"class":318},[203,111806,111807],{"class":205,"line":1419},[203,111808,111809],{"class":318},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[203,111811,111812],{"class":205,"line":1701},[203,111813,111814],{"class":318},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[203,111816,111817],{"class":205,"line":1706},[203,111818,2489],{"emptyLinePlaceholder":131},[203,111820,111821],{"class":205,"line":1712},[203,111822,111823],{"class":318},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[203,111825,111826],{"class":205,"line":1717},[203,111827,111828],{"class":318},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[203,111830,111831],{"class":205,"line":1731},[203,111832,111833],{"class":318},"      \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",[203,111835,111836],{"class":205,"line":1736},[203,111837,2489],{"emptyLinePlaceholder":131},[203,111839,111840],{"class":205,"line":1742},[203,111841,111842],{"class":318},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[203,111844,111845],{"class":205,"line":1763},[203,111846,111847],{"class":318},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[203,111849,111850],{"class":205,"line":1768},[203,111851,111852],{"class":318},"        \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",[203,111854,111855],{"class":205,"line":1782},[203,111856,111857],{"class":318},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[203,111859,111860],{"class":205,"line":1787},[203,111861,106496],{"class":318},[203,111863,111864],{"class":205,"line":1816},[203,111865,101425],{"class":318},[203,111867,111868],{"class":205,"line":1821},[203,111869,101430],{"class":318},[203,111871,111872],{"class":205,"line":1838},[203,111873,2489],{"emptyLinePlaceholder":131},[203,111875,111876],{"class":205,"line":1843},[203,111877,106513],{"class":318},[203,111879,111880],{"class":205,"line":1848},[203,111881,111882],{"class":318},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[203,111884,111885],{"class":205,"line":1853},[203,111886,111887],{"class":318},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[203,111889,111890],{"class":205,"line":1867},[203,111891,106523],{"class":318},[203,111893,111894],{"class":205,"line":1872},[203,111895,101435],{"class":318},[203,111897,111898],{"class":205,"line":2666},[203,111899,95756],{"class":318},[203,111901,111902],{"class":205,"line":2680},[203,111903,2489],{"emptyLinePlaceholder":131},[203,111905,111906],{"class":205,"line":2688},[203,111907,2489],{"emptyLinePlaceholder":131},[203,111909,111910,111912,111915,111918,111920],{"class":205,"line":2693},[203,111911,32005],{"class":209},[203,111913,111914],{"class":2052}," site_position",[203,111916,111917],{"class":213},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[203,111919,1389],{"class":262},[203,111921,111922],{"class":213},") -> np.ndarray:\n",[203,111924,111925,111927,111929],{"class":205,"line":2699},[203,111926,103458],{"class":213},[203,111928,259],{"class":209},[203,111930,111931],{"class":213}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[203,111933,111934,111936,111938,111940,111942],{"class":205,"line":2705},[203,111935,3190],{"class":209},[203,111937,103507],{"class":213},[203,111939,1124],{"class":209},[203,111941,4182],{"class":262},[203,111943,3828],{"class":213},[203,111945,111946,111948,111950,111952,111954,111957,111959,111961,111963,111965],{"class":205,"line":2710},[203,111947,103490],{"class":209},[203,111949,103493],{"class":262},[203,111951,214],{"class":213},[203,111953,266],{"class":209},[203,111955,111956],{"class":318},"\"site not found: ",[203,111958,1110],{"class":262},[203,111960,79868],{"class":213},[203,111962,1160],{"class":262},[203,111964,465],{"class":318},[203,111966,220],{"class":213},[203,111968,111969,111971],{"class":205,"line":8038},[203,111970,4179],{"class":209},[203,111972,111973],{"class":213}," data.site_xpos[site_id].copy()\n",[203,111975,111976],{"class":205,"line":8062},[203,111977,2489],{"emptyLinePlaceholder":131},[203,111979,111980],{"class":205,"line":8067},[203,111981,2489],{"emptyLinePlaceholder":131},[203,111983,111984,111986,111989],{"class":205,"line":8073},[203,111985,32005],{"class":209},[203,111987,111988],{"class":2052}," get_obs",[203,111990,111991],{"class":213},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[203,111993,111994,111997,111999,112002,112004],{"class":205,"line":8100},[203,111995,111996],{"class":213},"    tip ",[203,111998,259],{"class":209},[203,112000,112001],{"class":213}," site_position(model, data, ",[203,112003,111594],{"class":318},[203,112005,220],{"class":213},[203,112007,112008,112011,112013,112015,112018],{"class":205,"line":8105},[203,112009,112010],{"class":213},"    target ",[203,112012,259],{"class":209},[203,112014,112001],{"class":213},[203,112016,112017],{"class":318},"\"target\"",[203,112019,220],{"class":213},[203,112021,112022,112024],{"class":205,"line":8111},[203,112023,4179],{"class":209},[203,112025,112026],{"class":213}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[203,112028,112029],{"class":205,"line":8123},[203,112030,2489],{"emptyLinePlaceholder":131},[203,112032,112033],{"class":205,"line":8135},[203,112034,2489],{"emptyLinePlaceholder":131},[203,112036,112037,112039,112042,112045,112047],{"class":205,"line":8147},[203,112038,32005],{"class":209},[203,112040,112041],{"class":2052}," reward",[203,112043,112044],{"class":213},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[203,112046,253],{"class":262},[203,112048,3828],{"class":213},[203,112050,112051,112053,112055,112057,112059],{"class":205,"line":9806},[203,112052,111996],{"class":213},[203,112054,259],{"class":209},[203,112056,112001],{"class":213},[203,112058,111594],{"class":318},[203,112060,220],{"class":213},[203,112062,112063,112065,112067,112069,112071],{"class":205,"line":9831},[203,112064,112010],{"class":213},[203,112066,259],{"class":209},[203,112068,112001],{"class":213},[203,112070,112017],{"class":318},[203,112072,220],{"class":213},[203,112074,112075,112078,112080,112082,112084],{"class":205,"line":9854},[203,112076,112077],{"class":213},"    dist ",[203,112079,259],{"class":209},[203,112081,111659],{"class":213},[203,112083,746],{"class":209},[203,112085,111664],{"class":213},[203,112087,112088,112091,112093,112096,112098],{"class":205,"line":9878},[203,112089,112090],{"class":213},"    control_cost ",[203,112092,259],{"class":209},[203,112094,112095],{"class":262}," 0.01",[203,112097,6608],{"class":209},[203,112099,112100],{"class":213}," np.sum(np.square(data.ctrl))\n",[203,112102,112103,112105,112107,112109,112111,112113,112115],{"class":205,"line":9883},[203,112104,4179],{"class":209},[203,112106,109855],{"class":262},[203,112108,214],{"class":213},[203,112110,746],{"class":209},[203,112112,111654],{"class":213},[203,112114,746],{"class":209},[203,112116,112117],{"class":213}," control_cost)\n",[203,112119,112120],{"class":205,"line":9888},[203,112121,2489],{"emptyLinePlaceholder":131},[203,112123,112124],{"class":205,"line":9893},[203,112125,2489],{"emptyLinePlaceholder":131},[203,112127,112128,112130,112132,112134,112136],{"class":205,"line":9902},[203,112129,32005],{"class":209},[203,112131,2062],{"class":2052},[203,112133,101456],{"class":213},[203,112135,95744],{"class":262},[203,112137,3828],{"class":213},[203,112139,112140,112142,112144,112146,112148],{"class":205,"line":9907},[203,112141,101465],{"class":213},[203,112143,259],{"class":209},[203,112145,101470],{"class":213},[203,112147,101372],{"class":262},[203,112149,220],{"class":213},[203,112151,112152,112154,112156],{"class":205,"line":9913},[203,112153,101479],{"class":213},[203,112155,259],{"class":209},[203,112157,101484],{"class":213},[203,112159,112160,112162,112164],{"class":205,"line":9934},[203,112161,110211],{"class":213},[203,112163,259],{"class":209},[203,112165,104819],{"class":262},[203,112167,112168],{"class":205,"line":9940},[203,112169,2489],{"emptyLinePlaceholder":131},[203,112171,112172,112174,112176,112178,112180,112182,112184],{"class":205,"line":9954},[203,112173,3290],{"class":209},[203,112175,31674],{"class":213},[203,112177,26101],{"class":209},[203,112179,32501],{"class":262},[203,112181,214],{"class":213},[203,112183,65132],{"class":262},[203,112185,30844],{"class":213},[203,112187,112188],{"class":205,"line":9960},[203,112189,112190],{"class":213},"        mujoco.mj_forward(model, data)\n",[203,112192,112193,112196,112198,112200,112202],{"class":205,"line":9987},[203,112194,112195],{"class":213},"        tip ",[203,112197,259],{"class":209},[203,112199,112001],{"class":213},[203,112201,111594],{"class":318},[203,112203,220],{"class":213},[203,112205,112206,112209,112211,112213,112215],{"class":205,"line":9996},[203,112207,112208],{"class":213},"        target ",[203,112210,259],{"class":209},[203,112212,112001],{"class":213},[203,112214,112017],{"class":318},[203,112216,220],{"class":213},[203,112218,112219,112222,112224,112227,112229],{"class":205,"line":10002},[203,112220,112221],{"class":213},"        error ",[203,112223,259],{"class":209},[203,112225,112226],{"class":213}," target ",[203,112228,746],{"class":209},[203,112230,112231],{"class":213}," tip\n",[203,112233,112234],{"class":205,"line":10010},[203,112235,2489],{"emptyLinePlaceholder":131},[203,112237,112238,112240,112242,112244,112246,112249,112251,112253,112256,112258,112261,112263,112265,112267,112269],{"class":205,"line":10015},[203,112239,106675],{"class":213},[203,112241,405],{"class":262},[203,112243,4532],{"class":213},[203,112245,259],{"class":209},[203,112247,112248],{"class":213}," np.clip(",[203,112250,105318],{"class":262},[203,112252,6608],{"class":209},[203,112254,112255],{"class":213}," error[",[203,112257,291],{"class":262},[203,112259,112260],{"class":213},"], ",[203,112262,746],{"class":209},[203,112264,102461],{"class":262},[203,112266,12525],{"class":213},[203,112268,102461],{"class":262},[203,112270,220],{"class":213},[203,112272,112273,112275,112277,112279,112281,112283,112285,112287,112289,112291,112293,112295,112297,112299,112301],{"class":205,"line":16694},[203,112274,106675],{"class":213},[203,112276,431],{"class":262},[203,112278,4532],{"class":213},[203,112280,259],{"class":209},[203,112282,112248],{"class":213},[203,112284,105318],{"class":262},[203,112286,6608],{"class":209},[203,112288,112255],{"class":213},[203,112290,405],{"class":262},[203,112292,112260],{"class":213},[203,112294,746],{"class":209},[203,112296,102461],{"class":262},[203,112298,12525],{"class":213},[203,112300,102461],{"class":262},[203,112302,220],{"class":213},[203,112304,112305],{"class":205,"line":16700},[203,112306,2489],{"emptyLinePlaceholder":131},[203,112308,112309],{"class":205,"line":16723},[203,112310,101574],{"class":213},[203,112312,112313,112315,112317],{"class":205,"line":16729},[203,112314,110355],{"class":213},[203,112316,9567],{"class":209},[203,112318,112319],{"class":213}," reward(model, data)\n",[203,112321,112322],{"class":205,"line":16752},[203,112323,2489],{"emptyLinePlaceholder":131},[203,112325,112326,112328,112330,112332,112334,112336,112338],{"class":205,"line":16766},[203,112327,2586],{"class":209},[203,112329,31674],{"class":213},[203,112331,542],{"class":209},[203,112333,5844],{"class":262},[203,112335,101617],{"class":209},[203,112337,4182],{"class":262},[203,112339,3828],{"class":213},[203,112341,112342,112345,112347],{"class":205,"line":16786},[203,112343,112344],{"class":213},"            obs ",[203,112346,259],{"class":209},[203,112348,112349],{"class":213}," get_obs(model, data)\n",[203,112351,112352,112354,112356,112358],{"class":205,"line":16792},[203,112353,34708],{"class":262},[203,112355,214],{"class":213},[203,112357,110389],{"class":318},[203,112359,112360],{"class":213},", step)\n",[203,112362,112363,112365,112367,112370,112373,112375],{"class":205,"line":16803},[203,112364,34708],{"class":262},[203,112366,214],{"class":213},[203,112368,112369],{"class":318},"\"  tip:\"",[203,112371,112372],{"class":213},", np.round(tip, ",[203,112374,285],{"class":262},[203,112376,30555],{"class":213},[203,112378,112379,112381,112383,112386,112389,112391],{"class":205,"line":16826},[203,112380,34708],{"class":262},[203,112382,214],{"class":213},[203,112384,112385],{"class":318},"\"  target:\"",[203,112387,112388],{"class":213},", np.round(target, ",[203,112390,285],{"class":262},[203,112392,30555],{"class":213},[203,112394,112395,112397,112399,112402,112405,112407],{"class":205,"line":16848},[203,112396,34708],{"class":262},[203,112398,214],{"class":213},[203,112400,112401],{"class":318},"\"  ctrl:\"",[203,112403,112404],{"class":213},", np.round(data.ctrl.copy(), ",[203,112406,285],{"class":262},[203,112408,30555],{"class":213},[203,112410,112411,112413,112415,112418,112421,112423],{"class":205,"line":16853},[203,112412,34708],{"class":262},[203,112414,214],{"class":213},[203,112416,112417],{"class":318},"\"  obs_dim:\"",[203,112419,112420],{"class":213},", obs.shape[",[203,112422,405],{"class":262},[203,112424,4746],{"class":213},[203,112426,112427],{"class":205,"line":16859},[203,112428,2489],{"emptyLinePlaceholder":131},[203,112430,112431,112433,112435,112437,112439,112441,112443,112445],{"class":205,"line":16873},[203,112432,31357],{"class":262},[203,112434,214],{"class":213},[203,112436,110434],{"class":318},[203,112438,12525],{"class":213},[203,112440,32076],{"class":262},[203,112442,110441],{"class":213},[203,112444,285],{"class":262},[203,112446,30555],{"class":213},[203,112448,112449,112451,112453,112456,112459,112461,112463,112465],{"class":205,"line":16886},[203,112450,31357],{"class":262},[203,112452,214],{"class":213},[203,112454,112455],{"class":318},"\"final tip:\"",[203,112457,112458],{"class":213},", np.round(site_position(model, data, ",[203,112460,111594],{"class":318},[203,112462,110403],{"class":213},[203,112464,285],{"class":262},[203,112466,30555],{"class":213},[203,112468,112469,112471,112473,112476,112478,112480,112482,112484],{"class":205,"line":16891},[203,112470,31357],{"class":262},[203,112472,214],{"class":213},[203,112474,112475],{"class":318},"\"target:\"",[203,112477,112458],{"class":213},[203,112479,112017],{"class":318},[203,112481,110403],{"class":213},[203,112483,285],{"class":262},[203,112485,30555],{"class":213},[203,112487,112488],{"class":205,"line":16905},[203,112489,2489],{"emptyLinePlaceholder":131},[203,112491,112492],{"class":205,"line":16910},[203,112493,2489],{"emptyLinePlaceholder":131},[203,112495,112496,112498,112500,112502,112504],{"class":205,"line":16916},[203,112497,1620],{"class":209},[203,112499,31278],{"class":262},[203,112501,101617],{"class":209},[203,112503,101620],{"class":318},[203,112505,3828],{"class":213},[203,112507,112508],{"class":205,"line":16921},[203,112509,101627],{"class":213},[19,112511,103628],{},[194,112513,112515],{"className":23913,"code":112514,"language":23915,"meta":27,"style":27},"touch ch7_reacher.py\n",[200,112516,112517],{"__ignoreMap":27},[203,112518,112519,112521],{"class":205,"line":206},[203,112520,101341],{"class":2052},[203,112522,112523],{"class":318}," ch7_reacher.py\n",[19,112525,110502],{},[194,112527,112529],{"className":23913,"code":112528,"language":23915,"meta":27,"style":27},"python ch7_reacher.py\n",[200,112530,112531],{"__ignoreMap":27},[203,112532,112533,112535],{"class":205,"line":206},[203,112534,30438],{"class":2052},[203,112536,112523],{"class":318},[174,112538,101630],{"id":101630},[19,112540,112541],{},"读取 site 坐标：",[194,112543,112545],{"className":30436,"code":112544,"language":30438,"meta":27,"style":27},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[200,112546,112547],{"__ignoreMap":27},[203,112548,112549,112551,112553,112555,112557],{"class":205,"line":206},[203,112550,32005],{"class":209},[203,112552,111914],{"class":2052},[203,112554,111917],{"class":213},[203,112556,1389],{"class":262},[203,112558,111922],{"class":213},[19,112560,112561],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,112563,110518],{},[194,112565,112567],{"className":30436,"code":112566,"language":30438,"meta":27,"style":27},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[200,112568,112569],{"__ignoreMap":27},[203,112570,112571,112573],{"class":205,"line":206},[203,112572,17136],{"class":209},[203,112574,112026],{"class":213},[19,112576,112577],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,112579,109843],{},[194,112581,112583],{"className":30436,"code":112582,"language":30438,"meta":27,"style":27},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[200,112584,112585,112597,112610],{"__ignoreMap":27},[203,112586,112587,112589,112591,112593,112595],{"class":205,"line":206},[203,112588,111654],{"class":213},[203,112590,259],{"class":209},[203,112592,111659],{"class":213},[203,112594,746],{"class":209},[203,112596,111664],{"class":213},[203,112598,112599,112602,112604,112606,112608],{"class":205,"line":124},[203,112600,112601],{"class":213},"control_cost ",[203,112603,259],{"class":209},[203,112605,112095],{"class":262},[203,112607,6608],{"class":209},[203,112609,112100],{"class":213},[203,112611,112612,112614,112616,112618,112620,112622,112624],{"class":205,"line":1269},[203,112613,17136],{"class":209},[203,112615,109855],{"class":262},[203,112617,214],{"class":213},[203,112619,746],{"class":209},[203,112621,111654],{"class":213},[203,112623,746],{"class":209},[203,112625,112117],{"class":213},[19,112627,112628],{},"奖励由两部分组成：",[157,112630,112631,112636],{},[160,112632,112633,112635],{},[200,112634,111681],{},"：末端离目标越远，奖励越低。",[160,112637,112638,112641],{},[200,112639,112640],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,112643,112644],{},"简单控制器：",[194,112646,112648],{"className":30436,"code":112647,"language":30438,"meta":27,"style":27},"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",[200,112649,112650,112663,112695],{"__ignoreMap":27},[203,112651,112652,112655,112657,112659,112661],{"class":205,"line":206},[203,112653,112654],{"class":213},"error ",[203,112656,259],{"class":209},[203,112658,112226],{"class":213},[203,112660,746],{"class":209},[203,112662,112231],{"class":213},[203,112664,112665,112667,112669,112671,112673,112675,112677,112679,112681,112683,112685,112687,112689,112691,112693],{"class":205,"line":124},[203,112666,105929],{"class":213},[203,112668,405],{"class":262},[203,112670,4532],{"class":213},[203,112672,259],{"class":209},[203,112674,112248],{"class":213},[203,112676,105318],{"class":262},[203,112678,6608],{"class":209},[203,112680,112255],{"class":213},[203,112682,291],{"class":262},[203,112684,112260],{"class":213},[203,112686,746],{"class":209},[203,112688,102461],{"class":262},[203,112690,12525],{"class":213},[203,112692,102461],{"class":262},[203,112694,220],{"class":213},[203,112696,112697,112699,112701,112703,112705,112707,112709,112711,112713,112715,112717,112719,112721,112723,112725],{"class":205,"line":1269},[203,112698,105929],{"class":213},[203,112700,431],{"class":262},[203,112702,4532],{"class":213},[203,112704,259],{"class":209},[203,112706,112248],{"class":213},[203,112708,105318],{"class":262},[203,112710,6608],{"class":209},[203,112712,112255],{"class":213},[203,112714,405],{"class":262},[203,112716,112260],{"class":213},[203,112718,746],{"class":209},[203,112720,102461],{"class":262},[203,112722,12525],{"class":213},[203,112724,102461],{"class":262},[203,112726,220],{"class":213},[19,112728,112729],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[174,112731,101766],{"id":101766},[194,112733,112734],{"className":30436,"code":112544,"language":30438,"meta":27,"style":27},[200,112735,112736],{"__ignoreMap":27},[203,112737,112738,112740,112742,112744,112746],{"class":205,"line":206},[203,112739,32005],{"class":209},[203,112741,111914],{"class":2052},[203,112743,111917],{"class":213},[203,112745,1389],{"class":262},[203,112747,111922],{"class":213},[19,112749,112750,112751,112753,112754,82597,112756,28443],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[200,112752,79868],{}," 是 site 的名字，比如 ",[200,112755,111594],{},[200,112757,112017],{},[194,112759,112761],{"className":30436,"code":112760,"language":30438,"meta":27,"style":27},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[200,112762,112763],{"__ignoreMap":27},[203,112764,112765,112767,112769],{"class":205,"line":206},[203,112766,103692],{"class":213},[203,112768,259],{"class":209},[203,112770,111931],{"class":213},[19,112772,112773],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[194,112775,112777],{"className":30436,"code":112776,"language":30438,"meta":27,"style":27},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[200,112778,112779,112791],{"__ignoreMap":27},[203,112780,112781,112783,112785,112787,112789],{"class":205,"line":206},[203,112782,1620],{"class":209},[203,112784,103507],{"class":213},[203,112786,1124],{"class":209},[203,112788,4182],{"class":262},[203,112790,3828],{"class":213},[203,112792,112793,112795,112797,112799,112801,112803,112805,112807,112809,112811],{"class":205,"line":124},[203,112794,103953],{"class":209},[203,112796,103493],{"class":262},[203,112798,214],{"class":213},[203,112800,266],{"class":209},[203,112802,111956],{"class":318},[203,112804,1110],{"class":262},[203,112806,79868],{"class":213},[203,112808,1160],{"class":262},[203,112810,465],{"class":318},[203,112812,220],{"class":213},[19,112814,112815,112816,112819,112820,112822],{},"如果 site 没找到，就主动报错。",[200,112817,112818],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[200,112821,79868],{}," 的值放进字符串里。",[194,112824,112826],{"className":30436,"code":112825,"language":30438,"meta":27,"style":27},"return data.site_xpos[site_id].copy()\n",[200,112827,112828],{"__ignoreMap":27},[203,112829,112830,112832],{"class":205,"line":206},[203,112831,17136],{"class":209},[203,112833,111973],{"class":213},[19,112835,112836,112837,112839,112840,112843],{},"返回这个 site 的世界坐标。",[200,112838,103738],{}," 里的每一行都是一个 site 的 ",[200,112841,112842],{},"(x, y, z)"," 坐标。",[194,112845,112847],{"className":30436,"code":112846,"language":30438,"meta":27,"style":27},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[200,112848,112849],{"__ignoreMap":27},[203,112850,112851,112853,112855],{"class":205,"line":206},[203,112852,32005],{"class":209},[203,112854,111988],{"class":2052},[203,112856,111991],{"class":213},[19,112858,112859],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[194,112861,112863],{"className":30436,"code":112862,"language":30438,"meta":27,"style":27},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[200,112864,112865,112877],{"__ignoreMap":27},[203,112866,112867,112869,112871,112873,112875],{"class":205,"line":206},[203,112868,111626],{"class":213},[203,112870,259],{"class":209},[203,112872,112001],{"class":213},[203,112874,111594],{"class":318},[203,112876,220],{"class":213},[203,112878,112879,112881,112883,112885,112887],{"class":205,"line":124},[203,112880,111636],{"class":213},[203,112882,259],{"class":209},[203,112884,112001],{"class":213},[203,112886,112017],{"class":318},[203,112888,220],{"class":213},[19,112890,112891],{},"分别读取末端点和目标点的世界坐标。",[194,112893,112894],{"className":30436,"code":112566,"language":30438,"meta":27,"style":27},[200,112895,112896],{"__ignoreMap":27},[203,112897,112898,112900],{"class":205,"line":206},[203,112899,17136],{"class":209},[203,112901,112026],{"class":213},[19,112903,112904],{},"把四部分拼成一个观测数组：",[194,112906,112909],{"className":112907,"code":112908,"language":5277,"meta":27},[5275],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[200,112910,112908],{"__ignoreMap":27},[194,112912,112914],{"className":30436,"code":112913,"language":30438,"meta":27,"style":27},"dist = np.linalg.norm(tip - target)\n",[200,112915,112916],{"__ignoreMap":27},[203,112917,112918,112920,112922,112924,112926],{"class":205,"line":206},[203,112919,111654],{"class":213},[203,112921,259],{"class":209},[203,112923,111659],{"class":213},[203,112925,746],{"class":209},[203,112927,111664],{"class":213},[19,112929,112930,112931,112934,112935,112938],{},"计算 tip 到 target 的距离。",[200,112932,112933],{},"tip - target"," 得到一个三维向量，",[200,112936,112937],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,112940,14723],{},[194,112942,112945],{"className":112943,"code":112944,"language":5277,"meta":27},[5275],"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",[200,112946,112944],{"__ignoreMap":27},[194,112948,112950],{"className":30436,"code":112949,"language":30438,"meta":27,"style":27},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[200,112951,112952],{"__ignoreMap":27},[203,112953,112954,112956,112958,112960,112962],{"class":205,"line":206},[203,112955,112601],{"class":213},[203,112957,259],{"class":209},[203,112959,112095],{"class":262},[203,112961,6608],{"class":209},[203,112963,112100],{"class":213},[19,112965,112966,112967,112970,112971,112974],{},"计算动作惩罚。",[200,112968,112969],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[200,112972,112973],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[194,112976,112978],{"className":30436,"code":112977,"language":30438,"meta":27,"style":27},"return float(-dist - control_cost)\n",[200,112979,112980],{"__ignoreMap":27},[203,112981,112982,112984,112986,112988,112990,112992,112994],{"class":205,"line":206},[203,112983,17136],{"class":209},[203,112985,109855],{"class":262},[203,112987,214],{"class":213},[203,112989,746],{"class":209},[203,112991,111654],{"class":213},[203,112993,746],{"class":209},[203,112995,112117],{"class":213},[19,112997,112998],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[194,113000,113001],{"className":30436,"code":110861,"language":30438,"meta":27,"style":27},[200,113002,113003],{"__ignoreMap":27},[203,113004,113005,113007,113009],{"class":205,"line":206},[203,113006,110868],{"class":213},[203,113008,259],{"class":209},[203,113010,104819],{"class":262},[19,113012,113013],{},"累计奖励变量，记录整个运行过程的总分。",[194,113015,113017],{"className":30436,"code":113016,"language":30438,"meta":27,"style":27},"for step in range(500):\n",[200,113018,113019],{"__ignoreMap":27},[203,113020,113021,113023,113025,113027,113029,113031,113033],{"class":205,"line":206},[203,113022,3114],{"class":209},[203,113024,31674],{"class":213},[203,113026,26101],{"class":209},[203,113028,32501],{"class":262},[203,113030,214],{"class":213},[203,113032,65132],{"class":262},[203,113034,30844],{"class":213},[19,113036,113037],{},"运行 500 个控制步。",[194,113039,113040],{"className":30436,"code":104601,"language":30438,"meta":27,"style":27},[200,113041,113042],{"__ignoreMap":27},[203,113043,113044],{"class":205,"line":206},[203,113045,104601],{"class":213},[19,113047,113048,113049,101076,113051,113053],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[200,113050,103289],{},[200,113052,103292],{}," 是当前状态下的坐标。",[194,113055,113057],{"className":30436,"code":113056,"language":30438,"meta":27,"style":27},"error = target - tip\n",[200,113058,113059],{"__ignoreMap":27},[203,113060,113061,113063,113065,113067,113069],{"class":205,"line":206},[203,113062,112654],{"class":213},[203,113064,259],{"class":209},[203,113066,112226],{"class":213},[203,113068,746],{"class":209},[203,113070,112231],{"class":213},[19,113072,113073],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[194,113075,113077],{"className":30436,"code":113076,"language":30438,"meta":27,"style":27},"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",[200,113078,113079,113111],{"__ignoreMap":27},[203,113080,113081,113083,113085,113087,113089,113091,113093,113095,113097,113099,113101,113103,113105,113107,113109],{"class":205,"line":206},[203,113082,105929],{"class":213},[203,113084,405],{"class":262},[203,113086,4532],{"class":213},[203,113088,259],{"class":209},[203,113090,112248],{"class":213},[203,113092,105318],{"class":262},[203,113094,6608],{"class":209},[203,113096,112255],{"class":213},[203,113098,291],{"class":262},[203,113100,112260],{"class":213},[203,113102,746],{"class":209},[203,113104,102461],{"class":262},[203,113106,12525],{"class":213},[203,113108,102461],{"class":262},[203,113110,220],{"class":213},[203,113112,113113,113115,113117,113119,113121,113123,113125,113127,113129,113131,113133,113135,113137,113139,113141],{"class":205,"line":124},[203,113114,105929],{"class":213},[203,113116,431],{"class":262},[203,113118,4532],{"class":213},[203,113120,259],{"class":209},[203,113122,112248],{"class":213},[203,113124,105318],{"class":262},[203,113126,6608],{"class":209},[203,113128,112255],{"class":213},[203,113130,405],{"class":262},[203,113132,112260],{"class":213},[203,113134,746],{"class":209},[203,113136,102461],{"class":262},[203,113138,12525],{"class":213},[203,113140,102461],{"class":262},[203,113142,220],{"class":213},[19,113144,113145,113146,113149],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[200,113147,113148],{},"error -> ctrl -> step"," 的流程。",[194,113151,113152],{"className":30436,"code":104563,"language":30438,"meta":27,"style":27},[200,113153,113154],{"__ignoreMap":27},[203,113155,113156],{"class":205,"line":206},[203,113157,104563],{"class":213},[19,113159,113160],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[194,113162,113164],{"className":30436,"code":113163,"language":30438,"meta":27,"style":27},"obs = get_obs(model, data)\n",[200,113165,113166],{"__ignoreMap":27},[203,113167,113168,113170,113172],{"class":205,"line":206},[203,113169,110912],{"class":213},[203,113171,259],{"class":209},[203,113173,112349],{"class":213},[19,113175,113176,113177,113180],{},"读取最新观测。后面打印 ",[200,113178,113179],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113182,102374],{"id":102373},[19,113184,113185],{},"观测维度为:",[194,113187,113190],{"className":113188,"code":113189,"language":5277,"meta":27},[5275],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[200,113191,113189],{"__ignoreMap":27},[19,113193,113194],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113196,113197],{},"程序每 100 步打印：",[194,113199,113202],{"className":113200,"code":113201,"language":5277,"meta":27},[5275],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[200,113203,113201],{"__ignoreMap":27},[19,113205,113206,113207,113209],{},"如果控制有效，你应该看到最终 ",[200,113208,103289],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113211,102406],{"id":102405},[157,113213,113214,113217,113220,113226,113232,113239,113249],{},[160,113215,113216],{},"修改目标点位置。",[160,113218,113219],{},"重新运行，观察最终 tip 是否变化。",[160,113221,113222,113223,113225],{},"把 gravity 改成 ",[200,113224,102647],{},"，观察控制是否变差。",[160,113227,111239,113228,111243,113230,28443],{},[200,113229,102216],{},[200,113231,291],{},[160,113233,102469,113234,102472,113236,113238],{},[200,113235,110654],{},[200,113237,107365],{},"，观察机械臂是否更难移动。",[160,113240,102469,113241,82588,113243,102472,113245,113248],{},[200,113242,103292],{},[200,113244,104204],{},[200,113246,113247],{},"0.2 0 0.6","，观察 reward 和 final tip。",[160,113250,113251],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113253,102511],{"id":102510},[174,113255,113257],{"id":113256},"site-not-found",[200,113258,113259],{},"site not found",[19,113261,113262,113263,101076,113266,28443],{},"检查 XML 中是否有 ",[200,113264,113265],{},"site name=\"tip\"",[200,113267,113268],{},"site name=\"target\"",[174,113270,113271],{"id":113271},"机械臂完全不动",[19,113273,102581],{},[157,113275,113276,113281,113284,113289],{},[160,113277,113278,113280],{},[200,113279,102216],{}," 是否为 2",[160,113282,113283],{},"actuator 是否引用正确 joint",[160,113285,113286,113288],{},[200,113287,101134],{}," 是否被赋值",[160,113290,113291,113292],{},"是否执行了 ",[200,113293,100743],{},[174,113295,113296],{"id":113296},"控制效果不好",[19,113298,113299],{},"正常。本章重点不是控制器最优，而是任务结构:",[194,113301,113304],{"className":113302,"code":113303,"language":5277,"meta":27},[5275],"obs → action → mj_step → reward → next_obs\n",[200,113305,113303],{"__ignoreMap":27},[174,113307,113309],{"id":113308},"tip-坐标不变化","tip 坐标不变化",[19,113311,102633],{},[157,113313,113314,113319,113327,113336],{},[160,113315,113316,113317,28443],{},"是否每步调用了 ",[200,113318,100743],{},[160,113320,113321,113322,101076,113324,28443],{},"是否写入了 ",[200,113323,106184],{},[200,113325,113326],{},"data.ctrl[1]",[160,113328,113329,113330,426,113333,28443],{},"actuator 是否正确引用 ",[200,113331,113332],{},"joint1",[200,113334,113335],{},"joint2",[160,113337,113338],{},"控制输入是否太小。",[174,113340,113341],{"id":113341},"目标点不会动",[19,113343,113344],{},"本章的 target 是固定 site：",[194,113346,113348],{"className":53125,"code":113347,"language":53127,"meta":27,"style":27},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[200,113349,113350],{"__ignoreMap":27},[203,113351,113352,113354,113356,113358,113360,113362,113364,113366,113369],{"class":205,"line":206},[203,113353,1124],{"class":213},[203,113355,103268],{"class":51358},[203,113357,15010],{"class":2052},[203,113359,259],{"class":213},[203,113361,112017],{"class":318},[203,113363,101164],{"class":2052},[203,113365,259],{"class":213},[203,113367,113368],{"class":318},"\"0.5 0 0.4\"",[203,113370,113371],{"class":213}," ...\u002F>\n",[19,113373,113374,113375,113377],{},"它直接挂在 ",[200,113376,101899],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[174,113379,113380],{"id":113380},"机械臂不像真实机械臂",[19,113382,113383],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113385,102665],{"id":102664},[19,113387,113388],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113390,113391],{},"核心公式：",[194,113393,113396],{"className":113394,"code":113395,"language":5277,"meta":27},[5275],"distance = ||tip - target||\nreward = -distance - action_cost\n",[200,113397,113395],{"__ignoreMap":27},[19,113399,113400],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5216,113402,113403],{},"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":27,"searchDepth":124,"depth":124,"links":113405},[113406,113407,113408,113413,113417,113418,113419,113427],{"id":100704,"depth":124,"text":100705},{"id":100827,"depth":124,"text":100828},{"id":101102,"depth":124,"text":101103,"children":113409},[113410,113411,113412],{"id":111609,"depth":1269,"text":111610},{"id":111685,"depth":1269,"text":111685},{"id":111715,"depth":1269,"text":111716},{"id":101310,"depth":124,"text":101311,"children":113414},[113415,113416],{"id":101630,"depth":1269,"text":101630},{"id":101766,"depth":1269,"text":101766},{"id":102373,"depth":124,"text":102374},{"id":102405,"depth":124,"text":102406},{"id":102510,"depth":124,"text":102511,"children":113420},[113421,113422,113423,113424,113425,113426],{"id":113256,"depth":1269,"text":113259},{"id":113271,"depth":1269,"text":113271},{"id":113296,"depth":1269,"text":113296},{"id":113308,"depth":1269,"text":113309},{"id":113341,"depth":1269,"text":113341},{"id":113380,"depth":1269,"text":113380},{"id":102664,"depth":124,"text":102665},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111413,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113434,"title":113435,"body":113436,"description":27,"extension":129,"meta":116898,"navigation":131,"path":116899,"seo":116900,"stem":116901,"__hash__":116902},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113437,"toc":116869},[113438,113441,113443,113446,113449,113474,113477,113483,113486,113492,113494,113496,113520,113522,113540,113542,113585,113587,113614,113616,113619,113671,113674,113680,113689,113692,113730,113733,113772,113775,113783,113790,113793,113799,113801,113855,113862,113907,113910,113914,113930,113940,113942,115203,115205,115217,115219,115230,115232,115235,115256,115259,115262,115295,115301,115304,115337,115340,115343,115384,115389,115403,115406,115419,115424,115447,115449,115464,115474,115489,115496,115516,115531,115549,115552,115569,115577,115593,115599,115631,115644,115676,115686,115721,115735,115781,115795,115837,115848,115861,115867,115900,115903,115930,115940,115980,115990,116007,116014,116032,116035,116076,116089,116104,116107,116130,116133,116145,116148,116167,116172,116193,116196,116211,116214,116248,116260,116275,116278,116303,116306,116325,116328,116360,116363,116387,116393,116423,116430,116443,116446,116448,116450,116456,116459,116462,116474,116477,116479,116533,116535,116539,116545,116554,116557,116564,116566,116589,116592,116596,116598,116616,116622,116624,116657,116660,116666,116670,116673,116693,116698,116702,116709,116729,116734,116738,116741,116761,116764,116850,116854,116857,116863,116866],[10,113439,113435],{"id":113440},"_8gymnasium-风格强化学习接口基础",[14,113442,100705],{"id":100704},[19,113444,113445],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113447,113448],{},"你将实现:",[194,113450,113452],{"className":30436,"code":113451,"language":30438,"meta":27,"style":27},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[200,113453,113454,113464],{"__ignoreMap":27},[203,113455,113456,113459,113461],{"class":205,"line":206},[203,113457,113458],{"class":213},"obs, info ",[203,113460,259],{"class":209},[203,113462,113463],{"class":213}," env.reset()\n",[203,113465,113466,113469,113471],{"class":205,"line":124},[203,113467,113468],{"class":213},"obs, reward, terminated, truncated, info ",[203,113470,259],{"class":209},[203,113472,113473],{"class":213}," env.step(action)\n",[19,113475,113476],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113478,113479,113480,113482],{},"前面章节的代码都是“脚本式”的：在 ",[200,113481,102353],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113484,113485],{},"可以先记住 Gymnasium 环境的核心交互：",[194,113487,113490],{"className":113488,"code":113489,"language":5277,"meta":27},[5275],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[200,113491,113489],{"__ignoreMap":27},[14,113493,100828],{"id":100827},[19,113495,100831],{},[194,113497,113498],{"className":23913,"code":104446,"language":23915,"meta":27,"style":27},[200,113499,113500],{"__ignoreMap":27},[203,113501,113502,113504,113506,113508,113510,113512,113514,113516,113518],{"class":205,"line":206},[203,113503,24634],{"class":2052},[203,113505,26373],{"class":318},[203,113507,23925],{"class":318},[203,113509,26458],{"class":262},[203,113511,104461],{"class":318},[203,113513,100856],{"class":318},[203,113515,102559],{"class":318},[203,113517,100872],{"class":318},[203,113519,104470],{"class":318},[19,113521,102877],{},[194,113523,113525],{"className":23913,"code":113524,"language":23915,"meta":27,"style":27},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[200,113526,113527],{"__ignoreMap":27},[203,113528,113529,113531,113533,113535,113537],{"class":205,"line":206},[203,113530,23922],{"class":2052},[203,113532,23925],{"class":318},[203,113534,100988],{"class":318},[203,113536,107769],{"class":318},[203,113538,113539],{"class":318}," gymnasium\n",[19,113541,102894],{},[194,113543,113545],{"className":23913,"code":113544,"language":23915,"meta":27,"style":27},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[200,113546,113547,113564,113573],{"__ignoreMap":27},[203,113548,113549,113551,113553,113555,113558,113560,113562],{"class":205,"line":206},[203,113550,30388],{"class":2052},[203,113552,29234],{"class":318},[203,113554,25173],{"class":262},[203,113556,113557],{"class":318}," mujoco-gym-api",[203,113559,101033],{"class":318},[203,113561,101036],{"class":262},[203,113563,101039],{"class":262},[203,113565,113566,113568,113570],{"class":205,"line":124},[203,113567,30388],{"class":2052},[203,113569,101046],{"class":318},[203,113571,113572],{"class":318}," mujoco-gym-api\n",[203,113574,113575,113577,113579,113581,113583],{"class":205,"line":1269},[203,113576,23922],{"class":2052},[203,113578,23925],{"class":318},[203,113580,100988],{"class":318},[203,113582,107769],{"class":318},[203,113584,113539],{"class":318},[19,113586,101062],{},[157,113588,113589,113599,113602,113608],{},[160,113590,113591,113592,113595,113596,28443],{},"本章使用 ",[200,113593,113594],{},"gymnasium","，不是旧版 ",[200,113597,113598],{},"gym",[160,113600,113601],{},"Gymnasium API 与旧 Gym API 有差异。",[160,113603,113604,113605,28443],{},"旧 Gym 常见返回值是 4 个: ",[200,113606,113607],{},"obs, reward, done, info",[160,113609,113610,113611,28443],{},"Gymnasium 返回值是 5 个: ",[200,113612,113613],{},"obs, reward, terminated, truncated, info",[14,113615,101103],{"id":101102},[19,113617,113618],{},"强化学习环境接口包含:",[351,113620,113621,113630],{},[354,113622,113623],{},[357,113624,113625,113628],{},[360,113626,113627],{"align":23827},"方法",[360,113629,102754],{"align":23827},[398,113631,113632,113642,113652,113662],{},[357,113633,113634,113639],{},[403,113635,113636],{"align":23827},[200,113637,113638],{},"reset()",[403,113640,113641],{"align":23827},"重置环境",[357,113643,113644,113649],{},[403,113645,113646],{"align":23827},[200,113647,113648],{},"step(action)",[403,113650,113651],{"align":23827},"执行动作",[357,113653,113654,113659],{},[403,113655,113656],{"align":23827},[200,113657,113658],{},"observation_space",[403,113660,113661],{"align":23827},"观测空间",[357,113663,113664,113669],{},[403,113665,113666],{"align":23827},[200,113667,113668],{},"action_space",[403,113670,23745],{"align":23827},[19,113672,113673],{},"一个最小环境需要完成:",[194,113675,113678],{"className":113676,"code":113677,"language":5277,"meta":27},[5275],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[200,113679,113677],{"__ignoreMap":27},[174,113681,113683,101076,113686,104696],{"id":113682},"terminated-和-truncated-的区别",[200,113684,113685],{},"terminated",[200,113687,113688],{},"truncated",[19,113690,113691],{},"Gymnasium 把“结束”拆成两个概念：",[351,113693,113694,113704],{},[354,113695,113696],{},[357,113697,113698,113700,113702],{},[360,113699,104632],{"align":23827},[360,113701,100758],{"align":23827},[360,113703,21277],{"align":23827},[398,113705,113706,113718],{},[357,113707,113708,113712,113715],{},[403,113709,113710],{"align":23827},[200,113711,113685],{},[403,113713,113714],{"align":23827},"任务自然结束",[403,113716,113717],{"align":23827},"机械臂到达目标、机器人摔倒",[357,113719,113720,113724,113727],{},[403,113721,113722],{"align":23827},[200,113723,113688],{},[403,113725,113726],{"align":23827},"因外部限制截断",[403,113728,113729],{"align":23827},"达到最大步数、时间限制",[19,113731,113732],{},"本章中：",[194,113734,113736],{"className":30436,"code":113735,"language":30438,"meta":27,"style":27},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[200,113737,113738,113753],{"__ignoreMap":27},[203,113739,113740,113743,113745,113748,113750],{"class":205,"line":206},[203,113741,113742],{"class":213},"terminated ",[203,113744,259],{"class":209},[203,113746,113747],{"class":213}," dist ",[203,113749,1124],{"class":209},[203,113751,113752],{"class":262}," 0.05\n",[203,113754,113755,113758,113760,113762,113765,113767,113769],{"class":205,"line":124},[203,113756,113757],{"class":213},"truncated ",[203,113759,259],{"class":209},[203,113761,38931],{"class":262},[203,113763,113764],{"class":213},".steps ",[203,113766,1799],{"class":209},[203,113768,38931],{"class":262},[203,113770,113771],{"class":213},".max_steps\n",[19,113773,113774],{},"也就是：",[157,113776,113777,113780],{},[160,113778,113779],{},"末端距离目标小于 0.05，任务成功结束。",[160,113781,113782],{},"步数超过上限，episode 被截断。",[174,113784,113786,101076,113788],{"id":113785},"observation_space-和-action_space",[200,113787,113658],{},[200,113789,113668],{},[19,113791,113792],{},"这两个对象告诉算法：",[194,113794,113797],{"className":113795,"code":113796,"language":5277,"meta":27},[5275],"观测长什么样\n动作允许多大\n",[200,113798,113796],{"__ignoreMap":27},[19,113800,14723],{},[194,113802,113804],{"className":30436,"code":113803,"language":30438,"meta":27,"style":27},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[200,113805,113806],{"__ignoreMap":27},[203,113807,113808,113810,113813,113815,113818,113821,113824,113826,113828,113831,113833,113835,113837,113839,113841,113843,113845,113848,113850,113852],{"class":205,"line":206},[203,113809,30881],{"class":262},[203,113811,113812],{"class":213},".action_space ",[203,113814,259],{"class":209},[203,113816,113817],{"class":213}," spaces.Box(",[203,113819,113820],{"class":5306},"low",[203,113822,113823],{"class":209},"=-",[203,113825,102461],{"class":262},[203,113827,12525],{"class":213},[203,113829,113830],{"class":5306},"high",[203,113832,259],{"class":209},[203,113834,102461],{"class":262},[203,113836,12525],{"class":213},[203,113838,96021],{"class":5306},[203,113840,259],{"class":209},[203,113842,214],{"class":213},[203,113844,291],{"class":262},[203,113846,113847],{"class":213},",), ",[203,113849,93558],{"class":5306},[203,113851,259],{"class":209},[203,113853,113854],{"class":213},"np.float32)\n",[19,113856,113857,113858,113861],{},"表示动作是 2 维数组，每个值都在 ",[200,113859,113860],{},"[-1, 1]"," 范围内。",[194,113863,113865],{"className":30436,"code":113864,"language":30438,"meta":27,"style":27},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[200,113866,113867],{"__ignoreMap":27},[203,113868,113869,113871,113874,113876,113878,113880,113882,113885,113887,113889,113891,113893,113895,113897,113899,113901,113903,113905],{"class":205,"line":206},[203,113870,30881],{"class":262},[203,113872,113873],{"class":213},".observation_space ",[203,113875,259],{"class":209},[203,113877,113817],{"class":213},[203,113879,113820],{"class":5306},[203,113881,113823],{"class":209},[203,113883,113884],{"class":213},"np.inf, ",[203,113886,113830],{"class":5306},[203,113888,259],{"class":209},[203,113890,113884],{"class":213},[203,113892,96021],{"class":5306},[203,113894,259],{"class":209},[203,113896,214],{"class":213},[203,113898,660],{"class":262},[203,113900,113847],{"class":213},[203,113902,93558],{"class":5306},[203,113904,259],{"class":209},[203,113906,113854],{"class":213},[19,113908,113909],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[174,113911,113913],{"id":113912},"frame_skip-是什么","frame_skip 是什么",[194,113915,113917],{"className":30436,"code":113916,"language":30438,"meta":27,"style":27},"self.frame_skip = 5\n",[200,113918,113919],{"__ignoreMap":27},[203,113920,113921,113923,113926,113928],{"class":205,"line":206},[203,113922,30881],{"class":262},[203,113924,113925],{"class":213},".frame_skip ",[203,113927,259],{"class":209},[203,113929,54485],{"class":262},[19,113931,113932,113933,113936,113937,113939],{},"表示外部调用一次 ",[200,113934,113935],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[200,113938,101273],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,113941,101311],{"id":101310},[194,113943,113945],{"className":30436,"code":113944,"language":30438,"meta":27,"style":27},"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",[200,113946,113947,113959,113965,113975,113986,113990,113994,114002,114007,114011,114015,114019,114023,114027,114031,114035,114040,114044,114048,114052,114057,114061,114065,114069,114073,114077,114081,114085,114089,114093,114097,114101,114105,114109,114127,114142,114146,114159,114169,114184,114201,114205,114226,114245,114270,114284,114288,114298,114310,114320,114324,114366,114404,114408,114418,114434,114449,114468,114475,114479,114492,114507,114522,114535,114554,114570,114574,114615,114630,114645,114649,114688,114699,114712,114716,114726,114735,114739,114749,114764,114782,114786,114797,114814,114827,114831,114841,114845,114856,114867,114871,114885,114899,114915,114919,114932,114949,114964,114971,114975,114979,114991,115001,115019,115031,115043,115047,115055,115071,115080,115089,115097,115139,115152,115157,115161,115179,115183,115187,115199],{"__ignoreMap":27},[203,113948,113949,113951,113954,113956],{"class":205,"line":206},[203,113950,30450],{"class":209},[203,113952,113953],{"class":213}," gymnasium ",[203,113955,31441],{"class":209},[203,113957,113958],{"class":213}," gym\n",[203,113960,113961,113963],{"class":205,"line":124},[203,113962,30450],{"class":209},[203,113964,101359],{"class":213},[203,113966,113967,113969,113971,113973],{"class":205,"line":1269},[203,113968,30450],{"class":209},[203,113970,31438],{"class":213},[203,113972,31441],{"class":209},[203,113974,31444],{"class":213},[203,113976,113977,113979,113981,113983],{"class":205,"line":1284},[203,113978,30795],{"class":209},[203,113980,113953],{"class":213},[203,113982,30450],{"class":209},[203,113984,113985],{"class":213}," spaces\n",[203,113987,113988],{"class":205,"line":1290},[203,113989,2489],{"emptyLinePlaceholder":131},[203,113991,113992],{"class":205,"line":1304},[203,113993,2489],{"emptyLinePlaceholder":131},[203,113995,113996,113998,114000],{"class":205,"line":1310},[203,113997,101372],{"class":262},[203,113999,13654],{"class":209},[203,114001,101377],{"class":318},[203,114003,114004],{"class":205,"line":1401},[203,114005,114006],{"class":318},"\u003Cmujoco model=\"gym_reacher\">\n",[203,114008,114009],{"class":205,"line":1407},[203,114010,111796],{"class":318},[203,114012,114013],{"class":205,"line":1419},[203,114014,2489],{"emptyLinePlaceholder":131},[203,114016,114017],{"class":205,"line":1701},[203,114018,101396],{"class":318},[203,114020,114021],{"class":205,"line":1706},[203,114022,111814],{"class":318},[203,114024,114025],{"class":205,"line":1712},[203,114026,2489],{"emptyLinePlaceholder":131},[203,114028,114029],{"class":205,"line":1717},[203,114030,111823],{"class":318},[203,114032,114033],{"class":205,"line":1731},[203,114034,111828],{"class":318},[203,114036,114037],{"class":205,"line":1736},[203,114038,114039],{"class":318},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[203,114041,114042],{"class":205,"line":1742},[203,114043,2489],{"emptyLinePlaceholder":131},[203,114045,114046],{"class":205,"line":1763},[203,114047,111842],{"class":318},[203,114049,114050],{"class":205,"line":1768},[203,114051,111847],{"class":318},[203,114053,114054],{"class":205,"line":1782},[203,114055,114056],{"class":318},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[203,114058,114059],{"class":205,"line":1787},[203,114060,111857],{"class":318},[203,114062,114063],{"class":205,"line":1816},[203,114064,106496],{"class":318},[203,114066,114067],{"class":205,"line":1821},[203,114068,101425],{"class":318},[203,114070,114071],{"class":205,"line":1838},[203,114072,101430],{"class":318},[203,114074,114075],{"class":205,"line":1843},[203,114076,2489],{"emptyLinePlaceholder":131},[203,114078,114079],{"class":205,"line":1848},[203,114080,106513],{"class":318},[203,114082,114083],{"class":205,"line":1853},[203,114084,111882],{"class":318},[203,114086,114087],{"class":205,"line":1867},[203,114088,111887],{"class":318},[203,114090,114091],{"class":205,"line":1872},[203,114092,106523],{"class":318},[203,114094,114095],{"class":205,"line":2666},[203,114096,101435],{"class":318},[203,114098,114099],{"class":205,"line":2680},[203,114100,95756],{"class":318},[203,114102,114103],{"class":205,"line":2688},[203,114104,2489],{"emptyLinePlaceholder":131},[203,114106,114107],{"class":205,"line":2693},[203,114108,2489],{"emptyLinePlaceholder":131},[203,114110,114111,114113,114116,114118,114120,114122,114125],{"class":205,"line":2699},[203,114112,14784],{"class":209},[203,114114,114115],{"class":2052}," ReacherEnv",[203,114117,214],{"class":213},[203,114119,113598],{"class":2052},[203,114121,772],{"class":213},[203,114123,114124],{"class":2052},"Env",[203,114126,30844],{"class":213},[203,114128,114129,114132,114134,114136,114139],{"class":205,"line":2705},[203,114130,114131],{"class":213},"    metadata ",[203,114133,259],{"class":209},[203,114135,4537],{"class":213},[203,114137,114138],{"class":318},"\"render_modes\"",[203,114140,114141],{"class":213},": []}\n",[203,114143,114144],{"class":205,"line":2710},[203,114145,2489],{"emptyLinePlaceholder":131},[203,114147,114148,114150,114152,114155,114157],{"class":205,"line":8038},[203,114149,30859],{"class":209},[203,114151,30862],{"class":262},[203,114153,114154],{"class":213},"(self) -> ",[203,114156,95744],{"class":262},[203,114158,3828],{"class":213},[203,114160,114161,114163,114165,114167],{"class":205,"line":8062},[203,114162,30875],{"class":262},[203,114164,17351],{"class":213},[203,114166,30887],{"class":262},[203,114168,2065],{"class":213},[203,114170,114171,114173,114176,114178,114180,114182],{"class":205,"line":8067},[203,114172,30903],{"class":262},[203,114174,114175],{"class":213},".model ",[203,114177,259],{"class":209},[203,114179,101470],{"class":213},[203,114181,101372],{"class":262},[203,114183,220],{"class":213},[203,114185,114186,114188,114191,114193,114196,114198],{"class":205,"line":8073},[203,114187,30903],{"class":262},[203,114189,114190],{"class":213},".data ",[203,114192,259],{"class":209},[203,114194,114195],{"class":213}," mujoco.MjData(",[203,114197,30881],{"class":262},[203,114199,114200],{"class":213},".model)\n",[203,114202,114203],{"class":205,"line":8100},[203,114204,2489],{"emptyLinePlaceholder":131},[203,114206,114207,114209,114212,114214,114217,114219,114222,114224],{"class":205,"line":8105},[203,114208,30903],{"class":262},[203,114210,114211],{"class":213},".tip_site_id ",[203,114213,259],{"class":209},[203,114215,114216],{"class":213}," mujoco.mj_name2id(",[203,114218,30881],{"class":262},[203,114220,114221],{"class":213},".model, mujoco.mjtObj.mjOBJ_SITE, ",[203,114223,111594],{"class":318},[203,114225,220],{"class":213},[203,114227,114228,114230,114233,114235,114237,114239,114241,114243],{"class":205,"line":8111},[203,114229,30903],{"class":262},[203,114231,114232],{"class":213},".target_site_id ",[203,114234,259],{"class":209},[203,114236,114216],{"class":213},[203,114238,30881],{"class":262},[203,114240,114221],{"class":213},[203,114242,112017],{"class":318},[203,114244,220],{"class":213},[203,114246,114247,114249,114251,114253,114255,114257,114260,114262,114264,114266,114268],{"class":205,"line":8123},[203,114248,2586],{"class":209},[203,114250,38931],{"class":262},[203,114252,114211],{"class":213},[203,114254,1124],{"class":209},[203,114256,4182],{"class":262},[203,114258,114259],{"class":209}," or",[203,114261,38931],{"class":262},[203,114263,114232],{"class":213},[203,114265,1124],{"class":209},[203,114267,4182],{"class":262},[203,114269,3828],{"class":213},[203,114271,114272,114275,114277,114279,114282],{"class":205,"line":8135},[203,114273,114274],{"class":209},"            raise",[203,114276,103493],{"class":262},[203,114278,214],{"class":213},[203,114280,114281],{"class":318},"\"required sites not found\"",[203,114283,220],{"class":213},[203,114285,114286],{"class":205,"line":8147},[203,114287,2489],{"emptyLinePlaceholder":131},[203,114289,114290,114292,114294,114296],{"class":205,"line":9806},[203,114291,30903],{"class":262},[203,114293,113925],{"class":213},[203,114295,259],{"class":209},[203,114297,54485],{"class":262},[203,114299,114300,114302,114305,114307],{"class":205,"line":9831},[203,114301,30903],{"class":262},[203,114303,114304],{"class":213},".max_steps ",[203,114306,259],{"class":209},[203,114308,114309],{"class":262}," 200\n",[203,114311,114312,114314,114316,114318],{"class":205,"line":9854},[203,114313,30903],{"class":262},[203,114315,113764],{"class":213},[203,114317,259],{"class":209},[203,114319,47391],{"class":262},[203,114321,114322],{"class":205,"line":9878},[203,114323,2489],{"emptyLinePlaceholder":131},[203,114325,114326,114328,114330,114332,114334,114336,114338,114340,114342,114344,114346,114348,114350,114352,114354,114356,114358,114360,114362,114364],{"class":205,"line":9883},[203,114327,30903],{"class":262},[203,114329,113812],{"class":213},[203,114331,259],{"class":209},[203,114333,113817],{"class":213},[203,114335,113820],{"class":5306},[203,114337,113823],{"class":209},[203,114339,102461],{"class":262},[203,114341,12525],{"class":213},[203,114343,113830],{"class":5306},[203,114345,259],{"class":209},[203,114347,102461],{"class":262},[203,114349,12525],{"class":213},[203,114351,96021],{"class":5306},[203,114353,259],{"class":209},[203,114355,214],{"class":213},[203,114357,291],{"class":262},[203,114359,113847],{"class":213},[203,114361,93558],{"class":5306},[203,114363,259],{"class":209},[203,114365,113854],{"class":213},[203,114367,114368,114370,114372,114374,114376,114378,114380,114382,114384,114386,114388,114390,114392,114394,114396,114398,114400,114402],{"class":205,"line":9888},[203,114369,30903],{"class":262},[203,114371,113873],{"class":213},[203,114373,259],{"class":209},[203,114375,113817],{"class":213},[203,114377,113820],{"class":5306},[203,114379,113823],{"class":209},[203,114381,113884],{"class":213},[203,114383,113830],{"class":5306},[203,114385,259],{"class":209},[203,114387,113884],{"class":213},[203,114389,96021],{"class":5306},[203,114391,259],{"class":209},[203,114393,214],{"class":213},[203,114395,660],{"class":262},[203,114397,113847],{"class":213},[203,114399,93558],{"class":5306},[203,114401,259],{"class":209},[203,114403,113854],{"class":213},[203,114405,114406],{"class":205,"line":9893},[203,114407,2489],{"emptyLinePlaceholder":131},[203,114409,114410,114412,114415],{"class":205,"line":9902},[203,114411,30859],{"class":209},[203,114413,114414],{"class":2052}," _get_obs",[203,114416,114417],{"class":213},"(self) -> np.ndarray:\n",[203,114419,114420,114422,114424,114426,114429,114431],{"class":205,"line":9907},[203,114421,112195],{"class":213},[203,114423,259],{"class":209},[203,114425,38931],{"class":262},[203,114427,114428],{"class":213},".data.site_xpos[",[203,114430,30881],{"class":262},[203,114432,114433],{"class":213},".tip_site_id].copy()\n",[203,114435,114436,114438,114440,114442,114444,114446],{"class":205,"line":9913},[203,114437,112208],{"class":213},[203,114439,259],{"class":209},[203,114441,38931],{"class":262},[203,114443,114428],{"class":213},[203,114445,30881],{"class":262},[203,114447,114448],{"class":213},".target_site_id].copy()\n",[203,114450,114451,114453,114455,114458,114460,114463,114465],{"class":205,"line":9934},[203,114452,110240],{"class":213},[203,114454,259],{"class":209},[203,114456,114457],{"class":213}," np.concatenate([",[203,114459,30881],{"class":262},[203,114461,114462],{"class":213},".data.qpos.copy(), ",[203,114464,30881],{"class":262},[203,114466,114467],{"class":213},".data.qvel.copy(), tip, target])\n",[203,114469,114470,114472],{"class":205,"line":9940},[203,114471,14842],{"class":209},[203,114473,114474],{"class":213}," obs.astype(np.float32)\n",[203,114476,114477],{"class":205,"line":9954},[203,114478,2489],{"emptyLinePlaceholder":131},[203,114480,114481,114483,114486,114488,114490],{"class":205,"line":9960},[203,114482,30859],{"class":209},[203,114484,114485],{"class":2052}," _get_reward",[203,114487,114154],{"class":213},[203,114489,253],{"class":262},[203,114491,3828],{"class":213},[203,114493,114494,114496,114498,114500,114502,114504],{"class":205,"line":9987},[203,114495,112195],{"class":213},[203,114497,259],{"class":209},[203,114499,38931],{"class":262},[203,114501,114428],{"class":213},[203,114503,30881],{"class":262},[203,114505,114506],{"class":213},".tip_site_id]\n",[203,114508,114509,114511,114513,114515,114517,114519],{"class":205,"line":9996},[203,114510,112208],{"class":213},[203,114512,259],{"class":209},[203,114514,38931],{"class":262},[203,114516,114428],{"class":213},[203,114518,30881],{"class":262},[203,114520,114521],{"class":213},".target_site_id]\n",[203,114523,114524,114527,114529,114531,114533],{"class":205,"line":10002},[203,114525,114526],{"class":213},"        dist ",[203,114528,259],{"class":209},[203,114530,111659],{"class":213},[203,114532,746],{"class":209},[203,114534,111664],{"class":213},[203,114536,114537,114540,114542,114544,114546,114549,114551],{"class":205,"line":10010},[203,114538,114539],{"class":213},"        control_cost ",[203,114541,259],{"class":209},[203,114543,112095],{"class":262},[203,114545,6608],{"class":209},[203,114547,114548],{"class":213}," np.sum(np.square(",[203,114550,30881],{"class":262},[203,114552,114553],{"class":213},".data.ctrl))\n",[203,114555,114556,114558,114560,114562,114564,114566,114568],{"class":205,"line":10015},[203,114557,14842],{"class":209},[203,114559,109855],{"class":262},[203,114561,214],{"class":213},[203,114563,746],{"class":209},[203,114565,111654],{"class":213},[203,114567,746],{"class":209},[203,114569,112117],{"class":213},[203,114571,114572],{"class":205,"line":16694},[203,114573,2489],{"emptyLinePlaceholder":131},[203,114575,114576,114578,114581,114584,114586,114589,114591,114593,114595,114597,114599,114602,114605,114607,114609,114611,114613],{"class":205,"line":16700},[203,114577,30859],{"class":209},[203,114579,114580],{"class":2052}," reset",[203,114582,114583],{"class":213},"(self, ",[203,114585,669],{"class":209},[203,114587,114588],{"class":213},", seed: ",[203,114590,217],{"class":262},[203,114592,25167],{"class":209},[203,114594,38991],{"class":262},[203,114596,13654],{"class":209},[203,114598,38991],{"class":262},[203,114600,114601],{"class":213},", options: ",[203,114603,114604],{"class":262},"dict",[203,114606,25167],{"class":209},[203,114608,38991],{"class":262},[203,114610,13654],{"class":209},[203,114612,38991],{"class":262},[203,114614,30844],{"class":213},[203,114616,114617,114619,114622,114625,114627],{"class":205,"line":16723},[203,114618,30875],{"class":262},[203,114620,114621],{"class":213},"().reset(",[203,114623,114624],{"class":5306},"seed",[203,114626,259],{"class":209},[203,114628,114629],{"class":213},"seed)\n",[203,114631,114632,114635,114637,114640,114642],{"class":205,"line":16729},[203,114633,114634],{"class":213},"        mujoco.mj_resetData(",[203,114636,30881],{"class":262},[203,114638,114639],{"class":213},".model, ",[203,114641,30881],{"class":262},[203,114643,114644],{"class":213},".data)\n",[203,114646,114647],{"class":205,"line":16752},[203,114648,2489],{"emptyLinePlaceholder":131},[203,114650,114651,114653,114656,114658,114660,114663,114665,114667,114669,114671,114673,114675,114677,114679,114681,114683,114685],{"class":205,"line":16766},[203,114652,30903],{"class":262},[203,114654,114655],{"class":213},".data.qpos[:] ",[203,114657,259],{"class":209},[203,114659,38931],{"class":262},[203,114661,114662],{"class":213},".np_random.uniform(",[203,114664,113820],{"class":5306},[203,114666,113823],{"class":209},[203,114668,86268],{"class":262},[203,114670,12525],{"class":213},[203,114672,113830],{"class":5306},[203,114674,259],{"class":209},[203,114676,86268],{"class":262},[203,114678,12525],{"class":213},[203,114680,31554],{"class":5306},[203,114682,259],{"class":209},[203,114684,30881],{"class":262},[203,114686,114687],{"class":213},".model.nq)\n",[203,114689,114690,114692,114695,114697],{"class":205,"line":16786},[203,114691,30903],{"class":262},[203,114693,114694],{"class":213},".data.qvel[:] ",[203,114696,259],{"class":209},[203,114698,104819],{"class":262},[203,114700,114701,114704,114706,114708,114710],{"class":205,"line":16792},[203,114702,114703],{"class":213},"        mujoco.mj_forward(",[203,114705,30881],{"class":262},[203,114707,114639],{"class":213},[203,114709,30881],{"class":262},[203,114711,114644],{"class":213},[203,114713,114714],{"class":205,"line":16803},[203,114715,2489],{"emptyLinePlaceholder":131},[203,114717,114718,114720,114722,114724],{"class":205,"line":16826},[203,114719,30903],{"class":262},[203,114721,113764],{"class":213},[203,114723,259],{"class":209},[203,114725,47391],{"class":262},[203,114727,114728,114730,114732],{"class":205,"line":16848},[203,114729,14842],{"class":209},[203,114731,38931],{"class":262},[203,114733,114734],{"class":213},"._get_obs(), {}\n",[203,114736,114737],{"class":205,"line":16853},[203,114738,2489],{"emptyLinePlaceholder":131},[203,114740,114741,114743,114746],{"class":205,"line":16859},[203,114742,30859],{"class":209},[203,114744,114745],{"class":2052}," step",[203,114747,114748],{"class":213},"(self, action):\n",[203,114750,114751,114753,114755,114758,114760,114762],{"class":205,"line":16873},[203,114752,110280],{"class":213},[203,114754,259],{"class":209},[203,114756,114757],{"class":213}," np.asarray(action, ",[203,114759,93558],{"class":5306},[203,114761,259],{"class":209},[203,114763,113854],{"class":213},[203,114765,114766,114768,114770,114772,114774,114777,114779],{"class":205,"line":16886},[203,114767,110280],{"class":213},[203,114769,259],{"class":209},[203,114771,107505],{"class":213},[203,114773,30881],{"class":262},[203,114775,114776],{"class":213},".action_space.low, ",[203,114778,30881],{"class":262},[203,114780,114781],{"class":213},".action_space.high)\n",[203,114783,114784],{"class":205,"line":16891},[203,114785,2489],{"emptyLinePlaceholder":131},[203,114787,114788,114790,114793,114795],{"class":205,"line":16905},[203,114789,30903],{"class":262},[203,114791,114792],{"class":213},".data.ctrl[:] ",[203,114794,259],{"class":209},[203,114796,107528],{"class":213},[203,114798,114799,114801,114803,114805,114807,114809,114811],{"class":205,"line":16910},[203,114800,3492],{"class":209},[203,114802,101559],{"class":213},[203,114804,26101],{"class":209},[203,114806,32501],{"class":262},[203,114808,214],{"class":213},[203,114810,30881],{"class":262},[203,114812,114813],{"class":213},".frame_skip):\n",[203,114815,114816,114819,114821,114823,114825],{"class":205,"line":16916},[203,114817,114818],{"class":213},"            mujoco.mj_step(",[203,114820,30881],{"class":262},[203,114822,114639],{"class":213},[203,114824,30881],{"class":262},[203,114826,114644],{"class":213},[203,114828,114829],{"class":205,"line":16921},[203,114830,2489],{"emptyLinePlaceholder":131},[203,114832,114833,114835,114837,114839],{"class":205,"line":16935},[203,114834,30903],{"class":262},[203,114836,113764],{"class":213},[203,114838,9567],{"class":209},[203,114840,55757],{"class":262},[203,114842,114843],{"class":205,"line":16940},[203,114844,2489],{"emptyLinePlaceholder":131},[203,114846,114847,114849,114851,114853],{"class":205,"line":16945},[203,114848,110240],{"class":213},[203,114850,259],{"class":209},[203,114852,38931],{"class":262},[203,114854,114855],{"class":213},"._get_obs()\n",[203,114857,114858,114860,114862,114864],{"class":205,"line":16959},[203,114859,110345],{"class":213},[203,114861,259],{"class":209},[203,114863,38931],{"class":262},[203,114865,114866],{"class":213},"._get_reward()\n",[203,114868,114869],{"class":205,"line":16971},[203,114870,2489],{"emptyLinePlaceholder":131},[203,114872,114873,114875,114877,114879,114881,114883],{"class":205,"line":16976},[203,114874,112195],{"class":213},[203,114876,259],{"class":209},[203,114878,38931],{"class":262},[203,114880,114428],{"class":213},[203,114882,30881],{"class":262},[203,114884,114506],{"class":213},[203,114886,114887,114889,114891,114893,114895,114897],{"class":205,"line":16989},[203,114888,112208],{"class":213},[203,114890,259],{"class":209},[203,114892,38931],{"class":262},[203,114894,114428],{"class":213},[203,114896,30881],{"class":262},[203,114898,114521],{"class":213},[203,114900,114901,114903,114905,114907,114910,114912],{"class":205,"line":16994},[203,114902,114526],{"class":213},[203,114904,259],{"class":209},[203,114906,109855],{"class":262},[203,114908,114909],{"class":213},"(np.linalg.norm(tip ",[203,114911,746],{"class":209},[203,114913,114914],{"class":213}," target))\n",[203,114916,114917],{"class":205,"line":16999},[203,114918,2489],{"emptyLinePlaceholder":131},[203,114920,114921,114924,114926,114928,114930],{"class":205,"line":17004},[203,114922,114923],{"class":213},"        terminated ",[203,114925,259],{"class":209},[203,114927,113747],{"class":213},[203,114929,1124],{"class":209},[203,114931,113752],{"class":262},[203,114933,114934,114937,114939,114941,114943,114945,114947],{"class":205,"line":17017},[203,114935,114936],{"class":213},"        truncated ",[203,114938,259],{"class":209},[203,114940,38931],{"class":262},[203,114942,113764],{"class":213},[203,114944,1799],{"class":209},[203,114946,38931],{"class":262},[203,114948,113771],{"class":213},[203,114950,114951,114954,114956,114958,114961],{"class":205,"line":17022},[203,114952,114953],{"class":213},"        info ",[203,114955,259],{"class":209},[203,114957,4537],{"class":213},[203,114959,114960],{"class":318},"\"distance\"",[203,114962,114963],{"class":213},": dist}\n",[203,114965,114966,114968],{"class":205,"line":32691},[203,114967,14842],{"class":209},[203,114969,114970],{"class":213}," obs, reward, terminated, truncated, info\n",[203,114972,114973],{"class":205,"line":32697},[203,114974,2489],{"emptyLinePlaceholder":131},[203,114976,114977],{"class":205,"line":32703},[203,114978,2489],{"emptyLinePlaceholder":131},[203,114980,114981,114983,114985,114987,114989],{"class":205,"line":32709},[203,114982,32005],{"class":209},[203,114984,2062],{"class":2052},[203,114986,101456],{"class":213},[203,114988,95744],{"class":262},[203,114990,3828],{"class":213},[203,114992,114993,114996,114998],{"class":205,"line":32715},[203,114994,114995],{"class":213},"    env ",[203,114997,259],{"class":209},[203,114999,115000],{"class":213}," ReacherEnv()\n",[203,115002,115003,115006,115008,115011,115013,115015,115017],{"class":205,"line":32726},[203,115004,115005],{"class":213},"    obs, info ",[203,115007,259],{"class":209},[203,115009,115010],{"class":213}," env.reset(",[203,115012,114624],{"class":5306},[203,115014,259],{"class":209},[203,115016,405],{"class":262},[203,115018,220],{"class":213},[203,115020,115021,115023,115025,115028],{"class":205,"line":32732},[203,115022,31357],{"class":262},[203,115024,214],{"class":213},[203,115026,115027],{"class":318},"\"initial obs shape:\"",[203,115029,115030],{"class":213},", obs.shape)\n",[203,115032,115033,115035,115037,115040],{"class":205,"line":32752},[203,115034,31357],{"class":262},[203,115036,214],{"class":213},[203,115038,115039],{"class":318},"\"initial info:\"",[203,115041,115042],{"class":213},", info)\n",[203,115044,115045],{"class":205,"line":32758},[203,115046,2489],{"emptyLinePlaceholder":131},[203,115048,115049,115051,115053],{"class":205,"line":32769},[203,115050,110211],{"class":213},[203,115052,259],{"class":209},[203,115054,104819],{"class":262},[203,115056,115057,115059,115061,115063,115065,115067,115069],{"class":205,"line":32775},[203,115058,3290],{"class":209},[203,115060,31674],{"class":213},[203,115062,26101],{"class":209},[203,115064,32501],{"class":262},[203,115066,214],{"class":213},[203,115068,914],{"class":262},[203,115070,30844],{"class":213},[203,115072,115073,115075,115077],{"class":205,"line":32781},[203,115074,110280],{"class":213},[203,115076,259],{"class":209},[203,115078,115079],{"class":213}," env.action_space.sample()\n",[203,115081,115082,115085,115087],{"class":205,"line":32787},[203,115083,115084],{"class":213},"        obs, reward, terminated, truncated, info ",[203,115086,259],{"class":209},[203,115088,113473],{"class":213},[203,115090,115091,115093,115095],{"class":205,"line":32793},[203,115092,110355],{"class":213},[203,115094,9567],{"class":209},[203,115096,110360],{"class":213},[203,115098,115099,115101,115103,115105,115107,115110,115112,115114,115117,115119,115121,115124,115126,115128,115131,115133,115135,115137],{"class":205,"line":32799},[203,115100,32509],{"class":262},[203,115102,214],{"class":213},[203,115104,110389],{"class":318},[203,115106,110392],{"class":213},[203,115108,115109],{"class":318},"\"reward:\"",[203,115111,12525],{"class":213},[203,115113,32076],{"class":262},[203,115115,115116],{"class":213},"(reward, ",[203,115118,285],{"class":262},[203,115120,110403],{"class":213},[203,115122,115123],{"class":318},"\"distance:\"",[203,115125,12525],{"class":213},[203,115127,32076],{"class":262},[203,115129,115130],{"class":213},"(info[",[203,115132,114960],{"class":318},[203,115134,112260],{"class":213},[203,115136,285],{"class":262},[203,115138,30555],{"class":213},[203,115140,115141,115143,115146,115149],{"class":205,"line":32805},[203,115142,2586],{"class":209},[203,115144,115145],{"class":213}," terminated ",[203,115147,115148],{"class":209},"or",[203,115150,115151],{"class":213}," truncated:\n",[203,115153,115154],{"class":205,"line":32811},[203,115155,115156],{"class":209},"            break\n",[203,115158,115159],{"class":205,"line":32831},[203,115160,2489],{"emptyLinePlaceholder":131},[203,115162,115163,115165,115167,115169,115171,115173,115175,115177],{"class":205,"line":32837},[203,115164,31357],{"class":262},[203,115166,214],{"class":213},[203,115168,110434],{"class":318},[203,115170,12525],{"class":213},[203,115172,32076],{"class":262},[203,115174,110441],{"class":213},[203,115176,285],{"class":262},[203,115178,30555],{"class":213},[203,115180,115181],{"class":205,"line":32853},[203,115182,2489],{"emptyLinePlaceholder":131},[203,115184,115185],{"class":205,"line":32859},[203,115186,2489],{"emptyLinePlaceholder":131},[203,115188,115189,115191,115193,115195,115197],{"class":205,"line":32873},[203,115190,1620],{"class":209},[203,115192,31278],{"class":262},[203,115194,101617],{"class":209},[203,115196,101620],{"class":318},[203,115198,3828],{"class":213},[203,115200,115201],{"class":205,"line":32879},[203,115202,101627],{"class":213},[19,115204,103628],{},[194,115206,115208],{"className":23913,"code":115207,"language":23915,"meta":27,"style":27},"touch ch8_gym_env.py\n",[200,115209,115210],{"__ignoreMap":27},[203,115211,115212,115214],{"class":205,"line":206},[203,115213,101341],{"class":2052},[203,115215,115216],{"class":318}," ch8_gym_env.py\n",[19,115218,110502],{},[194,115220,115222],{"className":23913,"code":115221,"language":23915,"meta":27,"style":27},"python ch8_gym_env.py\n",[200,115223,115224],{"__ignoreMap":27},[203,115225,115226,115228],{"class":205,"line":206},[203,115227,30438],{"class":2052},[203,115229,115216],{"class":318},[174,115231,101630],{"id":101630},[19,115233,115234],{},"继承 Gymnasium 环境：",[194,115236,115238],{"className":30436,"code":115237,"language":30438,"meta":27,"style":27},"class ReacherEnv(gym.Env):\n",[200,115239,115240],{"__ignoreMap":27},[203,115241,115242,115244,115246,115248,115250,115252,115254],{"class":205,"line":206},[203,115243,14784],{"class":209},[203,115245,114115],{"class":2052},[203,115247,214],{"class":213},[203,115249,113598],{"class":2052},[203,115251,772],{"class":213},[203,115253,114124],{"class":2052},[203,115255,30844],{"class":213},[19,115257,115258],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115260,115261],{},"初始化模型：",[194,115263,115265],{"className":30436,"code":115264,"language":30438,"meta":27,"style":27},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[200,115266,115267,115281],{"__ignoreMap":27},[203,115268,115269,115271,115273,115275,115277,115279],{"class":205,"line":206},[203,115270,30881],{"class":262},[203,115272,114175],{"class":213},[203,115274,259],{"class":209},[203,115276,101470],{"class":213},[203,115278,101372],{"class":262},[203,115280,220],{"class":213},[203,115282,115283,115285,115287,115289,115291,115293],{"class":205,"line":124},[203,115284,30881],{"class":262},[203,115286,114190],{"class":213},[203,115288,259],{"class":209},[203,115290,114195],{"class":213},[203,115292,30881],{"class":262},[203,115294,114200],{"class":213},[19,115296,115297,115298,115300],{},"这和前面章节一样，只是现在放到了类的 ",[200,115299,30887],{}," 里。",[19,115302,115303],{},"缓存 site ID：",[194,115305,115307],{"className":30436,"code":115306,"language":30438,"meta":27,"style":27},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[200,115308,115309,115323],{"__ignoreMap":27},[203,115310,115311,115313,115315,115317,115319,115321],{"class":205,"line":206},[203,115312,30881],{"class":262},[203,115314,114211],{"class":213},[203,115316,259],{"class":209},[203,115318,114216],{"class":213},[203,115320,89612],{"class":262},[203,115322,220],{"class":213},[203,115324,115325,115327,115329,115331,115333,115335],{"class":205,"line":124},[203,115326,30881],{"class":262},[203,115328,114232],{"class":213},[203,115330,259],{"class":209},[203,115332,114216],{"class":213},[203,115334,89612],{"class":262},[203,115336,220],{"class":213},[19,115338,115339],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115341,115342],{},"reset：",[194,115344,115346],{"className":30436,"code":115345,"language":30438,"meta":27,"style":27},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[200,115347,115348],{"__ignoreMap":27},[203,115349,115350,115352,115354,115356,115358,115360,115362,115364,115366,115368,115370,115372,115374,115376,115378,115380,115382],{"class":205,"line":206},[203,115351,32005],{"class":209},[203,115353,114580],{"class":2052},[203,115355,114583],{"class":213},[203,115357,669],{"class":209},[203,115359,114588],{"class":213},[203,115361,217],{"class":262},[203,115363,25167],{"class":209},[203,115365,38991],{"class":262},[203,115367,13654],{"class":209},[203,115369,38991],{"class":262},[203,115371,114601],{"class":213},[203,115373,114604],{"class":262},[203,115375,25167],{"class":209},[203,115377,38991],{"class":262},[203,115379,13654],{"class":209},[203,115381,38991],{"class":262},[203,115383,30844],{"class":213},[19,115385,115386,115388],{},[200,115387,70114],{}," 做四件事：",[157,115390,115391,115394,115397,115400],{},[160,115392,115393],{},"设置随机种子。",[160,115395,115396],{},"重置 MuJoCo data。",[160,115398,115399],{},"随机初始化关节角。",[160,115401,115402],{},"返回初始观测和 info。",[19,115404,115405],{},"step：",[194,115407,115409],{"className":30436,"code":115408,"language":30438,"meta":27,"style":27},"def step(self, action):\n",[200,115410,115411],{"__ignoreMap":27},[203,115412,115413,115415,115417],{"class":205,"line":206},[203,115414,32005],{"class":209},[203,115416,114745],{"class":2052},[203,115418,114748],{"class":213},[19,115420,115421,115423],{},[200,115422,107192],{}," 做六件事：",[157,115425,115426,115429,115435,115438,115441,115444],{},[160,115427,115428],{},"检查并裁剪 action。",[160,115430,115431,115432,28443],{},"写入 ",[200,115433,115434],{},"self.data.ctrl",[160,115436,115437],{},"连续推进若干个 MuJoCo 物理步。",[160,115439,115440],{},"计算新观测。",[160,115442,115443],{},"计算奖励和结束条件。",[160,115445,115446],{},"返回 Gymnasium 标准五元组。",[174,115448,101766],{"id":101766},[194,115450,115452],{"className":30436,"code":115451,"language":30438,"meta":27,"style":27},"import gymnasium as gym\n",[200,115453,115454],{"__ignoreMap":27},[203,115455,115456,115458,115460,115462],{"class":205,"line":206},[203,115457,30450],{"class":209},[203,115459,113953],{"class":213},[203,115461,31441],{"class":209},[203,115463,113958],{"class":213},[19,115465,115466,115467,115469,115470,115473],{},"导入 Gymnasium，并起别名 ",[200,115468,113598],{},"。后面写 ",[200,115471,115472],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[194,115475,115477],{"className":30436,"code":115476,"language":30438,"meta":27,"style":27},"from gymnasium import spaces\n",[200,115478,115479],{"__ignoreMap":27},[203,115480,115481,115483,115485,115487],{"class":205,"line":206},[203,115482,30795],{"class":209},[203,115484,113953],{"class":213},[203,115486,30450],{"class":209},[203,115488,113985],{"class":213},[19,115490,115491,115492,115495],{},"导入空间定义工具。",[200,115493,115494],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[194,115497,115498],{"className":30436,"code":115237,"language":30438,"meta":27,"style":27},[200,115499,115500],{"__ignoreMap":27},[203,115501,115502,115504,115506,115508,115510,115512,115514],{"class":205,"line":206},[203,115503,14784],{"class":209},[203,115505,114115],{"class":2052},[203,115507,214],{"class":213},[203,115509,113598],{"class":2052},[203,115511,772],{"class":213},[203,115513,114124],{"class":2052},[203,115515,30844],{"class":213},[19,115517,115518,115519,115522,115523,115525,115526,101076,115528,115530],{},"定义一个类，名字叫 ",[200,115520,115521],{},"ReacherEnv","。括号里的 ",[200,115524,115472],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[200,115527,70114],{},[200,115529,107192],{}," 这两个核心方法。",[194,115532,115534],{"className":30436,"code":115533,"language":30438,"meta":27,"style":27},"metadata = {\"render_modes\": []}\n",[200,115535,115536],{"__ignoreMap":27},[203,115537,115538,115541,115543,115545,115547],{"class":205,"line":206},[203,115539,115540],{"class":213},"metadata ",[203,115542,259],{"class":209},[203,115544,4537],{"class":213},[203,115546,114138],{"class":318},[203,115548,114141],{"class":213},[19,115550,115551],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[194,115553,115555],{"className":30436,"code":115554,"language":30438,"meta":27,"style":27},"def __init__(self) -> None:\n",[200,115556,115557],{"__ignoreMap":27},[203,115558,115559,115561,115563,115565,115567],{"class":205,"line":206},[203,115560,32005],{"class":209},[203,115562,30862],{"class":262},[203,115564,114154],{"class":213},[203,115566,95744],{"class":262},[203,115568,3828],{"class":213},[19,115570,115571,115573,115574,28443],{},[200,115572,30887],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[200,115575,115576],{},"env = ReacherEnv()",[194,115578,115580],{"className":30436,"code":115579,"language":30438,"meta":27,"style":27},"super().__init__()\n",[200,115581,115582],{"__ignoreMap":27},[203,115583,115584,115587,115589,115591],{"class":205,"line":206},[203,115585,115586],{"class":262},"super",[203,115588,17351],{"class":213},[203,115590,30887],{"class":262},[203,115592,2065],{"class":213},[19,115594,115595,115596,115598],{},"调用父类 ",[200,115597,115472],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[194,115600,115601],{"className":30436,"code":115264,"language":30438,"meta":27,"style":27},[200,115602,115603,115617],{"__ignoreMap":27},[203,115604,115605,115607,115609,115611,115613,115615],{"class":205,"line":206},[203,115606,30881],{"class":262},[203,115608,114175],{"class":213},[203,115610,259],{"class":209},[203,115612,101470],{"class":213},[203,115614,101372],{"class":262},[203,115616,220],{"class":213},[203,115618,115619,115621,115623,115625,115627,115629],{"class":205,"line":124},[203,115620,30881],{"class":262},[203,115622,114190],{"class":213},[203,115624,259],{"class":209},[203,115626,114195],{"class":213},[203,115628,30881],{"class":262},[203,115630,114200],{"class":213},[19,115632,115633,115634,115636,115637,101076,115640,115643],{},"把 MuJoCo 模型和状态保存到 ",[200,115635,30881],{}," 上。",[200,115638,115639],{},"self.model",[200,115641,115642],{},"self.data"," 表示这个环境对象自己的模型和状态。",[194,115645,115646],{"className":30436,"code":115306,"language":30438,"meta":27,"style":27},[200,115647,115648,115662],{"__ignoreMap":27},[203,115649,115650,115652,115654,115656,115658,115660],{"class":205,"line":206},[203,115651,30881],{"class":262},[203,115653,114211],{"class":213},[203,115655,259],{"class":209},[203,115657,114216],{"class":213},[203,115659,89612],{"class":262},[203,115661,220],{"class":213},[203,115663,115664,115666,115668,115670,115672,115674],{"class":205,"line":124},[203,115665,30881],{"class":262},[203,115667,114232],{"class":213},[203,115669,259],{"class":209},[203,115671,114216],{"class":213},[203,115673,89612],{"class":262},[203,115675,220],{"class":213},[19,115677,115678,115679,101076,115682,115685],{},"提前查好 tip 和 target 的 site ID。这样 ",[200,115680,115681],{},"_get_obs",[200,115683,115684],{},"_get_reward"," 里就不用每次按名字查找。",[194,115687,115689],{"className":30436,"code":115688,"language":30438,"meta":27,"style":27},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[200,115690,115691,115701,115711],{"__ignoreMap":27},[203,115692,115693,115695,115697,115699],{"class":205,"line":206},[203,115694,30881],{"class":262},[203,115696,113925],{"class":213},[203,115698,259],{"class":209},[203,115700,54485],{"class":262},[203,115702,115703,115705,115707,115709],{"class":205,"line":124},[203,115704,30881],{"class":262},[203,115706,114304],{"class":213},[203,115708,259],{"class":209},[203,115710,114309],{"class":262},[203,115712,115713,115715,115717,115719],{"class":205,"line":1269},[203,115714,30881],{"class":262},[203,115716,113764],{"class":213},[203,115718,259],{"class":209},[203,115720,47391],{"class":262},[19,115722,115723,115726,115727,115730,115731,115734],{},[200,115724,115725],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[200,115728,115729],{},"max_steps"," 是一个 episode 最多运行多少步。",[200,115732,115733],{},"steps"," 记录当前 episode 已经走了多少步。",[194,115736,115737],{"className":30436,"code":113803,"language":30438,"meta":27,"style":27},[200,115738,115739],{"__ignoreMap":27},[203,115740,115741,115743,115745,115747,115749,115751,115753,115755,115757,115759,115761,115763,115765,115767,115769,115771,115773,115775,115777,115779],{"class":205,"line":206},[203,115742,30881],{"class":262},[203,115744,113812],{"class":213},[203,115746,259],{"class":209},[203,115748,113817],{"class":213},[203,115750,113820],{"class":5306},[203,115752,113823],{"class":209},[203,115754,102461],{"class":262},[203,115756,12525],{"class":213},[203,115758,113830],{"class":5306},[203,115760,259],{"class":209},[203,115762,102461],{"class":262},[203,115764,12525],{"class":213},[203,115766,96021],{"class":5306},[203,115768,259],{"class":209},[203,115770,214],{"class":213},[203,115772,291],{"class":262},[203,115774,113847],{"class":213},[203,115776,93558],{"class":5306},[203,115778,259],{"class":209},[203,115780,113854],{"class":213},[19,115782,115783,115784,115787,115788,101076,115791,115794],{},"定义动作空间。",[200,115785,115786],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[200,115789,115790],{},"low=-1.0",[200,115792,115793],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[194,115796,115797],{"className":30436,"code":113864,"language":30438,"meta":27,"style":27},[200,115798,115799],{"__ignoreMap":27},[203,115800,115801,115803,115805,115807,115809,115811,115813,115815,115817,115819,115821,115823,115825,115827,115829,115831,115833,115835],{"class":205,"line":206},[203,115802,30881],{"class":262},[203,115804,113873],{"class":213},[203,115806,259],{"class":209},[203,115808,113817],{"class":213},[203,115810,113820],{"class":5306},[203,115812,113823],{"class":209},[203,115814,113884],{"class":213},[203,115816,113830],{"class":5306},[203,115818,259],{"class":209},[203,115820,113884],{"class":213},[203,115822,96021],{"class":5306},[203,115824,259],{"class":209},[203,115826,214],{"class":213},[203,115828,660],{"class":262},[203,115830,113847],{"class":213},[203,115832,93558],{"class":5306},[203,115834,259],{"class":209},[203,115836,113854],{"class":213},[19,115838,115839,115840,115843,115844,115847],{},"定义观测空间。",[200,115841,115842],{},"shape=(10,)"," 表示观测是 10 个数。",[200,115845,115846],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[194,115849,115851],{"className":30436,"code":115850,"language":30438,"meta":27,"style":27},"def _get_obs(self) -> np.ndarray:\n",[200,115852,115853],{"__ignoreMap":27},[203,115854,115855,115857,115859],{"class":205,"line":206},[203,115856,32005],{"class":209},[203,115858,114414],{"class":2052},[203,115860,114417],{"class":213},[19,115862,115863,115864,115866],{},"定义内部函数，用来生成观测。函数名前面的 ",[200,115865,1206],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[194,115868,115870],{"className":30436,"code":115869,"language":30438,"meta":27,"style":27},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[200,115871,115872,115886],{"__ignoreMap":27},[203,115873,115874,115876,115878,115880,115882,115884],{"class":205,"line":206},[203,115875,111626],{"class":213},[203,115877,259],{"class":209},[203,115879,38931],{"class":262},[203,115881,114428],{"class":213},[203,115883,30881],{"class":262},[203,115885,114433],{"class":213},[203,115887,115888,115890,115892,115894,115896,115898],{"class":205,"line":124},[203,115889,111636],{"class":213},[203,115891,259],{"class":209},[203,115893,38931],{"class":262},[203,115895,114428],{"class":213},[203,115897,30881],{"class":262},[203,115899,114448],{"class":213},[19,115901,115902],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[194,115904,115906],{"className":30436,"code":115905,"language":30438,"meta":27,"style":27},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[200,115907,115908,115924],{"__ignoreMap":27},[203,115909,115910,115912,115914,115916,115918,115920,115922],{"class":205,"line":206},[203,115911,110912],{"class":213},[203,115913,259],{"class":209},[203,115915,114457],{"class":213},[203,115917,30881],{"class":262},[203,115919,114462],{"class":213},[203,115921,30881],{"class":262},[203,115923,114467],{"class":213},[203,115925,115926,115928],{"class":205,"line":124},[203,115927,17136],{"class":209},[203,115929,114474],{"class":213},[19,115931,115932,115933,115936,115937,115939],{},"拼接观测，并转换成 ",[200,115934,115935],{},"float32","。很多强化学习库默认使用 ",[200,115938,115935],{},"，所以这里主动转换。",[194,115941,115942],{"className":30436,"code":115345,"language":30438,"meta":27,"style":27},[200,115943,115944],{"__ignoreMap":27},[203,115945,115946,115948,115950,115952,115954,115956,115958,115960,115962,115964,115966,115968,115970,115972,115974,115976,115978],{"class":205,"line":206},[203,115947,32005],{"class":209},[203,115949,114580],{"class":2052},[203,115951,114583],{"class":213},[203,115953,669],{"class":209},[203,115955,114588],{"class":213},[203,115957,217],{"class":262},[203,115959,25167],{"class":209},[203,115961,38991],{"class":262},[203,115963,13654],{"class":209},[203,115965,38991],{"class":262},[203,115967,114601],{"class":213},[203,115969,114604],{"class":262},[203,115971,25167],{"class":209},[203,115973,38991],{"class":262},[203,115975,13654],{"class":209},[203,115977,38991],{"class":262},[203,115979,30844],{"class":213},[19,115981,115982,115983,115985,115986,115989],{},"定义 reset。",[200,115984,114624],{}," 用来控制随机数，保证实验可以复现。",[200,115987,115988],{},"options"," 用来接收额外配置，本章暂时不用。",[194,115991,115993],{"className":30436,"code":115992,"language":30438,"meta":27,"style":27},"super().reset(seed=seed)\n",[200,115994,115995],{"__ignoreMap":27},[203,115996,115997,115999,116001,116003,116005],{"class":205,"line":206},[203,115998,115586],{"class":262},[203,116000,114621],{"class":213},[203,116002,114624],{"class":5306},[203,116004,259],{"class":209},[203,116006,114629],{"class":213},[19,116008,116009,116010,116013],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[200,116011,116012],{},"self.np_random"," 生成可复现的随机数。",[194,116015,116017],{"className":30436,"code":116016,"language":30438,"meta":27,"style":27},"mujoco.mj_resetData(self.model, self.data)\n",[200,116018,116019],{"__ignoreMap":27},[203,116020,116021,116024,116026,116028,116030],{"class":205,"line":206},[203,116022,116023],{"class":213},"mujoco.mj_resetData(",[203,116025,30881],{"class":262},[203,116027,114639],{"class":213},[203,116029,30881],{"class":262},[203,116031,114644],{"class":213},[19,116033,116034],{},"把 MuJoCo 状态重置到默认状态。",[194,116036,116038],{"className":30436,"code":116037,"language":30438,"meta":27,"style":27},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[200,116039,116040],{"__ignoreMap":27},[203,116041,116042,116044,116046,116048,116050,116052,116054,116056,116058,116060,116062,116064,116066,116068,116070,116072,116074],{"class":205,"line":206},[203,116043,30881],{"class":262},[203,116045,114655],{"class":213},[203,116047,259],{"class":209},[203,116049,38931],{"class":262},[203,116051,114662],{"class":213},[203,116053,113820],{"class":5306},[203,116055,113823],{"class":209},[203,116057,86268],{"class":262},[203,116059,12525],{"class":213},[203,116061,113830],{"class":5306},[203,116063,259],{"class":209},[203,116065,86268],{"class":262},[203,116067,12525],{"class":213},[203,116069,31554],{"class":5306},[203,116071,259],{"class":209},[203,116073,30881],{"class":262},[203,116075,114687],{"class":213},[19,116077,115399,116078,116081,116082,116085,116086,116088],{},[200,116079,116080],{},"[:]"," 表示修改整个数组。",[200,116083,116084],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[200,116087,102208],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[194,116090,116092],{"className":30436,"code":116091,"language":30438,"meta":27,"style":27},"self.data.qvel[:] = 0.0\n",[200,116093,116094],{"__ignoreMap":27},[203,116095,116096,116098,116100,116102],{"class":205,"line":206},[203,116097,30881],{"class":262},[203,116099,114694],{"class":213},[203,116101,259],{"class":209},[203,116103,104819],{"class":262},[19,116105,116106],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[194,116108,116110],{"className":30436,"code":116109,"language":30438,"meta":27,"style":27},"self.steps = 0\nreturn self._get_obs(), {}\n",[200,116111,116112,116122],{"__ignoreMap":27},[203,116113,116114,116116,116118,116120],{"class":205,"line":206},[203,116115,30881],{"class":262},[203,116117,113764],{"class":213},[203,116119,259],{"class":209},[203,116121,47391],{"class":262},[203,116123,116124,116126,116128],{"class":205,"line":124},[203,116125,17136],{"class":209},[203,116127,38931],{"class":262},[203,116129,114734],{"class":213},[19,116131,116132],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[194,116134,116135],{"className":30436,"code":115408,"language":30438,"meta":27,"style":27},[200,116136,116137],{"__ignoreMap":27},[203,116138,116139,116141,116143],{"class":205,"line":206},[203,116140,32005],{"class":209},[203,116142,114745],{"class":2052},[203,116144,114748],{"class":213},[19,116146,116147],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[194,116149,116151],{"className":30436,"code":116150,"language":30438,"meta":27,"style":27},"action = np.asarray(action, dtype=np.float32)\n",[200,116152,116153],{"__ignoreMap":27},[203,116154,116155,116157,116159,116161,116163,116165],{"class":205,"line":206},[203,116156,107500],{"class":213},[203,116158,259],{"class":209},[203,116160,114757],{"class":213},[203,116162,93558],{"class":5306},[203,116164,259],{"class":209},[203,116166,113854],{"class":213},[19,116168,116169,116170,28443],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[200,116171,115935],{},[194,116173,116175],{"className":30436,"code":116174,"language":30438,"meta":27,"style":27},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[200,116176,116177],{"__ignoreMap":27},[203,116178,116179,116181,116183,116185,116187,116189,116191],{"class":205,"line":206},[203,116180,107500],{"class":213},[203,116182,259],{"class":209},[203,116184,107505],{"class":213},[203,116186,30881],{"class":262},[203,116188,114776],{"class":213},[203,116190,30881],{"class":262},[203,116192,114781],{"class":213},[19,116194,116195],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[194,116197,116199],{"className":30436,"code":116198,"language":30438,"meta":27,"style":27},"self.data.ctrl[:] = action\n",[200,116200,116201],{"__ignoreMap":27},[203,116202,116203,116205,116207,116209],{"class":205,"line":206},[203,116204,30881],{"class":262},[203,116206,114792],{"class":213},[203,116208,259],{"class":209},[203,116210,107528],{"class":213},[19,116212,116213],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[194,116215,116217],{"className":30436,"code":116216,"language":30438,"meta":27,"style":27},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[200,116218,116219,116235],{"__ignoreMap":27},[203,116220,116221,116223,116225,116227,116229,116231,116233],{"class":205,"line":206},[203,116222,3114],{"class":209},[203,116224,101559],{"class":213},[203,116226,26101],{"class":209},[203,116228,32501],{"class":262},[203,116230,214],{"class":213},[203,116232,30881],{"class":262},[203,116234,114813],{"class":213},[203,116236,116237,116240,116242,116244,116246],{"class":205,"line":124},[203,116238,116239],{"class":213},"    mujoco.mj_step(",[203,116241,30881],{"class":262},[203,116243,114639],{"class":213},[203,116245,30881],{"class":262},[203,116247,114644],{"class":213},[19,116249,116250,116251,116254,116255,116257,116258,28443],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[200,116252,116253],{},"frame_skip=5","，所以外部调用一次 ",[200,116256,113935],{},"，内部实际执行 5 次 ",[200,116259,101273],{},[194,116261,116263],{"className":30436,"code":116262,"language":30438,"meta":27,"style":27},"self.steps += 1\n",[200,116264,116265],{"__ignoreMap":27},[203,116266,116267,116269,116271,116273],{"class":205,"line":206},[203,116268,30881],{"class":262},[203,116270,113764],{"class":213},[203,116272,9567],{"class":209},[203,116274,55757],{"class":262},[19,116276,116277],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[194,116279,116281],{"className":30436,"code":116280,"language":30438,"meta":27,"style":27},"obs = self._get_obs()\nreward = self._get_reward()\n",[200,116282,116283,116293],{"__ignoreMap":27},[203,116284,116285,116287,116289,116291],{"class":205,"line":206},[203,116286,110912],{"class":213},[203,116288,259],{"class":209},[203,116290,38931],{"class":262},[203,116292,114855],{"class":213},[203,116294,116295,116297,116299,116301],{"class":205,"line":124},[203,116296,111063],{"class":213},[203,116298,259],{"class":209},[203,116300,38931],{"class":262},[203,116302,114866],{"class":213},[19,116304,116305],{},"计算新的观测和奖励。",[194,116307,116309],{"className":30436,"code":116308,"language":30438,"meta":27,"style":27},"dist = float(np.linalg.norm(tip - target))\n",[200,116310,116311],{"__ignoreMap":27},[203,116312,116313,116315,116317,116319,116321,116323],{"class":205,"line":206},[203,116314,111654],{"class":213},[203,116316,259],{"class":209},[203,116318,109855],{"class":262},[203,116320,114909],{"class":213},[203,116322,746],{"class":209},[203,116324,114914],{"class":213},[19,116326,116327],{},"计算末端到目标的距离，并转换成 Python float。",[194,116329,116330],{"className":30436,"code":113735,"language":30438,"meta":27,"style":27},[200,116331,116332,116344],{"__ignoreMap":27},[203,116333,116334,116336,116338,116340,116342],{"class":205,"line":206},[203,116335,113742],{"class":213},[203,116337,259],{"class":209},[203,116339,113747],{"class":213},[203,116341,1124],{"class":209},[203,116343,113752],{"class":262},[203,116345,116346,116348,116350,116352,116354,116356,116358],{"class":205,"line":124},[203,116347,113757],{"class":213},[203,116349,259],{"class":209},[203,116351,38931],{"class":262},[203,116353,113764],{"class":213},[203,116355,1799],{"class":209},[203,116357,38931],{"class":262},[203,116359,113771],{"class":213},[19,116361,116362],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[194,116364,116366],{"className":30436,"code":116365,"language":30438,"meta":27,"style":27},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[200,116367,116368,116381],{"__ignoreMap":27},[203,116369,116370,116373,116375,116377,116379],{"class":205,"line":206},[203,116371,116372],{"class":213},"info ",[203,116374,259],{"class":209},[203,116376,4537],{"class":213},[203,116378,114960],{"class":318},[203,116380,114963],{"class":213},[203,116382,116383,116385],{"class":205,"line":124},[203,116384,17136],{"class":209},[203,116386,114970],{"class":213},[19,116388,116389,116392],{},[200,116390,116391],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[194,116394,116396],{"className":30436,"code":116395,"language":30438,"meta":27,"style":27},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[200,116397,116398,116407],{"__ignoreMap":27},[203,116399,116400,116403,116405],{"class":205,"line":206},[203,116401,116402],{"class":213},"env ",[203,116404,259],{"class":209},[203,116406,115000],{"class":213},[203,116408,116409,116411,116413,116415,116417,116419,116421],{"class":205,"line":124},[203,116410,113458],{"class":213},[203,116412,259],{"class":209},[203,116414,115010],{"class":213},[203,116416,114624],{"class":5306},[203,116418,259],{"class":209},[203,116420,405],{"class":262},[203,116422,220],{"class":213},[19,116424,116425,116426,116429],{},"创建环境并重置。",[200,116427,116428],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[194,116431,116433],{"className":30436,"code":116432,"language":30438,"meta":27,"style":27},"action = env.action_space.sample()\n",[200,116434,116435],{"__ignoreMap":27},[203,116436,116437,116439,116441],{"class":205,"line":206},[203,116438,107500],{"class":213},[203,116440,259],{"class":209},[203,116442,115079],{"class":213},[19,116444,116445],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116447,102374],{"id":102373},[19,116449,105542],{},[194,116451,116454],{"className":116452,"code":116453,"language":5277,"meta":27},[5275],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[200,116455,116453],{"__ignoreMap":27},[19,116457,116458],{},"这个环境已经具备强化学习环境的基本结构。",[19,116460,116461],{},"主函数里使用随机动作：",[194,116463,116464],{"className":30436,"code":116432,"language":30438,"meta":27,"style":27},[200,116465,116466],{"__ignoreMap":27},[203,116467,116468,116470,116472],{"class":205,"line":206},[203,116469,107500],{"class":213},[203,116471,259],{"class":209},[203,116473,115079],{"class":213},[19,116475,116476],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116478,102406],{"id":102405},[157,116480,116481,116484,116490,116499,116508,116517,116523],{},[160,116482,116483],{},"运行程序。",[160,116485,116486,116487,28443],{},"确认 ",[200,116488,116489],{},"obs.shape == (10,)",[160,116491,111239,116492,116495,116496,28443],{},[200,116493,116494],{},"env.action_space","，应类似 ",[200,116497,116498],{},"Box(-1.0, 1.0, (2,), float32)",[160,116500,105643,116501,116504,116505,28443],{},[200,116502,116503],{},"self.max_steps = 10","，确认环境会更快 ",[200,116506,116507],{},"truncated=True",[160,116509,102469,116510,102472,116513,116516],{},[200,116511,116512],{},"terminated = dist \u003C 0.05",[200,116514,116515],{},"dist \u003C 0.2","，观察是否更容易结束。",[160,116518,102469,116519,116522],{},[200,116520,116521],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[160,116524,116525,116526,116528,116529,116532],{},"在 ",[200,116527,116391],{}," 里加入 ",[200,116530,116531],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,116534,102511],{"id":102510},[174,116536,116538],{"id":116537},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,116540,116541,116542,116544],{},"Gymnasium 的 ",[200,116543,107192],{}," 返回 5 个值:",[194,116546,116548],{"className":30436,"code":116547,"language":30438,"meta":27,"style":27},"obs, reward, terminated, truncated, info\n",[200,116549,116550],{"__ignoreMap":27},[203,116551,116552],{"class":205,"line":206},[203,116553,116547],{"class":213},[19,116555,116556],{},"不是旧 Gym 的 4 个值。",[174,116558,116560,116563],{"id":116559},"datactrl-action-维度错误",[200,116561,116562],{},"data.ctrl[:] = action"," 维度错误",[19,116565,102581],{},[194,116567,116569],{"className":30436,"code":116568,"language":30438,"meta":27,"style":27},"print(self.model.nu)\nprint(action.shape)\n",[200,116570,116571,116582],{"__ignoreMap":27},[203,116572,116573,116575,116577,116579],{"class":205,"line":206},[203,116574,30473],{"class":262},[203,116576,214],{"class":213},[203,116578,30881],{"class":262},[203,116580,116581],{"class":213},".model.nu)\n",[203,116583,116584,116586],{"class":205,"line":124},[203,116585,30473],{"class":262},[203,116587,116588],{"class":213},"(action.shape)\n",[19,116590,116591],{},"两者必须匹配。",[174,116593,116595],{"id":116594},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,116597,102520],{},[194,116599,116601],{"className":30436,"code":116600,"language":30438,"meta":27,"style":27},"mujoco.mj_forward(self.model, self.data)\n",[200,116602,116603],{"__ignoreMap":27},[203,116604,116605,116608,116610,116612,116614],{"class":205,"line":206},[203,116606,116607],{"class":213},"mujoco.mj_forward(",[203,116609,30881],{"class":262},[203,116611,114639],{"class":213},[203,116613,30881],{"class":262},[203,116615,114644],{"class":213},[174,116617,116619,116621],{"id":116618},"observation_space-维度和-obs-不一致",[200,116620,113658],{}," 维度和 obs 不一致",[19,116623,102633],{},[194,116625,116627],{"className":30436,"code":116626,"language":30438,"meta":27,"style":27},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[200,116628,116629,116639,116646],{"__ignoreMap":27},[203,116630,116631,116633,116635,116637],{"class":205,"line":206},[203,116632,110912],{"class":213},[203,116634,259],{"class":209},[203,116636,38931],{"class":262},[203,116638,114855],{"class":213},[203,116640,116641,116643],{"class":205,"line":124},[203,116642,30473],{"class":262},[203,116644,116645],{"class":213},"(obs.shape)\n",[203,116647,116648,116650,116652,116654],{"class":205,"line":1269},[203,116649,30473],{"class":262},[203,116651,214],{"class":213},[203,116653,30881],{"class":262},[203,116655,116656],{"class":213},".observation_space.shape)\n",[19,116658,116659],{},"两者必须一致。本章观测是：",[194,116661,116664],{"className":116662,"code":116663,"language":5277,"meta":27},[5275],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[200,116665,116663],{"__ignoreMap":27},[174,116667,116669],{"id":116668},"action-超过范围","action 超过范围",[19,116671,116672],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[194,116674,116675],{"className":30436,"code":116174,"language":30438,"meta":27,"style":27},[200,116676,116677],{"__ignoreMap":27},[203,116678,116679,116681,116683,116685,116687,116689,116691],{"class":205,"line":206},[203,116680,107500],{"class":213},[203,116682,259],{"class":209},[203,116684,107505],{"class":213},[203,116686,30881],{"class":262},[203,116688,114776],{"class":213},[203,116690,30881],{"class":262},[203,116692,114781],{"class":213},[19,116694,116695,116696,28443],{},"这能避免无效动作直接写入 ",[200,116697,101134],{},[174,116699,116701],{"id":116700},"忘记返回-info","忘记返回 info",[19,116703,116541,116704,101076,116706,116708],{},[200,116705,70114],{},[200,116707,107192],{}," 都会返回 info：",[194,116710,116711],{"className":30436,"code":113451,"language":30438,"meta":27,"style":27},[200,116712,116713,116721],{"__ignoreMap":27},[203,116714,116715,116717,116719],{"class":205,"line":206},[203,116716,113458],{"class":213},[203,116718,259],{"class":209},[203,116720,113463],{"class":213},[203,116722,116723,116725,116727],{"class":205,"line":124},[203,116724,113468],{"class":213},[203,116726,259],{"class":209},[203,116728,113473],{"class":213},[19,116730,116731,116732,28443],{},"即使暂时没有额外信息，也返回 ",[200,116733,32517],{},[14,116735,116737],{"id":116736},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,116739,116740],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[157,116742,116743,116746,116749,116752,116755,116758],{},[160,116744,116745],{},"更稳定的 reward。",[160,116747,116748],{},"合理的 episode 长度。",[160,116750,116751],{},"可重复的随机目标采样。",[160,116753,116754],{},"render 接口。",[160,116756,116757],{},"环境注册代码。",[160,116759,116760],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,116762,116763],{},"如果只是自己写训练循环，最小形式是：",[194,116765,116767],{"className":30436,"code":116766,"language":30438,"meta":27,"style":27},"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",[200,116768,116769,116777,116793,116797,116813,116822,116831,116841],{"__ignoreMap":27},[203,116770,116771,116773,116775],{"class":205,"line":206},[203,116772,116402],{"class":213},[203,116774,259],{"class":209},[203,116776,115000],{"class":213},[203,116778,116779,116781,116783,116785,116787,116789,116791],{"class":205,"line":124},[203,116780,113458],{"class":213},[203,116782,259],{"class":209},[203,116784,115010],{"class":213},[203,116786,114624],{"class":5306},[203,116788,259],{"class":209},[203,116790,405],{"class":262},[203,116792,220],{"class":213},[203,116794,116795],{"class":205,"line":1269},[203,116796,2489],{"emptyLinePlaceholder":131},[203,116798,116799,116801,116803,116805,116807,116809,116811],{"class":205,"line":1284},[203,116800,3114],{"class":209},[203,116802,101559],{"class":213},[203,116804,26101],{"class":209},[203,116806,32501],{"class":262},[203,116808,214],{"class":213},[203,116810,6500],{"class":262},[203,116812,30844],{"class":213},[203,116814,116815,116818,116820],{"class":205,"line":1290},[203,116816,116817],{"class":213},"    action ",[203,116819,259],{"class":209},[203,116821,115079],{"class":213},[203,116823,116824,116827,116829],{"class":205,"line":1304},[203,116825,116826],{"class":213},"    obs, reward, terminated, truncated, info ",[203,116828,259],{"class":209},[203,116830,113473],{"class":213},[203,116832,116833,116835,116837,116839],{"class":205,"line":1310},[203,116834,3190],{"class":209},[203,116836,115145],{"class":213},[203,116838,115148],{"class":209},[203,116840,115151],{"class":213},[203,116842,116843,116846,116848],{"class":205,"line":1401},[203,116844,116845],{"class":213},"        obs, info ",[203,116847,259],{"class":209},[203,116849,113463],{"class":213},[14,116851,116853],{"id":116852},"_9本章小结","9.本章小结",[19,116855,116856],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[194,116858,116861],{"className":116859,"code":116860,"language":5277,"meta":27},[5275],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[200,116862,116860],{"__ignoreMap":27},[19,116864,116865],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5216,116867,116868],{},"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":27,"searchDepth":124,"depth":124,"links":116870},[116871,116872,116873,116880,116884,116885,116886,116896,116897],{"id":100704,"depth":124,"text":100705},{"id":100827,"depth":124,"text":100828},{"id":101102,"depth":124,"text":101103,"children":116874},[116875,116877,116879],{"id":113682,"depth":1269,"text":116876},"terminated 和 truncated 的区别",{"id":113785,"depth":1269,"text":116878},"observation_space 和 action_space",{"id":113912,"depth":1269,"text":113913},{"id":101310,"depth":124,"text":101311,"children":116881},[116882,116883],{"id":101630,"depth":1269,"text":101630},{"id":101766,"depth":1269,"text":101766},{"id":102373,"depth":124,"text":102374},{"id":102405,"depth":124,"text":102406},{"id":102510,"depth":124,"text":102511,"children":116887},[116888,116889,116891,116892,116894,116895],{"id":116537,"depth":1269,"text":116538},{"id":116559,"depth":1269,"text":116890},"data.ctrl[:] = action 维度错误",{"id":116594,"depth":1269,"text":116595},{"id":116618,"depth":1269,"text":116893},"observation_space 维度和 obs 不一致",{"id":116668,"depth":1269,"text":116669},{"id":116700,"depth":1269,"text":116701},{"id":116736,"depth":124,"text":116737},{"id":116852,"depth":124,"text":116853},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113435,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116904,"title":116905,"body":116906,"description":117329,"extension":129,"meta":117330,"navigation":131,"path":117331,"seo":117332,"stem":117333,"__hash__":117334},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116907,"toc":117319},[116908,116912,116915,116918,116938,116944,116950,116960,116963,116966,116986,116989,116993,116996,117002,117005,117019,117022,117025,117099,117102,117108,117111,117134,117137,117187,117190,117196,117199,117202,117205,117224,117227,117233,117236,117239,117242,117262,117265,117268,117271,117316],[10,116909,116911],{"id":116910},"mujoco-学习","MuJoCo 学习",[19,116913,116914],{},"初版",[19,116916,116917],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[157,116919,116920,116923,116926,116935],{},[160,116921,116922],{},"MuJoCo 模型文件在描述什么。",[160,116924,116925],{},"Python 代码怎样读取和推进仿真。",[160,116927,116928,426,116930,426,116932,116934],{},[200,116929,104088],{},[200,116931,104418],{},[200,116933,104421],{}," 这些数组为什么重要。",[160,116936,116937],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,116939,116940,116941,116943],{},"默认环境为 Fedora 44、Python >= 3.10、",[200,116942,101085],{}," 官方 Python bindings。",[19,116945,116946,116947,116949],{},"注意：本文禁止使用 ",[200,116948,101070],{},"。所有示例均使用：",[194,116951,116952],{"className":30436,"code":101636,"language":30438,"meta":27,"style":27},[200,116953,116954],{"__ignoreMap":27},[203,116955,116956,116958],{"class":205,"line":206},[203,116957,30450],{"class":209},[203,116959,101359],{"class":213},[14,116961,116962],{"id":116962},"适合谁阅读",[19,116964,116965],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[157,116967,116968,116971,116974,116977],{},[160,116969,116970],{},"没学过 MuJoCo，只会一点 Python。",[160,116972,116973],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[160,116975,116976],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[160,116978,116979,116980,116982,116983,116985],{},"以前接触过 ",[200,116981,101070],{},"，现在想迁移到官方 ",[200,116984,101079],{}," Python bindings。",[19,116987,116988],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,116990,116992],{"id":116991},"mujoco-到底是什么","MuJoCo 到底是什么",[19,116994,116995],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[194,116997,117000],{"className":116998,"code":116999,"language":5277,"meta":27},[5275],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[200,117001,116999],{"__ignoreMap":27},[19,117003,117004],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[157,117006,117007,117010,117013,117016],{},[160,117008,117009],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[160,117011,117012],{},"快速测试控制算法，不必一开始就上真实机器人。",[160,117014,117015],{},"生成强化学习环境。",[160,117017,117018],{},"采集状态、动作、图像、奖励等训练数据。",[14,117020,117021],{"id":117021},"学习前的心智模型",[19,117023,117024],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[351,117026,117027,117039],{},[354,117028,117029],{},[357,117030,117031,117034,117037],{},[360,117032,117033],{"align":23827},"部分",[360,117035,117036],{"align":23827},"负责什么",[360,117038,21277],{"align":23827},[398,117040,117041,117052,117064,117076,117088],{},[357,117042,117043,117046,117049],{},[403,117044,117045],{"align":23827},"MJCF XML",[403,117047,117048],{"align":23827},"定义世界和机器人结构",[403,117050,117051],{"align":23827},"地面、盒子、关节、电机、摄像头",[357,117053,117054,117058,117061],{},[403,117055,117056],{"align":23827},[200,117057,100767],{},[403,117059,117060],{"align":23827},"编译后的静态模型",[403,117062,117063],{"align":23827},"有几个关节、有几个电机、时间步长是多少",[357,117065,117066,117070,117073],{},[403,117067,117068],{"align":23827},[200,117069,100777],{},[403,117071,117072],{"align":23827},"运行中的动态状态",[403,117074,117075],{"align":23827},"当前时间、位置、速度、电机输入",[357,117077,117078,117082,117085],{},[403,117079,117080],{"align":23827},[200,117081,101273],{},[403,117083,117084],{"align":23827},"推进一步物理仿真",[403,117086,117087],{"align":23827},"根据重力、力、碰撞更新状态",[357,117089,117090,117093,117096],{},[403,117091,117092],{"align":23827},"Viewer \u002F Renderer",[403,117094,117095],{"align":23827},"把仿真显示出来",[403,117097,117098],{"align":23827},"打开窗口或保存图片",[19,117100,117101],{},"一句话总结：",[194,117103,117106],{"className":117104,"code":117105,"language":5277,"meta":27},[5275],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[200,117107,117105],{"__ignoreMap":27},[19,117109,117110],{},"参考来源：",[1221,117112,117113,117120,117127],{},[160,117114,117115,117116],{},"MuJoCo Python 官方文档：",[452,117117,117118],{"href":117118,"rel":117119},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23956],[160,117121,117122,117123],{},"MuJoCo XML Reference：",[452,117124,117125],{"href":117125,"rel":117126},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23956],[160,117128,117129,117130],{},"MuJoCo Overview：",[452,117131,117132],{"href":117132,"rel":117133},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23956],[14,117135,117136],{"id":117136},"章节目录",[157,117138,117139,117145,117151,117157,117163,117169,117175,117181],{},[160,117140,117141],{},[452,117142,117144],{"href":117143},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[160,117146,117147],{},[452,117148,117150],{"href":117149},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[160,117152,117153],{},[452,117154,117156],{"href":117155},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[160,117158,117159],{},[452,117160,117162],{"href":117161},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[160,117164,117165],{},[452,117166,117168],{"href":117167},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[160,117170,117171],{},[452,117172,117174],{"href":117173},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[160,117176,117177],{},[452,117178,117180],{"href":117179},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[160,117182,117183],{},[452,117184,117186],{"href":117185},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117188,117189],{"id":117189},"推荐学习路线",[194,117191,117194],{"className":117192,"code":117193,"language":5277,"meta":27},[5275],"环境安装\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",[200,117195,117193],{"__ignoreMap":27},[19,117197,117198],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117200,117201],{"id":117201},"建议的目录结构",[19,117203,117204],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[194,117206,117208],{"className":23913,"code":117207,"language":23915,"meta":27,"style":27},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[200,117209,117210,117218],{"__ignoreMap":27},[203,117211,117212,117214,117216],{"class":205,"line":206},[203,117213,101324],{"class":2052},[203,117215,29274],{"class":262},[203,117217,101329],{"class":318},[203,117219,117220,117222],{"class":205,"line":124},[203,117221,101334],{"class":262},[203,117223,101329],{"class":318},[19,117225,117226],{},"每一章的代码都单独保存：",[194,117228,117231],{"className":117229,"code":117230,"language":5277,"meta":27},[5275],"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",[200,117232,117230],{"__ignoreMap":27},[19,117234,117235],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117237,117238],{"id":117238},"学习方法",[19,117240,117241],{},"每章建议按这个顺序操作：",[157,117243,117244,117247,117250,117253,117256,117259],{},[160,117245,117246],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[160,117248,117249],{},"复制最小可运行代码，保存成指定文件。",[160,117251,117252],{},"运行代码，确认没有报错。",[160,117254,117255],{},"对照“运行结果说明”理解输出。",[160,117257,117258],{},"做“验证步骤”，主动改一两个参数。",[160,117260,117261],{},"遇到报错先看“常见错误与解决方案”。",[19,117263,117264],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117266,117267],{"id":117267},"全局排错顺序",[19,117269,117270],{},"遇到问题时，按下面顺序查：",[157,117272,117273,117279,117285,117290,117293,117296,117303,117313],{},[160,117274,117275,117276],{},"Python 环境是否激活：",[200,117277,117278],{},"which python",[160,117280,117281,117282],{},"MuJoCo 是否能导入：",[200,117283,117284],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[160,117286,117287,117288],{},"是否误装了 ",[200,117289,101070],{},[160,117291,117292],{},"XML 标签是否闭合、属性是否拼写正确",[160,117294,117295],{},"actuator 引用的 joint 名字是否存在",[160,117297,117298,117300,117301],{},[200,117299,101134],{}," 的长度是否等于 ",[200,117302,102216],{},[160,117304,105643,117305,82597,117307,117309,117310],{},[200,117306,104088],{},[200,117308,104418],{}," 后是否调用了 ",[200,117311,117312],{},"mujoco.mj_forward",[160,117314,117315],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5216,117317,117318],{},"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":27,"searchDepth":124,"depth":124,"links":117320},[117321,117322,117323,117324,117325,117326,117327,117328],{"id":116962,"depth":124,"text":116962},{"id":116991,"depth":124,"text":116992},{"id":117021,"depth":124,"text":117021},{"id":117136,"depth":124,"text":117136},{"id":117189,"depth":124,"text":117189},{"id":117201,"depth":124,"text":117201},{"id":117238,"depth":124,"text":117238},{"id":117267,"depth":124,"text":117267},"仿真搭建。",{"category":23469},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116905,"description":117329},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117336,"title":117337,"body":117338,"description":23467,"extension":129,"meta":117793,"navigation":131,"path":117794,"seo":117795,"stem":117796,"__hash__":117797},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117339,"toc":117791},[117340,117343,117346,117352,117788],[10,117341,117337],{"id":117342},"_1-最常用的基本操作更新",[19,117344,117345],{},"装linux系统教程：",[19,117347,117348],{},[452,117349,117350],{"href":117350,"rel":117351},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23956],[194,117353,117357],{"className":117354,"code":117355,"language":117356,"meta":27,"style":27},"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",[200,117358,117359,117364,117369,117378,117383,117392,117397,117417,117422,117433,117438,117447,117452,117480,117485,117504,117509,117528,117532,117537,117553,117557,117562,117592,117596,117601,117617,117621,117626,117641,117645,117650,117666,117670,117675,117687,117699,117703,117708,117725,117729,117734,117752,117756,117761,117770,117774,117779],{"__ignoreMap":27},[203,117360,117361],{"class":205,"line":206},[203,117362,117363],{"class":272},"#更新相关的知识\n",[203,117365,117366],{"class":205,"line":124},[203,117367,117368],{"class":272},"# 更新软件包列表（从服务器获取最新软件信息）\n",[203,117370,117371,117373,117376],{"class":205,"line":1269},[203,117372,24634],{"class":2052},[203,117374,117375],{"class":318}," apt",[203,117377,26300],{"class":318},[203,117379,117380],{"class":205,"line":1284},[203,117381,117382],{"class":272},"# 升级所有可更新的软件包（不删除旧包）\n",[203,117384,117385,117387,117389],{"class":205,"line":1290},[203,117386,24634],{"class":2052},[203,117388,117375],{"class":318},[203,117390,117391],{"class":318}," upgrade\n",[203,117393,117394],{"class":205,"line":1304},[203,117395,117396],{"class":272},"#更新和升级软件包\n",[203,117398,117399,117401,117403,117406,117408,117410,117412,117415],{"class":205,"line":1310},[203,117400,24634],{"class":2052},[203,117402,117375],{"class":318},[203,117404,117405],{"class":318}," update",[203,117407,26248],{"class":213},[203,117409,24634],{"class":2052},[203,117411,117375],{"class":318},[203,117413,117414],{"class":318}," upgrade",[203,117416,101039],{"class":262},[203,117418,117419],{"class":205,"line":1401},[203,117420,117421],{"class":272},"#列出可更新的软件包及版本信息\n",[203,117423,117424,117427,117430],{"class":205,"line":1407},[203,117425,117426],{"class":2052},"apt",[203,117428,117429],{"class":318}," list",[203,117431,117432],{"class":262}," --upgradable\n",[203,117434,117435],{"class":205,"line":1419},[203,117436,117437],{"class":272},"#彻底升级（处理依赖关系，可能删除旧包）\n",[203,117439,117440,117442,117444],{"class":205,"line":1701},[203,117441,24634],{"class":2052},[203,117443,117375],{"class":318},[203,117445,117446],{"class":318}," full-upgrade\n",[203,117448,117449],{"class":205,"line":1706},[203,117450,117451],{"class":272},"#设置指定版本\n",[203,117453,117454,117456,117458,117460,117462,117465,117467,117469,117471,117473,117476,117478],{"class":205,"line":1712},[203,117455,24634],{"class":2052},[203,117457,117375],{"class":318},[203,117459,23925],{"class":318},[203,117461,28960],{"class":209},[203,117463,117464],{"class":318},"package_nam",[203,117466,288],{"class":213},[203,117468,1174],{"class":209},[203,117470,259],{"class":318},[203,117472,1124],{"class":209},[203,117474,117475],{"class":318},"version_numbe",[203,117477,884],{"class":213},[203,117479,51365],{"class":209},[203,117481,117482],{"class":205,"line":1717},[203,117483,117484],{"class":272},"#只安装软件包不升级\n",[203,117486,117487,117489,117491,117493,117495,117497,117499,117501],{"class":205,"line":1731},[203,117488,24634],{"class":2052},[203,117490,117375],{"class":318},[203,117492,23925],{"class":318},[203,117494,28960],{"class":209},[203,117496,117464],{"class":318},[203,117498,288],{"class":213},[203,117500,1174],{"class":209},[203,117502,117503],{"class":262}," --no-upgrade\n",[203,117505,117506],{"class":205,"line":1736},[203,117507,117508],{"class":272},"#只升级，不存在就不安装\n",[203,117510,117511,117513,117515,117517,117519,117521,117523,117525],{"class":205,"line":1742},[203,117512,24634],{"class":2052},[203,117514,117375],{"class":318},[203,117516,23925],{"class":318},[203,117518,28960],{"class":209},[203,117520,117464],{"class":318},[203,117522,288],{"class":213},[203,117524,1174],{"class":209},[203,117526,117527],{"class":262}," --only-upgrade\n",[203,117529,117530],{"class":205,"line":1763},[203,117531,2489],{"emptyLinePlaceholder":131},[203,117533,117534],{"class":205,"line":1768},[203,117535,117536],{"class":272},"#安装指定的软件命令\n",[203,117538,117539,117541,117543,117545,117547,117549,117551],{"class":205,"line":1782},[203,117540,24634],{"class":2052},[203,117542,117375],{"class":318},[203,117544,23925],{"class":318},[203,117546,28960],{"class":209},[203,117548,117464],{"class":318},[203,117550,288],{"class":213},[203,117552,51365],{"class":209},[203,117554,117555],{"class":205,"line":1787},[203,117556,2489],{"emptyLinePlaceholder":131},[203,117558,117559],{"class":205,"line":1816},[203,117560,117561],{"class":272},"#安装多个软件包\n",[203,117563,117564,117566,117568,117570,117572,117575,117578,117580,117582,117585,117587,117589],{"class":205,"line":1821},[203,117565,24634],{"class":2052},[203,117567,117375],{"class":318},[203,117569,23925],{"class":318},[203,117571,28960],{"class":209},[203,117573,117574],{"class":318},"package_",[203,117576,117577],{"class":209},"1>",[203,117579,28960],{"class":209},[203,117581,117574],{"class":318},[203,117583,117584],{"class":209},"2>",[203,117586,28960],{"class":209},[203,117588,117574],{"class":318},[203,117590,117591],{"class":209},"3>\n",[203,117593,117594],{"class":205,"line":1838},[203,117595,2489],{"emptyLinePlaceholder":131},[203,117597,117598],{"class":205,"line":1843},[203,117599,117600],{"class":272},"#更新指定的软件命令\n",[203,117602,117603,117605,117607,117609,117611,117613,117615],{"class":205,"line":1848},[203,117604,24634],{"class":2052},[203,117606,117375],{"class":318},[203,117608,117405],{"class":318},[203,117610,28960],{"class":209},[203,117612,117464],{"class":318},[203,117614,288],{"class":213},[203,117616,51365],{"class":209},[203,117618,117619],{"class":205,"line":1853},[203,117620,2489],{"emptyLinePlaceholder":131},[203,117622,117623],{"class":205,"line":1867},[203,117624,117625],{"class":272},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[203,117627,117628,117630,117633,117635,117637,117639],{"class":205,"line":1872},[203,117629,117426],{"class":2052},[203,117631,117632],{"class":318}," show",[203,117634,28960],{"class":209},[203,117636,117464],{"class":318},[203,117638,288],{"class":213},[203,117640,51365],{"class":209},[203,117642,117643],{"class":205,"line":2666},[203,117644,2489],{"emptyLinePlaceholder":131},[203,117646,117647],{"class":205,"line":2680},[203,117648,117649],{"class":272},"#删除软件包命令\n",[203,117651,117652,117654,117656,117658,117660,117662,117664],{"class":205,"line":2688},[203,117653,24634],{"class":2052},[203,117655,117375],{"class":318},[203,117657,26137],{"class":318},[203,117659,28960],{"class":209},[203,117661,117464],{"class":318},[203,117663,288],{"class":213},[203,117665,51365],{"class":209},[203,117667,117668],{"class":205,"line":2693},[203,117669,2489],{"emptyLinePlaceholder":131},[203,117671,117672],{"class":205,"line":2699},[203,117673,117674],{"class":272},"# 清理旧版本和缓存（释放磁盘空间）\n",[203,117676,117677,117679,117681,117684],{"class":205,"line":2705},[203,117678,24634],{"class":2052},[203,117680,117375],{"class":318},[203,117682,117683],{"class":318}," autoremove",[203,117685,117686],{"class":272},"  # 删除不再需要的依赖和库文件\n",[203,117688,117689,117691,117693,117696],{"class":205,"line":2710},[203,117690,24634],{"class":2052},[203,117692,117375],{"class":318},[203,117694,117695],{"class":318}," clean",[203,117697,117698],{"class":272},"       # 清理下载的缓存包\n",[203,117700,117701],{"class":205,"line":8038},[203,117702,2489],{"emptyLinePlaceholder":131},[203,117704,117705],{"class":205,"line":8062},[203,117706,117707],{"class":272},"#移除软件包及配置文件\n",[203,117709,117710,117712,117714,117717,117719,117721,117723],{"class":205,"line":8067},[203,117711,24634],{"class":2052},[203,117713,117375],{"class":318},[203,117715,117716],{"class":318}," purge",[203,117718,28960],{"class":209},[203,117720,117464],{"class":318},[203,117722,288],{"class":213},[203,117724,51365],{"class":209},[203,117726,117727],{"class":205,"line":8073},[203,117728,2489],{"emptyLinePlaceholder":131},[203,117730,117731],{"class":205,"line":8100},[203,117732,117733],{"class":272},"#查找软件包命令\n",[203,117735,117736,117738,117740,117743,117745,117748,117750],{"class":205,"line":8105},[203,117737,24634],{"class":2052},[203,117739,117375],{"class":318},[203,117741,117742],{"class":318}," search",[203,117744,28960],{"class":209},[203,117746,117747],{"class":318},"keywor",[203,117749,528],{"class":213},[203,117751,51365],{"class":209},[203,117753,117754],{"class":205,"line":8111},[203,117755,2489],{"emptyLinePlaceholder":131},[203,117757,117758],{"class":205,"line":8123},[203,117759,117760],{"class":272},"#列出所有已安装的包\n",[203,117762,117763,117765,117767],{"class":205,"line":8135},[203,117764,117426],{"class":2052},[203,117766,117429],{"class":318},[203,117768,117769],{"class":262}," --installed\n",[203,117771,117772],{"class":205,"line":8147},[203,117773,2489],{"emptyLinePlaceholder":131},[203,117775,117776],{"class":205,"line":9806},[203,117777,117778],{"class":272},"#列出所有已安装的包的版本信息\n",[203,117780,117781,117783,117785],{"class":205,"line":9831},[203,117782,117426],{"class":2052},[203,117784,117429],{"class":318},[203,117786,117787],{"class":262}," --all-versions\n",[5216,117789,117790],{},"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":27,"searchDepth":124,"depth":124,"links":117792},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117337,"description":23467},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117799,"title":117800,"body":117801,"description":23467,"extension":129,"meta":118542,"navigation":131,"path":118543,"seo":118544,"stem":118545,"__hash__":118546},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117802,"toc":118529},[117803,117806,117810,117813,117819,117823,117827,117833,117838,117843,117848,117853,117858,117861,117864,117867,117870,117874,117877,117882,117885,117890,117893,117898,117905,117908,117911,117914,117917,117920,117931,117935,117939,117944,117949,117953,117958,117962,117967,117971,117975,117980,117983,118028,118033,118037,118041,118046,118052,118057,118067,118072,118082,118087,118092,118119,118123,118126,118131,118134,118159,118163,118168,118171,118176,118181,118201,118206,118209,118224,118228,118281,118284,118289,118293,118296,118311,118314,118317,118322,118326,118330,118333,118337,118341,118344,118349,118354,118358,118365,118373,118376,118383,118388,118393,118396,118401,118408,118413,118420,118424,118426,118431,118435,118438,118441,118446,118449,118454,118457,118462,118467,118472,118476,118481,118485,118526],[10,117804,117800],{"id":117805},"_2-linux装机教程",[14,117807,117809],{"id":117808},"_21-实体机","2.1 实体机",[19,117811,117812],{},"使用清华源：（Ubuntu24.04）",[19,117814,117815],{},[452,117816,117817],{"href":117817,"rel":117818},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23956],[14,117820,117822],{"id":117821},"_22-普通虚拟机","2.2 普通虚拟机",[174,117824,117826],{"id":117825},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,117828,117829],{},[452,117830,117831],{"href":117831,"rel":117832},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23956],[19,117834,117835],{},[25,117836],{"alt":27,"src":117837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,117839,117840],{},[25,117841],{"alt":27,"src":117842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,117844,117845],{},[25,117846],{"alt":27,"src":117847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,117849,117850],{},[25,117851],{"alt":27,"src":117852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,117854,117855],{},[25,117856],{"alt":27,"src":117857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,117859,117860],{},"内存4G（4096MB）；",[19,117862,117863],{},"CPU给4个核；",[19,117865,117866],{},"硬盘动态分配60G；",[19,117868,117869],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[174,117871,117873],{"id":117872},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,117875,117876],{},"按照1.1的步骤下载Ubuntu",[19,117878,117879],{},[25,117880],{"alt":27,"src":117881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,117883,117884],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,117886,117887],{},[25,117888],{"alt":27,"src":117889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,117891,117892],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,117894,117895],{},[25,117896],{"alt":27,"src":117897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,117899,117900,117901,117904],{},"选择“正常安装”(找不到都用Alt+F7)， ",[363,117902,117903],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,117906,117907],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,117909,117910],{},"将改动写入磁盘吗 继续",[19,117912,117913],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,117915,117916],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,117918,117919],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,117921,117922,117923,117926,117927,117930],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[363,117924,117925],{},"除了"," 选不发送系统信息与不升级之外， ",[363,117928,117929],{},"其它"," 都跳过或前进）",[174,117932,117934],{"id":117933},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22088,117936,117938],{"id":117937},"_2231-全屏","2.2.3.1 全屏",[19,117940,117941],{},[25,117942],{"alt":27,"src":117943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,117945,117946],{},[25,117947],{"alt":27,"src":117948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22088,117950,117952],{"id":117951},"_2232-文件交换","2.2.3.2 文件交换",[19,117954,117955],{},[25,117956],{"alt":27,"src":117957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22088,117959,117961],{"id":117960},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,117963,117964],{},[25,117965],{"alt":27,"src":117966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,117968,117970],{"id":117969},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[174,117972,117974],{"id":117973},"_231-简介与优缺点","2.3.1 简介与优缺点",[157,117976,117977],{},[160,117978,117979],{},"什么情况下推荐？",[19,117981,117982],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[157,117984,117985],{"start":124},[160,117986,117987,117988],{},"优缺点：",[157,117989,117990,118020],{},[160,117991,117992,117993],{},"优点：",[157,117994,117995,117998,118005,118008,118011,118014,118017],{},[160,117996,117997],{},"WSL2是最好的Linux发行版;(bushi)",[160,117999,118000,118001,118004],{},"性能损耗极低。且比在Windows上跑深度性能 ",[363,118002,118003],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[160,118006,118007],{},"非常方便调用USB设备，可以USB直通;",[160,118009,118010],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[160,118012,118013],{},"非常方便Win与WSL2互相传文件等协同操作;",[160,118015,118016],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[160,118018,118019],{},"非常方便使用Windows的VScode远程开发;",[160,118021,118022,118023],{},"缺点：",[157,118024,118025],{},[160,118026,118027],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118029,118030],{},[25,118031],{"alt":27,"src":118032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[174,118034,118036],{"id":118035},"_232-安装教程","2.3.2 安装教程",[22088,118038,118040],{"id":118039},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[157,118042,118043],{},[160,118044,118045],{},"方法一(图形界面)",[19,118047,118048,118049,24676],{},"用Win+R输入",[200,118050,118051],{},"appwiz.cpl",[19,118053,118054],{},[25,118055],{"alt":27,"src":118056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118058,118059,118060,118063,118064,26531],{},"点击OK进入 ",[363,118061,118062],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[363,118065,118066],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118068,118069],{},[25,118070],{"alt":27,"src":118071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118073,118074,118075,101076,118078,118081],{},"选择 ",[363,118076,118077],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[363,118079,118080],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118083,118084],{},[25,118085],{"alt":27,"src":118086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[157,118088,118089],{"start":124},[160,118090,118091],{},"方法二(命令行)",[194,118093,118097],{"className":118094,"code":118095,"language":118096,"meta":27,"style":27},"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",[200,118098,118099,118104,118109,118114],{"__ignoreMap":27},[203,118100,118101],{"class":205,"line":206},[203,118102,118103],{},"# 开启 Linux 子系统\n",[203,118105,118106],{"class":205,"line":124},[203,118107,118108],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[203,118110,118111],{"class":205,"line":1269},[203,118112,118113],{},"# 开启虚拟机平台\n",[203,118115,118116],{"class":205,"line":1284},[203,118117,118118],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22088,118120,118122],{"id":118121},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118124,118125],{},"用管理员权限打开powershell",[19,118127,118128],{},[25,118129],{"alt":27,"src":118130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118132,118133],{},"升级WSL并设置默认版本为WSL2",[194,118135,118137],{"className":118094,"code":118136,"language":118096,"meta":27,"style":27},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[200,118138,118139,118144,118149,118154],{"__ignoreMap":27},[203,118140,118141],{"class":205,"line":206},[203,118142,118143],{},"# 更新 wsl\n",[203,118145,118146],{"class":205,"line":124},[203,118147,118148],{},"wsl --update\n",[203,118150,118151],{"class":205,"line":1269},[203,118152,118153],{},"# 将 wsl 版本设置为 wsl2\n",[203,118155,118156],{"class":205,"line":1284},[203,118157,118158],{},"wsl --set-default-version 2\n",[22088,118160,118162],{"id":118161},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[157,118164,118165],{},[160,118166,118167],{},"方式一(商店下载)",[19,118169,118170],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118172,118173],{},[25,118174],{"alt":27,"src":118175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[157,118177,118178],{"start":124},[160,118179,118180],{},"方式二(命令行安装)",[194,118182,118184],{"className":118094,"code":118183,"language":118096,"meta":27,"style":27},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[200,118185,118186,118191,118196],{"__ignoreMap":27},[203,118187,118188],{"class":205,"line":206},[203,118189,118190],{},"# 列出可安装的 Linux 版本\n",[203,118192,118193],{"class":205,"line":124},[203,118194,118195],{},"#（需要科学手段）\n",[203,118197,118198],{"class":205,"line":1269},[203,118199,118200],{},"wsl --list --online\n",[19,118202,118203],{},[25,118204],{"alt":27,"src":118205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118207,118208],{},"选择对应发行版并安装",[194,118210,118212],{"className":118094,"code":118211,"language":118096,"meta":27,"style":27},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[200,118213,118214,118219],{"__ignoreMap":27},[203,118215,118216],{"class":205,"line":206},[203,118217,118218],{},"# Ubuntu安装完毕后需要重启系统\n",[203,118220,118221],{"class":205,"line":124},[203,118222,118223],{},"wsl --install -d Ubuntu-24.04\n",[22088,118225,118227],{"id":118226},"_2324-查看系统状态","2.3.2.4 查看系统状态",[194,118229,118231],{"className":118094,"code":118230,"language":118096,"meta":27,"style":27},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[200,118232,118233,118238,118243,118248,118253,118257,118261,118266,118271,118276],{"__ignoreMap":27},[203,118234,118235],{"class":205,"line":206},[203,118236,118237],{},"# 查看 wsl\n",[203,118239,118240],{"class":205,"line":124},[203,118241,118242],{},"wsl -l\n",[203,118244,118245],{"class":205,"line":1269},[203,118246,118247],{},"# 查看 wsl 运行版本或模式\n",[203,118249,118250],{"class":205,"line":1284},[203,118251,118252],{},"wsl -l -v\n",[203,118254,118255],{"class":205,"line":1290},[203,118256,2489],{"emptyLinePlaceholder":131},[203,118258,118259],{"class":205,"line":1304},[203,118260,2489],{"emptyLinePlaceholder":131},[203,118262,118263],{"class":205,"line":1310},[203,118264,118265],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[203,118267,118268],{"class":205,"line":1401},[203,118269,118270],{},"wsl --set-version \u003Cdistro> 2\n",[203,118272,118273],{"class":205,"line":1407},[203,118274,118275],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[203,118277,118278],{"class":205,"line":1419},[203,118279,118280],{},"wsl --unregister \u003Cdistro>\n",[19,118282,118283],{},"输出Version为2即正常",[19,118285,118286],{},[25,118287],{"alt":27,"src":118288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22088,118290,118292],{"id":118291},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118294,118295],{},"直接在Powershell里输入wsl命令进入子系统",[194,118297,118299],{"className":118094,"code":118298,"language":118096,"meta":27,"style":27},"# 进入子系统\nwsl\n",[200,118300,118301,118306],{"__ignoreMap":27},[203,118302,118303],{"class":205,"line":206},[203,118304,118305],{},"# 进入子系统\n",[203,118307,118308],{"class":205,"line":124},[203,118309,118310],{},"wsl\n",[19,118312,118313],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118315,118316],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118318,118319],{},[25,118320],{"alt":27,"src":118321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[174,118323,118325],{"id":118324},"_233-配置各种环境","2.3.3 配置各种环境",[22088,118327,118329],{"id":118328},"_2331-换源","2.3.3.1 换源",[19,118331,118332],{},"(同实体机LINUX，往下找教程)",[22088,118334,118336],{"id":118335},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23000,118338,118340],{"id":118339},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118342,118343],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118345,118346],{},[25,118347],{"alt":27,"src":118348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118350,118351],{},[25,118352],{"alt":27,"src":118353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23000,118355,118357],{"id":118356},"_23322-cuda","2.3.3.2.2 CUDA",[19,118359,118360,118361],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[452,118362,118363],{"href":118363,"rel":118364},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23956],[19,118366,118367,118370],{},[25,118368],{"alt":27,"src":118369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[25,118371],{"alt":27,"src":118372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118374,118375],{},"在下方的网站，选择合适的版本。",[19,118377,118378,118379],{},"WSL2 专属 CUDA 指南：",[452,118380,118381],{"href":118381,"rel":118382},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23956],[19,118384,118385],{},[363,118386,118387],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118389,118390],{},[25,118391],{"alt":27,"src":118392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118394,118395],{},"挨行敲一遍",[19,118397,118398],{},[25,118399],{"alt":27,"src":118400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118402,118403,118404,118407],{},"敲完后，输入",[200,118405,118406],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118409,118410],{},[25,118411],{"alt":27,"src":118412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118414,118415,118416,118419],{},"（请详看下方教程的",[363,118417,118418],{},"安装CUDA的配置环境来看","如何配置环境）",[23000,118421,118423],{"id":118422},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118425,118332],{},[19,118427,118428],{},[25,118429],{"alt":27,"src":118430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22088,118432,118434],{"id":118433},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118436,118437],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118439,118440],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118442,118443],{},[25,118444],{"alt":27,"src":118445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118447,118448],{},"连接WSL2",[19,118450,118451],{},[25,118452],{"alt":27,"src":118453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118455,118456],{},"远程开发成功。",[19,118458,118459],{},[25,118460],{"alt":27,"src":118461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118463,118464],{},[25,118465],{"alt":27,"src":118466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118468,118469],{},[25,118470],{"alt":27,"src":118471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22088,118473,118475],{"id":118474},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118477,118478],{},[25,118479],{"alt":27,"src":118480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22088,118482,118484],{"id":118483},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[194,118486,118488],{"className":117354,"code":118487,"language":117356,"meta":27,"style":27},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[200,118489,118490,118498,118506,118517,118521],{"__ignoreMap":27},[203,118491,118492,118494,118496],{"class":205,"line":206},[203,118493,24634],{"class":2052},[203,118495,117375],{"class":318},[203,118497,26300],{"class":318},[203,118499,118500,118502,118504],{"class":205,"line":124},[203,118501,24634],{"class":2052},[203,118503,117375],{"class":318},[203,118505,117391],{"class":318},[203,118507,118508,118510,118512,118514],{"class":205,"line":1269},[203,118509,24634],{"class":2052},[203,118511,117375],{"class":318},[203,118513,23925],{"class":318},[203,118515,118516],{"class":318}," mesa-utils\n",[203,118518,118519],{"class":205,"line":1284},[203,118520,2489],{"emptyLinePlaceholder":131},[203,118522,118523],{"class":205,"line":1290},[203,118524,118525],{"class":272},"#然后重启wsl2即可\n",[5216,118527,118528],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":27,"searchDepth":124,"depth":124,"links":118530},[118531,118532,118537],{"id":117808,"depth":124,"text":117809},{"id":117821,"depth":124,"text":117822,"children":118533},[118534,118535,118536],{"id":117825,"depth":1269,"text":117826},{"id":117872,"depth":1269,"text":117873},{"id":117933,"depth":1269,"text":117934},{"id":117969,"depth":124,"text":117970,"children":118538},[118539,118540,118541],{"id":117973,"depth":1269,"text":117974},{"id":118035,"depth":1269,"text":118036},{"id":118324,"depth":1269,"text":118325},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117800,"description":23467},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118548,"title":118549,"body":118550,"description":23467,"extension":129,"meta":121486,"navigation":131,"path":121487,"seo":121488,"stem":121489,"__hash__":121490},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118551,"toc":121458},[118552,118555,118559,118565,118569,118575,118579,118767,118770,118775,118779,118783,118786,118789,118795,118800,118803,118806,118811,118844,118849,118853,118930,118933,118938,118942,118945,118984,118987,118996,119014,119019,119026,119143,119148,119151,119178,119183,119187,119196,119246,119253,119257,119260,119274,119281,119315,119320,119324,119347,119350,119355,119359,119362,119365,119368,119410,119414,119417,119420,119461,119465,119469,119472,119477,119482,119485,119508,119511,119519,119524,119527,119532,119537,119540,119545,119549,119554,119577,119582,119644,119652,119657,119662,119665,119670,119673,119678,119683,119701,119706,119712,119717,119731,119735,119738,119741,119744,119787,119790,119795,119896,119899,119904,119908,119912,119949,119953,119957,119961,120007,120011,120056,120060,120067,120075,120130,120133,120210,120213,120236,120240,120243,120248,120253,120261,120264,120269,120274,120279,120282,120287,120296,120299,120304,120307,120378,120383,120386,120391,120394,120399,120402,120407,120410,120415,120420,120423,120498,120501,120514,120519,120522,120536,120539,120568,120573,120602,120605,120610,120614,120619,120628,120631,120636,120639,120644,120647,120650,120655,120658,120663,120668,120671,120676,120679,120804,120809,120839,120842,120847,120852,120869,120872,120915,120918,120945,120950,120963,121106,121110,121115,121129,121132,121183,121186,121216,121219,121235,121240,121254,121257,121324,121329,121338,121343,121346,121358,121363,121370,121394,121397,121402,121405,121424,121429,121436,121448,121455],[10,118553,118549],{"id":118554},"_3-安装必备配置",[14,118556,118558],{"id":118557},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[194,118560,118563],{"className":118561,"code":118562,"language":5277},[5275],"  打开下方网站（注意，该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",[200,118564,118562],{"__ignoreMap":27},[174,118566,118568],{"id":118567},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[194,118570,118573],{"className":118571,"code":118572,"language":5277},[5275],"  输入以下命令\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",[200,118574,118572],{"__ignoreMap":27},[174,118576,118578],{"id":118577},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[194,118580,118584],{"className":118581,"code":118582,"language":118583,"meta":27,"style":27},"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",[200,118585,118586,118594,118605,118617,118631,118635,118645,118650,118654,118658,118663,118667,118679,118683,118688,118692,118703,118707,118723,118727,118738,118742,118747,118751,118759],{"__ignoreMap":27},[203,118587,118588,118590,118592],{"class":205,"line":206},[203,118589,24634],{"class":2052},[203,118591,117375],{"class":318},[203,118593,26300],{"class":318},[203,118595,118596,118598,118600,118602],{"class":205,"line":124},[203,118597,24634],{"class":2052},[203,118599,117375],{"class":318},[203,118601,23925],{"class":318},[203,118603,118604],{"class":318}," vim\n",[203,118606,118607,118609,118612,118614],{"class":205,"line":1269},[203,118608,24634],{"class":2052},[203,118610,118611],{"class":318}," rm",[203,118613,25383],{"class":262},[203,118615,118616],{"class":318}," \u002Fetc\u002Fapt\u002Fsources.list\n",[203,118618,118619,118621,118623,118625,118628],{"class":205,"line":1284},[203,118620,24634],{"class":2052},[203,118622,118611],{"class":318},[203,118624,25383],{"class":262},[203,118626,118627],{"class":318}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[203,118629,118630],{"class":262},"**\n",[203,118632,118633],{"class":205,"line":1290},[203,118634,2489],{"emptyLinePlaceholder":131},[203,118636,118637,118639,118642],{"class":205,"line":1304},[203,118638,24634],{"class":2052},[203,118640,118641],{"class":318}," vim",[203,118643,118644],{"class":318}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[203,118646,118647],{"class":205,"line":1310},[203,118648,118649],{"class":318},"```\n",[203,118651,118652],{"class":205,"line":1401},[203,118653,2489],{"emptyLinePlaceholder":131},[203,118655,118656],{"class":205,"line":1407},[203,118657,2489],{"emptyLinePlaceholder":131},[203,118659,118660],{"class":205,"line":1419},[203,118661,118662],{"class":2052},"选择好Ubuntu版本后，复制下方的内容。\n",[203,118664,118665],{"class":205,"line":1701},[203,118666,2489],{"emptyLinePlaceholder":131},[203,118668,118669,118671,118674,118677],{"class":205,"line":1706},[203,118670,440],{"class":209},[203,118672,118673],{"class":318},"[](",[203,118675,118676],{"class":2052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[203,118678,220],{"class":318},[203,118680,118681],{"class":205,"line":1712},[203,118682,2489],{"emptyLinePlaceholder":131},[203,118684,118685],{"class":205,"line":1717},[203,118686,118687],{"class":2052},"粘贴进去\n",[203,118689,118690],{"class":205,"line":1731},[203,118691,2489],{"emptyLinePlaceholder":131},[203,118693,118694,118696,118698,118701],{"class":205,"line":1736},[203,118695,440],{"class":209},[203,118697,118673],{"class":318},[203,118699,118700],{"class":2052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[203,118702,220],{"class":318},[203,118704,118705],{"class":205,"line":1742},[203,118706,2489],{"emptyLinePlaceholder":131},[203,118708,118709,118712,118715,118718,118720],{"class":205,"line":1763},[203,118710,118711],{"class":2052},"按一下ESC，然后英文冒号，输入",[203,118713,118714],{"class":318}," `",[203,118716,118717],{"class":2052},":wq!",[203,118719,1186],{"class":318},[203,118721,118722],{"class":2052},"然后回车\n",[203,118724,118725],{"class":205,"line":1768},[203,118726,2489],{"emptyLinePlaceholder":131},[203,118728,118729,118731,118733,118736],{"class":205,"line":1782},[203,118730,440],{"class":209},[203,118732,118673],{"class":318},[203,118734,118735],{"class":2052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[203,118737,220],{"class":318},[203,118739,118740],{"class":205,"line":1787},[203,118741,2489],{"emptyLinePlaceholder":131},[203,118743,118744],{"class":205,"line":1816},[203,118745,118746],{"class":2052},"输入以下命令\n",[203,118748,118749],{"class":205,"line":1821},[203,118750,2489],{"emptyLinePlaceholder":131},[203,118752,118753,118756],{"class":205,"line":1838},[203,118754,118755],{"class":318},"```",[203,118757,118758],{"class":2052},"Bash\n",[203,118760,118761,118763,118765],{"class":205,"line":1843},[203,118762,24634],{"class":2052},[203,118764,117375],{"class":318},[203,118766,26300],{"class":318},[19,118768,118769],{},"这里被替换成对应学校则成功",[19,118771,118772],{},[25,118773],{"alt":27,"src":118774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,118776,118778],{"id":118777},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[174,118780,118782],{"id":118781},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,118784,118785],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,118787,118788],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,118790,118791],{},[452,118792,118793],{"href":118793,"rel":118794},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23956],[19,118796,118797],{},[25,118798],{"alt":27,"src":118799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,118801,118802],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,118804,118805],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,118807,118808],{},[25,118809],{"alt":27,"src":118810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[194,118812,118814],{"className":117354,"code":118813,"language":117356,"meta":27,"style":27},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[200,118815,118816,118821,118828,118833],{"__ignoreMap":27},[203,118817,118818],{"class":205,"line":206},[203,118819,118820],{"class":272},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[203,118822,118823,118825],{"class":205,"line":124},[203,118824,101334],{"class":262},[203,118826,118827],{"class":318}," ~\u002FDownloads\n",[203,118829,118830],{"class":205,"line":1269},[203,118831,118832],{"class":272},"#下方chrome安装包名不一定是这个，根据名字来看\n",[203,118834,118835,118837,118839,118841],{"class":205,"line":1284},[203,118836,24634],{"class":2052},[203,118838,117375],{"class":318},[203,118840,23925],{"class":318},[203,118842,118843],{"class":318}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,118845,118846],{},[25,118847],{"alt":27,"src":118848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[174,118850,118852],{"id":118851},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[194,118854,118856],{"className":117354,"code":118855,"language":117356,"meta":27,"style":27},"# 老版\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",[200,118857,118858,118863,118871,118882,118887,118891,118896,118906,118914,118925],{"__ignoreMap":27},[203,118859,118860],{"class":205,"line":206},[203,118861,118862],{"class":272},"# 老版\n",[203,118864,118865,118867,118869],{"class":205,"line":124},[203,118866,24634],{"class":2052},[203,118868,117375],{"class":318},[203,118870,26300],{"class":318},[203,118872,118873,118875,118877,118879],{"class":205,"line":1269},[203,118874,24634],{"class":2052},[203,118876,117375],{"class":318},[203,118878,23925],{"class":318},[203,118880,118881],{"class":318}," neofetch\n",[203,118883,118884],{"class":205,"line":1284},[203,118885,118886],{"class":2052},"neofetch\n",[203,118888,118889],{"class":205,"line":1290},[203,118890,2489],{"emptyLinePlaceholder":131},[203,118892,118893],{"class":205,"line":1304},[203,118894,118895],{"class":272},"# 新版\n",[203,118897,118898,118900,118903],{"class":205,"line":1310},[203,118899,24634],{"class":2052},[203,118901,118902],{"class":318}," add-apt-repository",[203,118904,118905],{"class":318}," ppa:zhangsongcui3371\u002Ffastfetch\n",[203,118907,118908,118910,118912],{"class":205,"line":1401},[203,118909,24634],{"class":2052},[203,118911,117375],{"class":318},[203,118913,26300],{"class":318},[203,118915,118916,118918,118920,118922],{"class":205,"line":1407},[203,118917,24634],{"class":2052},[203,118919,117375],{"class":318},[203,118921,23925],{"class":318},[203,118923,118924],{"class":318}," fastfetch\n",[203,118926,118927],{"class":205,"line":1419},[203,118928,118929],{"class":2052},"fastfetch\n",[19,118931,118932],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,118934,118935],{},[25,118936],{"alt":27,"src":118937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[174,118939,118941],{"id":118940},"_323-移除snap应用","3.2.3 移除snap应用",[19,118943,118944],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[194,118946,118948],{"className":117354,"code":118947,"language":117356,"meta":27,"style":27},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[200,118949,118950,118962,118973],{"__ignoreMap":27},[203,118951,118952,118954,118956,118959],{"class":205,"line":206},[203,118953,24634],{"class":2052},[203,118955,26571],{"class":318},[203,118957,118958],{"class":318}," disable",[203,118960,118961],{"class":318}," snapd.service\n",[203,118963,118964,118966,118968,118970],{"class":205,"line":124},[203,118965,24634],{"class":2052},[203,118967,26571],{"class":318},[203,118969,118958],{"class":318},[203,118971,118972],{"class":318}," snapd.socket\n",[203,118974,118975,118977,118979,118981],{"class":205,"line":1269},[203,118976,24634],{"class":2052},[203,118978,26571],{"class":318},[203,118980,118958],{"class":318},[203,118982,118983],{"class":318}," snapd.seeded.service\n",[19,118985,118986],{},"然后查看snap应用列表",[19,118988,118989,118990,118995],{},"根据你安装的选择不同（最小安装或普通安装），有",[452,118991,118994],{"href":118992,"rel":118993},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23956],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[194,118997,118999],{"className":117354,"code":118998,"language":117356,"meta":27,"style":27},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[200,119000,119001,119006],{"__ignoreMap":27},[203,119002,119003],{"class":205,"line":206},[203,119004,119005],{"class":272},"# 查询当前系统上snap安装了哪些app\n",[203,119007,119008,119011],{"class":205,"line":124},[203,119009,119010],{"class":2052},"snap",[203,119012,119013],{"class":318}," list\n",[19,119015,119016],{},[25,119017],{"alt":27,"src":119018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119020,119021,119022,119025],{},"卸载掉图中所有应用，按照 ",[363,119023,119024],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[194,119027,119029],{"className":117354,"code":119028,"language":117356,"meta":27,"style":27},"#移除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",[200,119030,119031,119036,119048,119053,119064,119069,119080,119085,119096,119101,119105,119110,119121,119132],{"__ignoreMap":27},[203,119032,119033],{"class":205,"line":206},[203,119034,119035],{"class":272},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[203,119037,119038,119040,119043,119045],{"class":205,"line":124},[203,119039,24634],{"class":2052},[203,119041,119042],{"class":318}," snap",[203,119044,26137],{"class":318},[203,119046,119047],{"class":318}," snap-store\n",[203,119049,119050],{"class":205,"line":1269},[203,119051,119052],{"class":272},"#移除firefox浏览器\n",[203,119054,119055,119057,119059,119061],{"class":205,"line":1284},[203,119056,24634],{"class":2052},[203,119058,119042],{"class":318},[203,119060,26137],{"class":318},[203,119062,119063],{"class":318}," firefox\n",[203,119065,119066],{"class":205,"line":1290},[203,119067,119068],{"class":272},"#移除gnome-42-2204\n",[203,119070,119071,119073,119075,119077],{"class":205,"line":1304},[203,119072,24634],{"class":2052},[203,119074,119042],{"class":318},[203,119076,26137],{"class":318},[203,119078,119079],{"class":318}," gnome-42-2204\n",[203,119081,119082],{"class":205,"line":1310},[203,119083,119084],{"class":272},"#移除gtk-common-themes\n",[203,119086,119087,119089,119091,119093],{"class":205,"line":1401},[203,119088,24634],{"class":2052},[203,119090,119042],{"class":318},[203,119092,26137],{"class":318},[203,119094,119095],{"class":318}," gtk-common-themes\n",[203,119097,119098],{"class":205,"line":1407},[203,119099,119100],{"class":272},"#移除其它...\n",[203,119102,119103],{"class":205,"line":1419},[203,119104,2763],{"class":213},[203,119106,119107],{"class":205,"line":1701},[203,119108,119109],{"class":272},"#移除core22,bare以及snapd\n",[203,119111,119112,119114,119116,119118],{"class":205,"line":1706},[203,119113,24634],{"class":2052},[203,119115,119042],{"class":318},[203,119117,26137],{"class":318},[203,119119,119120],{"class":318}," core22\n",[203,119122,119123,119125,119127,119129],{"class":205,"line":1712},[203,119124,24634],{"class":2052},[203,119126,119042],{"class":318},[203,119128,26137],{"class":318},[203,119130,119131],{"class":318}," bare\n",[203,119133,119134,119136,119138,119140],{"class":205,"line":1717},[203,119135,24634],{"class":2052},[203,119137,119042],{"class":318},[203,119139,26137],{"class":318},[203,119141,119142],{"class":318}," snapd\n",[19,119144,119145],{},[25,119146],{"alt":27,"src":119147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119149,119150],{},"输入以下命令查看是否还有snap包",[194,119152,119154],{"className":117354,"code":119153,"language":117356,"meta":27,"style":27},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[200,119155,119156,119162,119166,119170,119174],{"__ignoreMap":27},[203,119157,119158,119160],{"class":205,"line":206},[203,119159,119010],{"class":2052},[203,119161,119013],{"class":318},[203,119163,119164],{"class":205,"line":124},[203,119165,118862],{"class":272},[203,119167,119168],{"class":205,"line":1269},[203,119169,118886],{"class":2052},[203,119171,119172],{"class":205,"line":1284},[203,119173,118895],{"class":272},[203,119175,119176],{"class":205,"line":1290},[203,119177,118929],{"class":2052},[19,119179,119180],{},[25,119181],{"alt":27,"src":119182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[174,119184,119186],{"id":119185},"_324-移除snap","3.2.4 移除snap",[19,119188,119189,119190,119195],{},"在删除掉",[452,119191,119194],{"href":119192,"rel":119193},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23956],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[194,119197,119199],{"className":117354,"code":119198,"language":117356,"meta":27,"style":27}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[200,119200,119201,119206,119219,119224,119235],{"__ignoreMap":27},[203,119202,119203],{"class":205,"line":206},[203,119204,119205],{"class":272}," #使用apt移除掉snap\n",[203,119207,119208,119210,119212,119214,119217],{"class":205,"line":124},[203,119209,24634],{"class":2052},[203,119211,117375],{"class":318},[203,119213,117683],{"class":318},[203,119215,119216],{"class":262}," --purge",[203,119218,119142],{"class":318},[203,119220,119221],{"class":205,"line":1269},[203,119222,119223],{"class":272},"#移除snapd的一些目录\n",[203,119225,119226,119228,119230,119232],{"class":205,"line":1284},[203,119227,24634],{"class":2052},[203,119229,118611],{"class":318},[203,119231,25383],{"class":262},[203,119233,119234],{"class":318}," \u002Fvar\u002Fcache\u002Fsnapd\n",[203,119236,119237,119239,119241,119243],{"class":205,"line":1290},[203,119238,24634],{"class":2052},[203,119240,118611],{"class":318},[203,119242,25383],{"class":262},[203,119244,119245],{"class":318}," ~\u002Fsnap\n",[19,119247,119248,119249,119252],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[200,119250,119251],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[174,119254,119256],{"id":119255},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119258,119259],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[194,119261,119263],{"className":117354,"code":119262,"language":117356,"meta":27,"style":27},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[200,119264,119265],{"__ignoreMap":27},[203,119266,119267,119269,119271],{"class":205,"line":206},[203,119268,24634],{"class":2052},[203,119270,118641],{"class":318},[203,119272,119273],{"class":318}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119275,119276,119277,119280],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[200,119278,119279],{},":wq"," 回车",[194,119282,119284],{"className":117354,"code":119283,"language":117356,"meta":27,"style":27},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[200,119285,119286,119293,119307],{"__ignoreMap":27},[203,119287,119288,119291],{"class":205,"line":206},[203,119289,119290],{"class":2052},"Package:",[203,119292,119142],{"class":318},[203,119294,119295,119298,119301,119304],{"class":205,"line":124},[203,119296,119297],{"class":2052},"Pin:",[203,119299,119300],{"class":318}," release",[203,119302,119303],{"class":318}," a=",[203,119305,119306],{"class":262},"*\n",[203,119308,119309,119312],{"class":205,"line":1269},[203,119310,119311],{"class":2052},"Pin-Priority:",[203,119313,119314],{"class":262}," -10\n",[19,119316,119317],{},[25,119318],{"alt":27,"src":119319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[174,119321,119323],{"id":119322},"_326-测试是否成功","3.2.6 测试是否成功",[194,119325,119327],{"className":117354,"code":119326,"language":117356,"meta":27,"style":27},"sudo apt update\nsudo apt install firefox\n",[200,119328,119329,119337],{"__ignoreMap":27},[203,119330,119331,119333,119335],{"class":205,"line":206},[203,119332,24634],{"class":2052},[203,119334,117375],{"class":318},[203,119336,26300],{"class":318},[203,119338,119339,119341,119343,119345],{"class":205,"line":124},[203,119340,24634],{"class":2052},[203,119342,117375],{"class":318},[203,119344,23925],{"class":318},[203,119346,119063],{"class":318},[19,119348,119349],{},"这里提示snapd无法被安装，就证明成功了",[19,119351,119352],{},[25,119353],{"alt":27,"src":119354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[174,119356,119358],{"id":119357},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119360,119361],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119363,119364],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119366,119367],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[194,119369,119371],{"className":117354,"code":119370,"language":117356,"meta":27,"style":27},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[200,119372,119373,119378,119387,119392,119400],{"__ignoreMap":27},[203,119374,119375],{"class":205,"line":206},[203,119376,119377],{"class":272},"# 添加Mozilla提供的源\n",[203,119379,119380,119382,119384],{"class":205,"line":124},[203,119381,24634],{"class":2052},[203,119383,118902],{"class":318},[203,119385,119386],{"class":318}," ppa:mozillateam\u002Fppa\n",[203,119388,119389],{"class":205,"line":1269},[203,119390,119391],{"class":272},"# 安装Firefox\n",[203,119393,119394,119396,119398],{"class":205,"line":1284},[203,119395,24634],{"class":2052},[203,119397,117375],{"class":318},[203,119399,26300],{"class":318},[203,119401,119402,119404,119406,119408],{"class":205,"line":1290},[203,119403,24634],{"class":2052},[203,119405,117375],{"class":318},[203,119407,23925],{"class":318},[203,119409,119063],{"class":318},[174,119411,119413],{"id":119412},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119415,119416],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119418,119419],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[194,119421,119423],{"className":117354,"code":119422,"language":117356,"meta":27,"style":27},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[200,119424,119425,119430,119440,119448,119452],{"__ignoreMap":27},[203,119426,119427],{"class":205,"line":206},[203,119428,119429],{"class":272},"#删掉禁止安装snap的配置文件\n",[203,119431,119432,119434,119436,119438],{"class":205,"line":124},[203,119433,24634],{"class":2052},[203,119435,118611],{"class":318},[203,119437,25383],{"class":262},[203,119439,119273],{"class":318},[203,119441,119442,119444,119446],{"class":205,"line":1269},[203,119443,24634],{"class":2052},[203,119445,117375],{"class":318},[203,119447,26300],{"class":318},[203,119449,119450],{"class":205,"line":1284},[203,119451,2489],{"emptyLinePlaceholder":131},[203,119453,119454,119456,119458],{"class":205,"line":1290},[203,119455,24634],{"class":2052},[203,119457,117375],{"class":318},[203,119459,119460],{"class":318}," dist-update\n",[14,119462,119464],{"id":119463},"_33-中文输入法","3.3 中文输入法",[174,119466,119468],{"id":119467},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119470,119471],{},"官网下载搜狗输入法",[19,119473,119474],{},[25,119475],{"alt":27,"src":119476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119478,119479],{},[25,119480],{"alt":27,"src":119481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119483,119484],{},"打开终端输入如下",[194,119486,119488],{"className":117354,"code":119487,"language":117356,"meta":27,"style":27},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[200,119489,119490,119497],{"__ignoreMap":27},[203,119491,119492,119494],{"class":205,"line":206},[203,119493,101334],{"class":262},[203,119495,119496],{"class":318}," ~\u002FDownloads\u002F\n",[203,119498,119499,119501,119503,119505],{"class":205,"line":124},[203,119500,24634],{"class":2052},[203,119502,117375],{"class":318},[203,119504,23925],{"class":318},[203,119506,119507],{"class":318}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119509,119510],{},"打开Fcitx",[19,119512,119513,119516],{},[25,119514],{"alt":27,"src":119515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[25,119517],{"alt":27,"src":119518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119520,119521],{},[25,119522],{"alt":27,"src":119523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,119525,119526],{},"添加搜狗输入法",[19,119528,119529],{},[25,119530],{"alt":27,"src":119531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,119533,119534],{},[25,119535],{"alt":27,"src":119536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,119538,119539],{},"将搜狗输入法设置为唯一输入法",[19,119541,119542],{},[25,119543],{"alt":27,"src":119544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[174,119546,119548],{"id":119547},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[157,119550,119551],{},[160,119552,119553],{},"卸载旧输入法",[194,119555,119557],{"className":118581,"code":119556,"language":118583,"meta":27,"style":27},"sudo apt purge fcitx* ibus*\n",[200,119558,119559],{"__ignoreMap":27},[203,119560,119561,119563,119565,119567,119570,119572,119575],{"class":205,"line":206},[203,119562,24634],{"class":2052},[203,119564,117375],{"class":318},[203,119566,117716],{"class":318},[203,119568,119569],{"class":318}," fcitx",[203,119571,669],{"class":262},[203,119573,119574],{"class":318}," ibus",[203,119576,119306],{"class":262},[157,119578,119579],{"start":124},[160,119580,119581],{},"安装Fcitx5",[194,119583,119585],{"className":117354,"code":119584,"language":117356,"meta":27,"style":27},"# 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",[200,119586,119587,119592,119606,119610,119615,119624,119632],{"__ignoreMap":27},[203,119588,119589],{"class":205,"line":206},[203,119590,119591],{"class":272},"# Ubuntu22.04及以上、Debian12及以上\n",[203,119593,119594,119596,119598,119600,119603],{"class":205,"line":124},[203,119595,24634],{"class":2052},[203,119597,117375],{"class":318},[203,119599,23925],{"class":318},[203,119601,119602],{"class":318}," fcitx5",[203,119604,119605],{"class":318}," fcitx5-chinese-addons\n",[203,119607,119608],{"class":205,"line":1269},[203,119609,2489],{"emptyLinePlaceholder":131},[203,119611,119612],{"class":205,"line":1284},[203,119613,119614],{"class":272},"# Ubuntu20.04\n",[203,119616,119617,119619,119621],{"class":205,"line":1290},[203,119618,24634],{"class":2052},[203,119620,118902],{"class":318},[203,119622,119623],{"class":318}," ppa:zhsj\u002Ffcitx5\n",[203,119625,119626,119628,119630],{"class":205,"line":1304},[203,119627,24634],{"class":2052},[203,119629,117375],{"class":318},[203,119631,26300],{"class":318},[203,119633,119634,119636,119638,119640,119642],{"class":205,"line":1310},[203,119635,24634],{"class":2052},[203,119637,117375],{"class":318},[203,119639,23925],{"class":318},[203,119641,119602],{"class":318},[203,119643,119605],{"class":318},[157,119645,119646,119649],{"start":1269},[160,119647,119648],{},"Reboot System",[160,119650,119651],{},"启动Fcitx5",[19,119653,119654],{},[25,119655],{"alt":27,"src":119656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[157,119658,119659],{"start":1290},[160,119660,119661],{},"修改一些设置",[19,119663,119664],{},"将Pinyin和Keyboard - English US加入到左边。",[19,119666,119667],{},[25,119668],{"alt":27,"src":119669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,119671,119672],{},"添加快捷键以便于更好切换中英文",[19,119674,119675],{},[25,119676],{"alt":27,"src":119677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[157,119679,119680],{"start":1304},[160,119681,119682],{},"重启",[194,119684,119686],{"className":118581,"code":119685,"language":118583,"meta":27,"style":27},"sudo shutdown -r now\n",[200,119687,119688],{"__ignoreMap":27},[203,119689,119690,119692,119695,119698],{"class":205,"line":206},[203,119691,24634],{"class":2052},[203,119693,119694],{"class":318}," shutdown",[203,119696,119697],{"class":262}," -r",[203,119699,119700],{"class":318}," now\n",[157,119702,119703],{"start":1310},[160,119704,119705],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,119707,119708],{},[452,119709,119710],{"href":119710,"rel":119711},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23956],[157,119713,119714],{"start":1401},[160,119715,119716],{},"再重启",[194,119718,119719],{"className":118581,"code":119685,"language":118583,"meta":27,"style":27},[200,119720,119721],{"__ignoreMap":27},[203,119722,119723,119725,119727,119729],{"class":205,"line":206},[203,119724,24634],{"class":2052},[203,119726,119694],{"class":318},[203,119728,119697],{"class":262},[203,119730,119700],{"class":318},[14,119732,119734],{"id":119733},"_34-pip3源替换","3.4 pip3源替换",[19,119736,119737],{},"非Debian系发行版需要做。",[19,119739,119740],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,119742,119743],{},"使用dnf的系统也可能不用做。",[194,119745,119747],{"className":117354,"code":119746,"language":117356,"meta":27,"style":27},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[200,119748,119749,119754,119761,119766,119771],{"__ignoreMap":27},[203,119750,119751],{"class":205,"line":206},[203,119752,119753],{"class":272},"# 检查是否已安装 pip\n",[203,119755,119756,119759],{"class":205,"line":124},[203,119757,119758],{"class":2052},"pip3",[203,119760,26351],{"class":262},[203,119762,119763],{"class":205,"line":1269},[203,119764,119765],{"class":272},"# 如果未安装，先安装 pip3（见下方）\n",[203,119767,119768],{"class":205,"line":1284},[203,119769,119770],{"class":272},"# 配置 pip 使用清华源\n",[203,119772,119773,119775,119778,119781,119784],{"class":205,"line":1290},[203,119774,119758],{"class":2052},[203,119776,119777],{"class":318}," config",[203,119779,119780],{"class":318}," set",[203,119782,119783],{"class":318}," global.index-url",[203,119785,119786],{"class":318}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,119788,119789],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,119791,119792],{},[25,119793],{"alt":27,"src":119794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[194,119796,119798],{"className":117354,"code":119797,"language":117356,"meta":27,"style":27},"#安装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",[200,119799,119800,119805,119813,119824,119828,119833,119852,119856,119861,119873,119877,119882],{"__ignoreMap":27},[203,119801,119802],{"class":205,"line":206},[203,119803,119804],{"class":272},"#安装pip3\n",[203,119806,119807,119809,119811],{"class":205,"line":124},[203,119808,24634],{"class":2052},[203,119810,117375],{"class":318},[203,119812,26300],{"class":318},[203,119814,119815,119817,119819,119821],{"class":205,"line":1269},[203,119816,24634],{"class":2052},[203,119818,26134],{"class":318},[203,119820,23925],{"class":318},[203,119822,119823],{"class":318}," python3-pip\n",[203,119825,119826],{"class":205,"line":1284},[203,119827,2489],{"emptyLinePlaceholder":131},[203,119829,119830],{"class":205,"line":1290},[203,119831,119832],{"class":272},"#更新pip3\n",[203,119834,119835,119837,119839,119841,119843,119845,119848,119850],{"class":205,"line":1304},[203,119836,100937],{"class":2052},[203,119838,100940],{"class":262},[203,119840,100963],{"class":318},[203,119842,23925],{"class":318},[203,119844,26488],{"class":262},[203,119846,119847],{"class":318}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[203,119849,100968],{"class":262},[203,119851,100971],{"class":318},[203,119853,119854],{"class":205,"line":1310},[203,119855,2489],{"emptyLinePlaceholder":131},[203,119857,119858],{"class":205,"line":1401},[203,119859,119860],{"class":272},"#设置pip源为清华源\n",[203,119862,119863,119865,119867,119869,119871],{"class":205,"line":1407},[203,119864,119758],{"class":2052},[203,119866,119777],{"class":318},[203,119868,119780],{"class":318},[203,119870,119783],{"class":318},[203,119872,119786],{"class":318},[203,119874,119875],{"class":205,"line":1419},[203,119876,2489],{"emptyLinePlaceholder":131},[203,119878,119879],{"class":205,"line":1701},[203,119880,119881],{"class":272},"#测试\n",[203,119883,119884,119886,119888,119890,119892,119894],{"class":205,"line":1706},[203,119885,100937],{"class":2052},[203,119887,100940],{"class":262},[203,119889,100963],{"class":318},[203,119891,23925],{"class":318},[203,119893,100968],{"class":262},[203,119895,100971],{"class":318},[19,119897,119898],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,119900,119901],{},[25,119902],{"alt":27,"src":119903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,119905,119907],{"id":119906},"_35-显卡驱动安装","3.5 显卡驱动安装",[174,119909,119911],{"id":119910},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[194,119913,119915],{"className":118581,"code":119914,"language":118583,"meta":27,"style":27},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[200,119916,119917,119922,119937,119942],{"__ignoreMap":27},[203,119918,119919],{"class":205,"line":206},[203,119920,119921],{"class":272},"# 如果是使用apt安装的驱动\n",[203,119923,119924,119926,119928,119930,119932,119935],{"class":205,"line":124},[203,119925,24634],{"class":2052},[203,119927,26134],{"class":318},[203,119929,26137],{"class":318},[203,119931,119216],{"class":262},[203,119933,119934],{"class":318}," nvidia",[203,119936,119306],{"class":262},[203,119938,119939],{"class":205,"line":1269},[203,119940,119941],{"class":272},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[203,119943,119944,119946],{"class":205,"line":1284},[203,119945,24634],{"class":2052},[203,119947,119948],{"class":318}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[174,119950,119952],{"id":119951},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22088,119954,119956],{"id":119955},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23000,119958,119960],{"id":119959},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[194,119962,119964],{"className":118581,"code":119963,"language":118583,"meta":27,"style":27},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[200,119965,119966,119971,119982,119987,119997,120002],{"__ignoreMap":27},[203,119967,119968],{"class":205,"line":206},[203,119969,119970],{"class":272},"# 安装英伟达驱动\n",[203,119972,119973,119975,119977,119979],{"class":205,"line":124},[203,119974,24634],{"class":2052},[203,119976,117375],{"class":318},[203,119978,23925],{"class":318},[203,119980,119981],{"class":318}," nvidia-driver-版本号\n",[203,119983,119984],{"class":205,"line":1269},[203,119985,119986],{"class":272},"# 重启 \n",[203,119988,119989,119991,119993,119995],{"class":205,"line":1284},[203,119990,24634],{"class":2052},[203,119992,119694],{"class":318},[203,119994,119697],{"class":262},[203,119996,119700],{"class":318},[203,119998,119999],{"class":205,"line":1290},[203,120000,120001],{"class":272},"# 检查驱动是否安装成功\n",[203,120003,120004],{"class":205,"line":1304},[203,120005,120006],{"class":2052},"nvidia-smi\n",[23000,120008,120010],{"id":120009},"_35212-debian","3.5.2.1.2 Debian",[194,120012,120014],{"className":118581,"code":120013,"language":118583,"meta":27,"style":27},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[200,120015,120016,120020,120034,120038,120048,120052],{"__ignoreMap":27},[203,120017,120018],{"class":205,"line":206},[203,120019,119970],{"class":272},[203,120021,120022,120024,120026,120028,120031],{"class":205,"line":124},[203,120023,24634],{"class":2052},[203,120025,117375],{"class":318},[203,120027,23925],{"class":318},[203,120029,120030],{"class":318}," nvidia-driver",[203,120032,120033],{"class":318}," nvidia-settings\n",[203,120035,120036],{"class":205,"line":1269},[203,120037,119986],{"class":272},[203,120039,120040,120042,120044,120046],{"class":205,"line":1284},[203,120041,24634],{"class":2052},[203,120043,119694],{"class":318},[203,120045,119697],{"class":262},[203,120047,119700],{"class":318},[203,120049,120050],{"class":205,"line":1290},[203,120051,120001],{"class":272},[203,120053,120054],{"class":205,"line":1304},[203,120055,120006],{"class":2052},[22088,120057,120059],{"id":120058},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120061,120062,120063,120066],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[363,120064,120065],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120068,120069,120070],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23644,120071,120072],{},[363,120073,120074],{},"（也可以不禁用桌面环境，直接进行下一步。）",[194,120076,120078],{"className":118581,"code":120077,"language":118583,"meta":27,"style":27},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[200,120079,120080,120085,120095,120100,120113,120118],{"__ignoreMap":27},[203,120081,120082],{"class":205,"line":206},[203,120083,120084],{"class":272},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[203,120086,120087,120089,120092],{"class":205,"line":124},[203,120088,24634],{"class":2052},[203,120090,120091],{"class":318}," telinit",[203,120093,120094],{"class":262}," 3\n",[203,120096,120097],{"class":205,"line":1269},[203,120098,120099],{"class":272},"# ubuntu 使用下方命令\n",[203,120101,120102,120104,120107,120110],{"class":205,"line":1284},[203,120103,24634],{"class":2052},[203,120105,120106],{"class":318}," service",[203,120108,120109],{"class":318}," lightdm",[203,120111,120112],{"class":318}," stop\n",[203,120114,120115],{"class":205,"line":1290},[203,120116,120117],{"class":272},"# Fedora 使用下方命令\n",[203,120119,120120,120122,120124,120127],{"class":205,"line":1304},[203,120121,24634],{"class":2052},[203,120123,26571],{"class":318},[203,120125,120126],{"class":318}," isolate",[203,120128,120129],{"class":318}," multi-user.target\n",[19,120131,120132],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[194,120134,120136],{"className":118581,"code":120135,"language":118583,"meta":27,"style":27},"# 编译环境+准备工作\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",[200,120137,120138,120143,120154,120159,120166,120171,120183,120188,120195,120200],{"__ignoreMap":27},[203,120139,120140],{"class":205,"line":206},[203,120141,120142],{"class":272},"# 编译环境+准备工作\n",[203,120144,120145,120147,120149,120151],{"class":205,"line":124},[203,120146,24634],{"class":2052},[203,120148,117375],{"class":318},[203,120150,23925],{"class":318},[203,120152,120153],{"class":318}," build-essential\n",[203,120155,120156],{"class":205,"line":1269},[203,120157,120158],{"class":272},"# 进入到.run目录中\n",[203,120160,120161,120163],{"class":205,"line":1284},[203,120162,101334],{"class":262},[203,120164,120165],{"class":318}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[203,120167,120168],{"class":205,"line":1290},[203,120169,120170],{"class":272},"# 给驱动文件增加可执行权限：\n",[203,120172,120173,120175,120177,120180],{"class":205,"line":1304},[203,120174,24634],{"class":2052},[203,120176,24637],{"class":318},[203,120178,120179],{"class":318}," a+x",[203,120181,120182],{"class":318}," NVIDIA-Linux-x86_64-550.107.02.run\n",[203,120184,120185],{"class":205,"line":1310},[203,120186,120187],{"class":272},"# 然后执行安装：\n",[203,120189,120190,120192],{"class":205,"line":1401},[203,120191,24634],{"class":2052},[203,120193,120194],{"class":318}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[203,120196,120197],{"class":205,"line":1407},[203,120198,120199],{"class":272},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[203,120201,120202,120204,120207],{"class":205,"line":1419},[203,120203,24634],{"class":2052},[203,120205,120206],{"class":318}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[203,120208,120209],{"class":262},"  --no-opengl-files\n",[19,120211,120212],{},"安装完毕重启即可",[194,120214,120216],{"className":118581,"code":120215,"language":118583,"meta":27,"style":27},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[200,120217,120218,120222,120228,120232],{"__ignoreMap":27},[203,120219,120220],{"class":205,"line":206},[203,120221,119986],{"class":272},[203,120223,120224,120226],{"class":205,"line":124},[203,120225,24634],{"class":2052},[203,120227,26705],{"class":318},[203,120229,120230],{"class":205,"line":1269},[203,120231,120001],{"class":272},[203,120233,120234],{"class":205,"line":1284},[203,120235,120006],{"class":2052},[174,120237,120239],{"id":120238},"_353-安装cuda","3.5.3 安装CUDA",[19,120241,120242],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120244,120245],{},[25,120246],{"alt":27,"src":120247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[157,120249,120250],{},[160,120251,120252],{},"先查看显卡驱动所支持的最高CUDA版本",[194,120254,120255],{"className":118581,"code":120006,"language":118583,"meta":27,"style":27},[200,120256,120257],{"__ignoreMap":27},[203,120258,120259],{"class":205,"line":206},[203,120260,120006],{"class":2052},[19,120262,120263],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120265,120266],{},[25,120267],{"alt":27,"src":120268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[157,120270,120271],{"start":124},[160,120272,120273],{},"下载CUDA并安装CUDA",[19,120275,118360,120276],{},[452,120277,118363],{"href":118363,"rel":120278},[23956],[19,120280,120281],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120283,120284],{},[25,120285],{"alt":27,"src":120286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120288,120289,120290,120295],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[452,120291,120294],{"href":120292,"rel":120293},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23956],"Vinci机器人队单片机教程","）",[19,120297,120298],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120300,120301],{},[25,120302],{"alt":27,"src":120303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120305,120306],{},"将最下方框框里的命令敲入终端",[194,120308,120310],{"className":118581,"code":120309,"language":118583,"meta":27,"style":27},"# 在当前文件夹下创建一个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",[200,120311,120312,120317,120326,120331,120338,120343,120351,120356,120367,120372],{"__ignoreMap":27},[203,120313,120314],{"class":205,"line":206},[203,120315,120316],{"class":272},"# 在当前文件夹下创建一个ttt的子文件夹\n",[203,120318,120319,120321,120323],{"class":205,"line":124},[203,120320,101324],{"class":2052},[203,120322,29274],{"class":262},[203,120324,120325],{"class":318}," .\u002Fttt\n",[203,120327,120328],{"class":205,"line":1269},[203,120329,120330],{"class":272},"# 进入ttt文件夹\n",[203,120332,120333,120335],{"class":205,"line":1284},[203,120334,101334],{"class":262},[203,120336,120337],{"class":318}," ttt\n",[203,120339,120340],{"class":205,"line":1290},[203,120341,120342],{"class":272},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[203,120344,120345,120348],{"class":205,"line":1304},[203,120346,120347],{"class":2052},"wget",[203,120349,120350],{"class":318}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[203,120352,120353],{"class":205,"line":1310},[203,120354,120355],{"class":272},"# 给予权限\n",[203,120357,120358,120360,120362,120364],{"class":205,"line":1401},[203,120359,24634],{"class":2052},[203,120361,24637],{"class":318},[203,120363,120179],{"class":318},[203,120365,120366],{"class":318}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[203,120368,120369],{"class":205,"line":1407},[203,120370,120371],{"class":272},"# 运行脚本\n",[203,120373,120374,120376],{"class":205,"line":1419},[203,120375,24634],{"class":2052},[203,120377,120366],{"class":318},[19,120379,120380],{},[25,120381],{"alt":27,"src":120382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120384,120385],{},"正在安装中：",[19,120387,120388],{},[25,120389],{"alt":27,"src":120390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120392,120393],{},"输入accept接受即可",[19,120395,120396],{},[25,120397],{"alt":27,"src":120398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120400,120401],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120403,120404],{},[25,120405],{"alt":27,"src":120406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120408,120409],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120411,120412],{},[25,120413],{"alt":27,"src":120414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[157,120416,120417],{"start":1269},[160,120418,120419],{},"配置环境",[19,120421,120422],{},"根据上方确认一下路径，比如我上面红色框起来的为",[194,120424,120426],{"className":118581,"code":120425,"language":118583,"meta":27,"style":27},"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",[200,120427,120428,120444,120459],{"__ignoreMap":27},[203,120429,120430,120433,120436,120439,120442],{"class":205,"line":206},[203,120431,120432],{"class":2052},"Please",[203,120434,120435],{"class":318}," make",[203,120437,120438],{"class":318}," sure",[203,120440,120441],{"class":318}," that",[203,120443,2763],{"class":213},[203,120445,120446,120448,120451,120454,120457],{"class":205,"line":124},[203,120447,52329],{"class":2052},[203,120449,120450],{"class":318},"   PATH",[203,120452,120453],{"class":318}," includes",[203,120455,120456],{"class":318}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[203,120458,2763],{"class":213},[203,120460,120461,120463,120466,120468,120471,120474,120476,120479,120482,120485,120488,120490,120493,120495],{"class":205,"line":1269},[203,120462,52329],{"class":2052},[203,120464,120465],{"class":318},"   LD_LIBRARY_PATH",[203,120467,120453],{"class":318},[203,120469,120470],{"class":318}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[203,120472,120473],{"class":318}," or,",[203,120475,5299],{"class":318},[203,120477,120478],{"class":318}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[203,120480,120481],{"class":318}," to",[203,120483,120484],{"class":318}," \u002Fetc\u002Fld.so.conf",[203,120486,120487],{"class":318}," and",[203,120489,27288],{"class":318},[203,120491,120492],{"class":318}," ldconfig",[203,120494,64662],{"class":318},[203,120496,120497],{"class":318}," root\n",[19,120499,120500],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[194,120502,120504],{"className":118581,"code":120503,"language":118583,"meta":27,"style":27},"which nvcc\n",[200,120505,120506],{"__ignoreMap":27},[203,120507,120508,120511],{"class":205,"line":206},[203,120509,120510],{"class":262},"which",[203,120512,120513],{"class":318}," nvcc\n",[19,120515,120516],{},[25,120517],{"alt":27,"src":120518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120520,120521],{},"所以我进行以下操作：",[194,120523,120525],{"className":118581,"code":120524,"language":118583,"meta":27,"style":27},"sudo vim ~\u002F.bashrc\n",[200,120526,120527],{"__ignoreMap":27},[203,120528,120529,120531,120533],{"class":205,"line":206},[203,120530,24634],{"class":2052},[203,120532,118641],{"class":318},[203,120534,120535],{"class":318}," ~\u002F.bashrc\n",[19,120537,120538],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[194,120540,120542],{"className":118581,"code":120541,"language":118583,"meta":27,"style":27},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[200,120543,120544,120556],{"__ignoreMap":27},[203,120545,120546,120548,120551,120553],{"class":205,"line":206},[203,120547,25100],{"class":209},[203,120549,120550],{"class":213}," PATH",[203,120552,259],{"class":209},[203,120554,120555],{"class":213},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[203,120557,120558,120560,120563,120565],{"class":205,"line":124},[203,120559,25100],{"class":209},[203,120561,120562],{"class":213}," LD_LIBRARY_PATH",[203,120564,259],{"class":209},[203,120566,120567],{"class":213},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,120569,120570],{},[25,120571],{"alt":27,"src":120572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[194,120574,120576],{"className":118581,"code":120575,"language":118583,"meta":27,"style":27},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[200,120577,120578,120583,120589,120594],{"__ignoreMap":27},[203,120579,120580],{"class":205,"line":206},[203,120581,120582],{"class":272},"# 刷新当前终端的环境变量\n",[203,120584,120585,120587],{"class":205,"line":124},[203,120586,100951],{"class":262},[203,120588,120535],{"class":318},[203,120590,120591],{"class":205,"line":1269},[203,120592,120593],{"class":272},"# 验证CUDA是否安装成功\n",[203,120595,120596,120599],{"class":205,"line":1284},[203,120597,120598],{"class":2052},"nvcc",[203,120600,120601],{"class":262}," -V\n",[19,120603,120604],{},"出现下图这种则安装成功。",[19,120606,120607],{},[25,120608],{"alt":27,"src":120609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[174,120611,120613],{"id":120612},"_354-安装cudnn","3.5.4 安装cuDNN",[157,120615,120616],{},[160,120617,120618],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,120620,120621,120622,120627],{},"前往 NVIDIA cuDNN 下载页面：",[452,120623,120626],{"href":120624,"rel":120625},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23956],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,120629,120630],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,120632,120633],{},[25,120634],{"alt":27,"src":120635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,120637,120638],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,120640,120641],{},[25,120642],{"alt":27,"src":120643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,120645,120646],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,120648,120649],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,120651,120652],{},[363,120653,120654],{},"我这里选择所有Linux X86_64最通用的办法：",[19,120656,120657],{},"下载好的：",[19,120659,120660],{},[25,120661],{"alt":27,"src":120662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[157,120664,120665],{"start":124},[160,120666,120667],{},"安装cuDNN",[19,120669,120670],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,120672,120673],{},[25,120674],{"alt":27,"src":120675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,120677,120678],{},"解压文件，并复制到对应位置完成安装",[194,120680,120682],{"className":118581,"code":120681,"language":118583,"meta":27,"style":27},"# 解压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",[200,120683,120684,120689,120700,120705,120712,120717,120733,120747,120752,120763,120772,120776,120792],{"__ignoreMap":27},[203,120685,120686],{"class":205,"line":206},[203,120687,120688],{"class":272},"# 解压cuDNN文件\n",[203,120690,120691,120694,120697],{"class":205,"line":124},[203,120692,120693],{"class":2052},"tar",[203,120695,120696],{"class":262}," -xvf",[203,120698,120699],{"class":318}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[203,120701,120702],{"class":205,"line":1269},[203,120703,120704],{"class":272},"# cd进文件夹\n",[203,120706,120707,120709],{"class":205,"line":1284},[203,120708,101334],{"class":262},[203,120710,120711],{"class":318}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[203,120713,120714],{"class":205,"line":1290},[203,120715,120716],{"class":272},"# 复制cuDNN文件到CUDA目录\n",[203,120718,120719,120721,120723,120726,120728,120731],{"class":205,"line":1304},[203,120720,24634],{"class":2052},[203,120722,27919],{"class":318},[203,120724,120725],{"class":318}," include\u002Fcudnn",[203,120727,669],{"class":262},[203,120729,120730],{"class":318},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[203,120732,2763],{"class":213},[203,120734,120735,120737,120739,120742,120744],{"class":205,"line":1310},[203,120736,24634],{"class":2052},[203,120738,27919],{"class":318},[203,120740,120741],{"class":318}," lib\u002Flibcudnn",[203,120743,669],{"class":262},[203,120745,120746],{"class":318},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[203,120748,120749],{"class":205,"line":1401},[203,120750,120751],{"class":272},"# 对比一下有没有缺文件\n",[203,120753,120754,120756,120759,120761],{"class":205,"line":1407},[203,120755,26819],{"class":2052},[203,120757,120758],{"class":318}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[203,120760,669],{"class":262},[203,120762,2763],{"class":213},[203,120764,120765,120767,120770],{"class":205,"line":1419},[203,120766,26819],{"class":2052},[203,120768,120769],{"class":318}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[203,120771,119306],{"class":262},[203,120773,120774],{"class":205,"line":1701},[203,120775,120355],{"class":272},[203,120777,120778,120780,120782,120785,120787,120789],{"class":205,"line":1706},[203,120779,24634],{"class":2052},[203,120781,24637],{"class":318},[203,120783,120784],{"class":318}," a+r",[203,120786,120758],{"class":318},[203,120788,669],{"class":262},[203,120790,120791],{"class":213},"   \n",[203,120793,120794,120796,120798,120800,120802],{"class":205,"line":1712},[203,120795,24634],{"class":2052},[203,120797,24637],{"class":318},[203,120799,120784],{"class":318},[203,120801,120769],{"class":318},[203,120803,119306],{"class":262},[157,120805,120806],{"start":1269},[160,120807,120808],{},"检查是否安装成功",[194,120810,120812],{"className":118581,"code":120811,"language":118583,"meta":27,"style":27},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[200,120813,120814,120819],{"__ignoreMap":27},[203,120815,120816],{"class":205,"line":206},[203,120817,120818],{"class":272},"# 检查cuDNN版本命令\n",[203,120820,120821,120824,120827,120829,120831,120834,120837],{"class":205,"line":124},[203,120822,120823],{"class":2052},"cat",[203,120825,120826],{"class":318}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[203,120828,25167],{"class":209},[203,120830,30294],{"class":2052},[203,120832,120833],{"class":318}," CUDNN_MAJOR",[203,120835,120836],{"class":262}," -A",[203,120838,47781],{"class":262},[19,120840,120841],{},"出现下图这样的就是安装成功了",[19,120843,120844],{},[25,120845],{"alt":27,"src":120846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[157,120848,120849],{"start":1284},[160,120850,120851],{},"软链接(一般不需要)",[194,120853,120855],{"className":118581,"code":120854,"language":118583,"meta":27,"style":27},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[200,120856,120857,120862],{"__ignoreMap":27},[203,120858,120859],{"class":205,"line":206},[203,120860,120861],{"class":272},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[203,120863,120864,120866],{"class":205,"line":124},[203,120865,24634],{"class":2052},[203,120867,120868],{"class":318}," ldconfig\n",[19,120870,120871],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[194,120873,120878],{"className":120874,"code":120875,"language":120876,"meta":120877,"style":27},"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",[200,120879,120880,120885,120890,120895,120900,120905,120910],{"__ignoreMap":27},[203,120881,120882],{"class":205,"line":206},[203,120883,120884],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[203,120886,120887],{"class":205,"line":124},[203,120888,120889],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[203,120891,120892],{"class":205,"line":1269},[203,120893,120894],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[203,120896,120897],{"class":205,"line":1284},[203,120898,120899],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[203,120901,120902],{"class":205,"line":1290},[203,120903,120904],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[203,120906,120907],{"class":205,"line":1304},[203,120908,120909],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[203,120911,120912],{"class":205,"line":1310},[203,120913,120914],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,120916,120917],{},"运行下方的命令",[194,120919,120921],{"className":118581,"code":120920,"language":118583,"meta":27,"style":27},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[200,120922,120923,120928,120935,120940],{"__ignoreMap":27},[203,120924,120925],{"class":205,"line":206},[203,120926,120927],{"class":272},"# cd进入CUDA路径\n",[203,120929,120930,120932],{"class":205,"line":124},[203,120931,101334],{"class":262},[203,120933,120934],{"class":318}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[203,120936,120937],{"class":205,"line":1269},[203,120938,120939],{"class":272}," # 查看本路径下的需要软链接的文件名\n",[203,120941,120942],{"class":205,"line":1284},[203,120943,120944],{"class":2052}," ls\n",[19,120946,120947],{},[25,120948],{"alt":27,"src":120949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,120951,120952,120953,18500,120956,18500,120959,120962],{},"如上图，我需要将",[200,120954,120955],{},"libcudnn_xxx_xxxxx.so.8.9.7",[200,120957,120958],{},"libcudnn_xxx_xxxxx.so.8",[200,120960,120961],{},"libcudnn_xxx_xxxxx.so","软链接",[194,120964,120966],{"className":118581,"code":120965,"language":118583,"meta":27,"style":27},"# 创建符号链接。对于每个 .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",[200,120967,120968,120973,120989,121003,121017,121031,121045,121059,121073,121078,121084,121089],{"__ignoreMap":27},[203,120969,120970],{"class":205,"line":206},[203,120971,120972],{"class":272},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[203,120974,120975,120977,120980,120983,120986],{"class":205,"line":124},[203,120976,24634],{"class":2052},[203,120978,120979],{"class":318}," ln",[203,120981,120982],{"class":262}," -sf",[203,120984,120985],{"class":318}," libcudnn_cnn_train.so.8.9.7",[203,120987,120988],{"class":318}," libcudnn_cnn_train.so.8\n",[203,120990,120991,120993,120995,120997,121000],{"class":205,"line":1269},[203,120992,24634],{"class":2052},[203,120994,120979],{"class":318},[203,120996,120982],{"class":262},[203,120998,120999],{"class":318}," libcudnn_adv_infer.so.8.9.7",[203,121001,121002],{"class":318}," libcudnn_adv_infer.so.8\n",[203,121004,121005,121007,121009,121011,121014],{"class":205,"line":1284},[203,121006,24634],{"class":2052},[203,121008,120979],{"class":318},[203,121010,120982],{"class":262},[203,121012,121013],{"class":318}," libcudnn_adv_train.so.8.9.7",[203,121015,121016],{"class":318}," libcudnn_adv_train.so.8\n",[203,121018,121019,121021,121023,121025,121028],{"class":205,"line":1290},[203,121020,24634],{"class":2052},[203,121022,120979],{"class":318},[203,121024,120982],{"class":262},[203,121026,121027],{"class":318}," libcudnn_cnn_infer.so.8.9.7",[203,121029,121030],{"class":318}," libcudnn_cnn_infer.so.8\n",[203,121032,121033,121035,121037,121039,121042],{"class":205,"line":1304},[203,121034,24634],{"class":2052},[203,121036,120979],{"class":318},[203,121038,120982],{"class":262},[203,121040,121041],{"class":318}," libcudnn.so.8.9.7",[203,121043,121044],{"class":318}," libcudnn.so.8\n",[203,121046,121047,121049,121051,121053,121056],{"class":205,"line":1310},[203,121048,24634],{"class":2052},[203,121050,120979],{"class":318},[203,121052,120982],{"class":262},[203,121054,121055],{"class":318}," libcudnn_ops_infer.so.8.9.7",[203,121057,121058],{"class":318}," libcudnn_ops_infer.so.8\n",[203,121060,121061,121063,121065,121067,121070],{"class":205,"line":1401},[203,121062,24634],{"class":2052},[203,121064,120979],{"class":318},[203,121066,120982],{"class":262},[203,121068,121069],{"class":318}," libcudnn_ops_train.so.8.9.7",[203,121071,121072],{"class":318}," libcudnn_ops_train.so.8\n",[203,121074,121075],{"class":205,"line":1407},[203,121076,121077],{"class":272},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[203,121079,121080,121082],{"class":205,"line":1419},[203,121081,24634],{"class":2052},[203,121083,120868],{"class":318},[203,121085,121086],{"class":205,"line":1701},[203,121087,121088],{"class":272},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[203,121090,121091,121093,121096,121099,121101,121104],{"class":205,"line":1706},[203,121092,26819],{"class":2052},[203,121094,121095],{"class":262}," -l",[203,121097,121098],{"class":318}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[203,121100,669],{"class":262},[203,121102,121103],{"class":318},".so",[203,121105,119306],{"class":262},[174,121107,121109],{"id":121108},"_355-常见问题","3.5.5 常见问题",[157,121111,121112],{},[160,121113,121114],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[194,121116,121118],{"className":118581,"code":121117,"language":118583,"meta":27,"style":27},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[200,121119,121120],{"__ignoreMap":27},[203,121121,121122,121124,121126],{"class":205,"line":206},[203,121123,24634],{"class":2052},[203,121125,118641],{"class":318},[203,121127,121128],{"class":318}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121130,121131],{},"blacklist-nouveau.conf文件内容如下：",[194,121133,121135],{"className":118581,"code":121134,"language":118583,"meta":27,"style":27},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[200,121136,121137,121145,121152,121164,121174],{"__ignoreMap":27},[203,121138,121139,121142],{"class":205,"line":206},[203,121140,121141],{"class":2052},"blacklist",[203,121143,121144],{"class":318}," nouveau\n",[203,121146,121147,121149],{"class":205,"line":124},[203,121148,121141],{"class":2052},[203,121150,121151],{"class":318}," lbm-nouveau\n",[203,121153,121154,121156,121159,121162],{"class":205,"line":1269},[203,121155,115988],{"class":2052},[203,121157,121158],{"class":318}," nouveau",[203,121160,121161],{"class":318}," modeset=",[203,121163,3174],{"class":262},[203,121165,121166,121169,121171],{"class":205,"line":1284},[203,121167,121168],{"class":262},"alias",[203,121170,121158],{"class":318},[203,121172,121173],{"class":318}," off\n",[203,121175,121176,121178,121181],{"class":205,"line":1290},[203,121177,121168],{"class":262},[203,121179,121180],{"class":318}," lbm-nouveau",[203,121182,121173],{"class":318},[19,121184,121185],{},"接着运行下方命令",[194,121187,121189],{"className":118581,"code":121188,"language":118583,"meta":27,"style":27},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[200,121190,121191,121201,121206],{"__ignoreMap":27},[203,121192,121193,121195,121198],{"class":205,"line":206},[203,121194,24634],{"class":2052},[203,121196,121197],{"class":318}," update-initramfs",[203,121199,121200],{"class":262}," -u\n",[203,121202,121203],{"class":205,"line":124},[203,121204,121205],{"class":2052},"或者\n",[203,121207,121208,121210,121213],{"class":205,"line":1269},[203,121209,24634],{"class":2052},[203,121211,121212],{"class":318}," dracut",[203,121214,121215],{"class":262}," --force\n",[19,121217,121218],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[194,121220,121222],{"className":118581,"code":121221,"language":118583,"meta":27,"style":27},"lsmod | grep nouveau\n",[200,121223,121224],{"__ignoreMap":27},[203,121225,121226,121229,121231,121233],{"class":205,"line":206},[203,121227,121228],{"class":2052},"lsmod",[203,121230,25167],{"class":209},[203,121232,30294],{"class":2052},[203,121234,121144],{"class":318},[157,121236,121237],{"start":124},[160,121238,121239],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[194,121241,121243],{"className":118581,"code":121242,"language":118583,"meta":27,"style":27},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[200,121244,121245],{"__ignoreMap":27},[203,121246,121247,121249,121251],{"class":205,"line":206},[203,121248,24634],{"class":2052},[203,121250,118641],{"class":318},[203,121252,121253],{"class":318}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121255,121256],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[194,121258,121260],{"className":118581,"code":121259,"language":118583,"meta":27,"style":27},"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",[200,121261,121262,121270,121278,121286,121293,121301,121311,121319],{"__ignoreMap":27},[203,121263,121264,121267],{"class":205,"line":206},[203,121265,121266],{"class":2052},"Section",[203,121268,121269],{"class":318}," \"OutputClass\"\n",[203,121271,121272,121275],{"class":205,"line":124},[203,121273,121274],{"class":2052},"   Identifier",[203,121276,121277],{"class":318}," \"nvidia\"\n",[203,121279,121280,121283],{"class":205,"line":1269},[203,121281,121282],{"class":2052},"   MatchDriver",[203,121284,121285],{"class":318}," \"nvidia-drm\"\n",[203,121287,121288,121291],{"class":205,"line":1284},[203,121289,121290],{"class":2052},"   Driver",[203,121292,121277],{"class":318},[203,121294,121295,121298],{"class":205,"line":1290},[203,121296,121297],{"class":2052},"   Option",[203,121299,121300],{"class":318}," \"AllowEmptyInitialConfiguration\"\n",[203,121302,121303,121305,121308],{"class":205,"line":1304},[203,121304,121297],{"class":2052},[203,121306,121307],{"class":318}," \"PrimaryGPU\"",[203,121309,121310],{"class":318}," \"yes\"\n",[203,121312,121313,121316],{"class":205,"line":1310},[203,121314,121315],{"class":2052},"   ModulePath",[203,121317,121318],{"class":318}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[203,121320,121321],{"class":205,"line":1401},[203,121322,121323],{"class":2052},"EndSection\n",[157,121325,121326],{"start":1269},[160,121327,121328],{},"安装N卡驱动提示错误",[194,121330,121332],{"className":120874,"code":121331,"language":120876,"meta":120877,"style":27},"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",[200,121333,121334],{"__ignoreMap":27},[203,121335,121336],{"class":205,"line":206},[203,121337,121331],{},[157,121339,121340],{},[160,121341,121342],{},"检查当前运行的内核版本：",[19,121344,121345],{},"运行以下命令以查看你当前正在使用的内核版本：",[194,121347,121349],{"className":117354,"code":121348,"language":117356,"meta":27,"style":27},"uname -r\n",[200,121350,121351],{"__ignoreMap":27},[203,121352,121353,121355],{"class":205,"line":206},[203,121354,70262],{"class":2052},[203,121356,121357],{"class":262}," -r\n",[157,121359,121360],{"start":124},[160,121361,121362],{},"安装内核开发文件：",[19,121364,121365,121366,121369],{},"确保你已经安装了与当前内核版本相匹配的 ",[200,121367,121368],{},"kernel-devel"," 包。运行以下命令来安装：",[194,121371,121373],{"className":117354,"code":121372,"language":117356,"meta":27,"style":27},"sudo dnf install kernel-devel-$(uname -r)\n",[200,121374,121375],{"__ignoreMap":27},[203,121376,121377,121379,121381,121383,121386,121388,121390,121392],{"class":205,"line":206},[203,121378,24634],{"class":2052},[203,121380,26373],{"class":318},[203,121382,23925],{"class":318},[203,121384,121385],{"class":318}," kernel-devel-",[203,121387,25157],{"class":213},[203,121389,70262],{"class":2052},[203,121391,119697],{"class":262},[203,121393,220],{"class":213},[19,121395,121396],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[157,121398,121399],{"start":1269},[160,121400,121401],{},"安装内核源代码（如果需要）：",[19,121403,121404],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[194,121406,121408],{"className":117354,"code":121407,"language":117356,"meta":27,"style":27},"sudo dnf install kernel-headers kernel-source\n",[200,121409,121410],{"__ignoreMap":27},[203,121411,121412,121414,121416,121418,121421],{"class":205,"line":206},[203,121413,24634],{"class":2052},[203,121415,26373],{"class":318},[203,121417,23925],{"class":318},[203,121419,121420],{"class":318}," kernel-headers",[203,121422,121423],{"class":318}," kernel-source\n",[157,121425,121426],{"start":1284},[160,121427,121428],{},"检查安装：",[19,121430,121431,121432,121435],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[200,121433,121434],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[194,121437,121439],{"className":117354,"code":121438,"language":117356,"meta":27,"style":27},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[200,121440,121441],{"__ignoreMap":27},[203,121442,121443,121445],{"class":205,"line":206},[203,121444,26819],{"class":2052},[203,121446,121447],{"class":318}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121449,121450,121451,121454],{},"如果仍然遇到问题，可以通过 ",[200,121452,121453],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5216,121456,121457],{},"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":27,"searchDepth":124,"depth":124,"links":121459},[121460,121464,121474,121478,121479],{"id":118557,"depth":124,"text":118558,"children":121461},[121462,121463],{"id":118567,"depth":1269,"text":118568},{"id":118577,"depth":1269,"text":118578},{"id":118777,"depth":124,"text":118778,"children":121465},[121466,121467,121468,121469,121470,121471,121472,121473],{"id":118781,"depth":1269,"text":118782},{"id":118851,"depth":1269,"text":118852},{"id":118940,"depth":1269,"text":118941},{"id":119185,"depth":1269,"text":119186},{"id":119255,"depth":1269,"text":119256},{"id":119322,"depth":1269,"text":119323},{"id":119357,"depth":1269,"text":119358},{"id":119412,"depth":1269,"text":119413},{"id":119463,"depth":124,"text":119464,"children":121475},[121476,121477],{"id":119467,"depth":1269,"text":119468},{"id":119547,"depth":1269,"text":119548},{"id":119733,"depth":124,"text":119734},{"id":119906,"depth":124,"text":119907,"children":121480},[121481,121482,121483,121484,121485],{"id":119910,"depth":1269,"text":119911},{"id":119951,"depth":1269,"text":119952},{"id":120238,"depth":1269,"text":120239},{"id":120612,"depth":1269,"text":120613},{"id":121108,"depth":1269,"text":121109},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118549,"description":23467},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121492,"title":121493,"body":121494,"description":23467,"extension":129,"meta":121834,"navigation":131,"path":121835,"seo":121836,"stem":121837,"__hash__":121838},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121495,"toc":121832},[121496,121499,121504,121507,121753,121758,121761,121797,121800,121829],[10,121497,121493],{"id":121498},"_4-命令教程长期积累",[157,121500,121501],{},[160,121502,121503],{},"大多数命令",[19,121505,121506],{},"常用 Linux 命令速查：",[194,121508,121510],{"className":117354,"code":121509,"language":117356,"meta":27,"style":27},"# 文件与目录\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",[200,121511,121512,121517,121524,121531,121539,121546,121553,121561,121569,121576,121583,121591,121595,121600,121607,121615,121622,121626,121631,121638,121646,121654,121662,121670,121674,121679,121687,121694,121701,121709,121717,121721,121726,121735,121744],{"__ignoreMap":27},[203,121513,121514],{"class":205,"line":206},[203,121515,121516],{"class":272},"# 文件与目录\n",[203,121518,121519,121521],{"class":205,"line":124},[203,121520,26819],{"class":2052},[203,121522,121523],{"class":272},"        # 列出目录内容\n",[203,121525,121526,121528],{"class":205,"line":1269},[203,121527,101334],{"class":262},[203,121529,121530],{"class":272},"        # 切换目录\n",[203,121532,121533,121536],{"class":205,"line":1284},[203,121534,121535],{"class":262},"pwd",[203,121537,121538],{"class":272},"       # 显示当前路径\n",[203,121540,121541,121543],{"class":205,"line":1290},[203,121542,101324],{"class":2052},[203,121544,121545],{"class":272},"     # 创建目录\n",[203,121547,121548,121550],{"class":205,"line":1304},[203,121549,25380],{"class":2052},[203,121551,121552],{"class":272},"        # 删除文件或目录\n",[203,121554,121555,121558],{"class":205,"line":1310},[203,121556,121557],{"class":2052},"cp",[203,121559,121560],{"class":272},"        # 复制文件或目录\n",[203,121562,121563,121566],{"class":205,"line":1401},[203,121564,121565],{"class":2052},"mv",[203,121567,121568],{"class":272},"        # 移动\u002F重命名文件或目录\n",[203,121570,121571,121573],{"class":205,"line":1407},[203,121572,101341],{"class":2052},[203,121574,121575],{"class":272},"     # 创建空文件\n",[203,121577,121578,121580],{"class":205,"line":1419},[203,121579,120823],{"class":2052},[203,121581,121582],{"class":272},"       # 查看文件内容\n",[203,121584,121585,121588],{"class":205,"line":1701},[203,121586,121587],{"class":2052},"head\u002Ftail",[203,121589,121590],{"class":272}," # 查看文件头部\u002F尾部\n",[203,121592,121593],{"class":205,"line":1706},[203,121594,2489],{"emptyLinePlaceholder":131},[203,121596,121597],{"class":205,"line":1712},[203,121598,121599],{"class":272},"# 权限管理\n",[203,121601,121602,121604],{"class":205,"line":1717},[203,121603,24669],{"class":2052},[203,121605,121606],{"class":272},"     # 修改文件权限\n",[203,121608,121609,121612],{"class":205,"line":1731},[203,121610,121611],{"class":2052},"chown",[203,121613,121614],{"class":272},"     # 修改文件所有者\n",[203,121616,121617,121619],{"class":205,"line":1736},[203,121618,24634],{"class":2052},[203,121620,121621],{"class":272},"      # 以管理员身份执行\n",[203,121623,121624],{"class":205,"line":1742},[203,121625,2489],{"emptyLinePlaceholder":131},[203,121627,121628],{"class":205,"line":1763},[203,121629,121630],{"class":272},"# 系统信息\n",[203,121632,121633,121635],{"class":205,"line":1768},[203,121634,70262],{"class":2052},[203,121636,121637],{"class":272},"     # 系统信息\n",[203,121639,121640,121643],{"class":205,"line":1782},[203,121641,121642],{"class":2052},"df",[203,121644,121645],{"class":272},"        # 磁盘使用情况\n",[203,121647,121648,121651],{"class":205,"line":1787},[203,121649,121650],{"class":2052},"free",[203,121652,121653],{"class":272},"      # 内存使用情况\n",[203,121655,121656,121659],{"class":205,"line":1816},[203,121657,121658],{"class":2052},"top\u002Fhtop",[203,121660,121661],{"class":272},"  # 进程监控\n",[203,121663,121664,121667],{"class":205,"line":1821},[203,121665,121666],{"class":2052},"ps",[203,121668,121669],{"class":272},"        # 查看进程\n",[203,121671,121672],{"class":205,"line":1838},[203,121673,2489],{"emptyLinePlaceholder":131},[203,121675,121676],{"class":205,"line":1843},[203,121677,121678],{"class":272},"# 网络\n",[203,121680,121681,121684],{"class":205,"line":1848},[203,121682,121683],{"class":2052},"ping",[203,121685,121686],{"class":272},"      # 测试网络连通性\n",[203,121688,121689,121691],{"class":205,"line":1853},[203,121690,26907],{"class":2052},[203,121692,121693],{"class":272},"      # 发送 HTTP 请求\n",[203,121695,121696,121698],{"class":205,"line":1867},[203,121697,120347],{"class":2052},[203,121699,121700],{"class":272},"      # 下载文件\n",[203,121702,121703,121706],{"class":205,"line":1872},[203,121704,121705],{"class":2052},"ssh",[203,121707,121708],{"class":272},"       # 远程登录\n",[203,121710,121711,121714],{"class":205,"line":2666},[203,121712,121713],{"class":2052},"scp",[203,121715,121716],{"class":272},"       # 远程文件传输\n",[203,121718,121719],{"class":205,"line":2680},[203,121720,2489],{"emptyLinePlaceholder":131},[203,121722,121723],{"class":205,"line":2688},[203,121724,121725],{"class":272},"# 包管理（Debian\u002FUbuntu）\n",[203,121727,121728,121730,121732],{"class":205,"line":2693},[203,121729,117426],{"class":2052},[203,121731,117405],{"class":318},[203,121733,121734],{"class":272},"   # 更新软件源\n",[203,121736,121737,121739,121741],{"class":205,"line":2699},[203,121738,117426],{"class":2052},[203,121740,23925],{"class":318},[203,121742,121743],{"class":272},"  # 安装软件包\n",[203,121745,121746,121748,121750],{"class":205,"line":2705},[203,121747,117426],{"class":2052},[203,121749,26137],{"class":318},[203,121751,121752],{"class":272},"   # 卸载软件包\n",[157,121754,121755],{"start":124},[160,121756,121757],{},"KDE Dolphin 以root打开",[19,121759,121760],{},"kde5",[194,121762,121764],{"className":117354,"code":121763,"language":117356,"meta":27,"style":27},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[200,121765,121766],{"__ignoreMap":27},[203,121767,121768,121771,121774,121777,121779,121781,121784,121787,121789,121792,121794],{"class":205,"line":206},[203,121769,121770],{"class":2052},"pkexec",[203,121772,121773],{"class":318}," env",[203,121775,121776],{"class":318}," DISPLAY=",[203,121778,28201],{"class":213},[203,121780,28259],{"class":318},[203,121782,121783],{"class":213},"$XAUTHORITY ",[203,121785,121786],{"class":318},"KDE_SESSION_VERSION=",[203,121788,533],{"class":262},[203,121790,121791],{"class":318}," KDE_FULL_SESSION=",[203,121793,1452],{"class":262},[203,121795,121796],{"class":318}," dolphin\n",[19,121798,121799],{},"kde6",[194,121801,121803],{"className":117354,"code":121802,"language":117356,"meta":27,"style":27},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[200,121804,121805],{"__ignoreMap":27},[203,121806,121807,121809,121811,121813,121815,121817,121819,121821,121823,121825,121827],{"class":205,"line":206},[203,121808,121770],{"class":2052},[203,121810,121773],{"class":318},[203,121812,121776],{"class":318},[203,121814,28201],{"class":213},[203,121816,28259],{"class":318},[203,121818,121783],{"class":213},[203,121820,121786],{"class":318},[203,121822,558],{"class":262},[203,121824,121791],{"class":318},[203,121826,1452],{"class":262},[203,121828,121796],{"class":318},[5216,121830,121831],{},"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":27,"searchDepth":124,"depth":124,"links":121833},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121493,"description":23467},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121840,"title":121841,"body":121842,"description":23467,"extension":129,"meta":121856,"navigation":131,"path":121857,"seo":121858,"stem":121859,"__hash__":121860},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121843,"toc":121854},[121844,121847],[10,121845,121841],{"id":121846},"_5-各种环境配置",[19,121848,121849],{},[452,121850,121853],{"href":121851,"rel":121852},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23956],"电控组环境搭建大全",{"title":27,"searchDepth":124,"depth":124,"links":121855},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121841,"description":23467},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121862,"title":121863,"body":121864,"description":23467,"extension":129,"meta":122212,"navigation":131,"path":122213,"seo":122214,"stem":122215,"__hash__":122216},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121865,"toc":122204},[121866,121869,121873,121877,121881,121886,121893,121897,122190,122194,122201],[10,121867,121863],{"id":121868},"_6-拓展功能",[14,121870,121872],{"id":121871},"_61-wine","6.1 Wine",[14,121874,121876],{"id":121875},"_62-android","6.2 Android",[174,121878,121880],{"id":121879},"_621-i卡a卡","6.2.1 I卡、A卡",[157,121882,121883],{},[160,121884,121885],{},"Wayland-Waydroid(体验超级好)",[19,121887,121888,121889],{},"Waydroid 官网与安装指南：",[452,121890,121891],{"href":121891,"rel":121892},"https:\u002F\u002Fwaydro.id\u002F",[23956],[174,121894,121896],{"id":121895},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[157,121898,121899],{},[160,121900,121901,121902,121904,121905,121909,121911,121914,121919,122116],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53774,121903],{},"BlissOS 官网下载：",[452,121906,121907],{"href":121907,"rel":121908},"https:\u002F\u002Fblissos.org\u002F",[23956],[53774,121910],{},[25,121912],{"alt":27,"src":121913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[157,121915,121916],{"start":1269},[160,121917,121918],{},"比较推荐的配置",[194,121920,121922],{"className":117354,"code":121921,"language":117356,"meta":27,"style":27},"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",[200,121923,121924,121931,121941,121951,121961,121973,121983,121990,122000,122009,122018,122028,122038,122047,122057,122067,122079,122089,122098,122108],{"__ignoreMap":27},[203,121925,121926,121929],{"class":205,"line":206},[203,121927,121928],{"class":2052},"qemu-system-x86_64",[203,121930,24736],{"class":262},[203,121932,121933,121936,121939],{"class":205,"line":124},[203,121934,121935],{"class":262},"        -M",[203,121937,121938],{"class":318}," q35,vmport=off",[203,121940,24736],{"class":262},[203,121942,121943,121946,121949],{"class":205,"line":1269},[203,121944,121945],{"class":262},"        -accel",[203,121947,121948],{"class":318}," kvm",[203,121950,24736],{"class":262},[203,121952,121953,121956,121959],{"class":205,"line":1284},[203,121954,121955],{"class":262},"        -cpu",[203,121957,121958],{"class":318}," qemu64,+sse3,+sse4.2",[203,121960,24736],{"class":262},[203,121962,121963,121966,121969,121971],{"class":205,"line":1290},[203,121964,121965],{"class":262},"        -smp",[203,121967,121968],{"class":318}," 8,cores=",[203,121970,507],{"class":262},[203,121972,24736],{"class":262},[203,121974,121975,121978,121981],{"class":205,"line":1304},[203,121976,121977],{"class":262},"        -m",[203,121979,121980],{"class":318}," 6G",[203,121982,24736],{"class":262},[203,121984,121985,121988],{"class":205,"line":1310},[203,121986,121987],{"class":262},"        -usb",[203,121989,24736],{"class":262},[203,121991,121992,121995,121998],{"class":205,"line":1401},[203,121993,121994],{"class":262},"        -device",[203,121996,121997],{"class":318}," virtio-tablet",[203,121999,24736],{"class":262},[203,122001,122002,122004,122007],{"class":205,"line":1407},[203,122003,121994],{"class":262},[203,122005,122006],{"class":318}," virtio-keyboard",[203,122008,24736],{"class":262},[203,122010,122011,122013,122016],{"class":205,"line":1419},[203,122012,121994],{"class":262},[203,122014,122015],{"class":318}," usb-tablet",[203,122017,24736],{"class":262},[203,122019,122020,122023,122026],{"class":205,"line":1701},[203,122021,122022],{"class":262},"        -bios",[203,122024,122025],{"class":318}," OVMF-pure-efi64.fd",[203,122027,24736],{"class":262},[203,122029,122030,122033,122036],{"class":205,"line":1706},[203,122031,122032],{"class":262},"        -net",[203,122034,122035],{"class":318}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[203,122037,24736],{"class":262},[203,122039,122040,122042,122045],{"class":205,"line":1712},[203,122041,122032],{"class":262},[203,122043,122044],{"class":318}," nic,model=virtio",[203,122046,24736],{"class":262},[203,122048,122049,122052,122055],{"class":205,"line":1717},[203,122050,122051],{"class":262},"        -audio",[203,122053,122054],{"class":318}," sdl,model=hda",[203,122056,24736],{"class":262},[203,122058,122059,122062,122065],{"class":205,"line":1731},[203,122060,122061],{"class":262},"        -display",[203,122063,122064],{"class":318}," sdl,gl=on,show-cursor=on",[203,122066,24736],{"class":262},[203,122068,122069,122071,122074,122077],{"class":205,"line":1736},[203,122070,121994],{"class":262},[203,122072,122073],{"class":318}," virtio-vga-gl,xres=1920,yres=",[203,122075,122076],{"class":262},"1080",[203,122078,24736],{"class":262},[203,122080,122081,122084,122087],{"class":205,"line":1742},[203,122082,122083],{"class":262},"        -drive",[203,122085,122086],{"class":318}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[203,122088,24736],{"class":262},[203,122090,122091,122093,122096],{"class":205,"line":1763},[203,122092,122083],{"class":262},[203,122094,122095],{"class":318}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[203,122097,24736],{"class":262},[203,122099,122100,122103,122106],{"class":205,"line":1768},[203,122101,122102],{"class":262},"        -monitor",[203,122104,122105],{"class":318}," stdio",[203,122107,24736],{"class":262},[203,122109,122110,122113],{"class":205,"line":1782},[203,122111,122112],{"class":262},"        -serial",[203,122114,122115],{"class":318}," none\n",[157,122117,122118],{"start":1290},[160,122119,122120,122121],{},"常用操作：",[157,122122,122123,122126,122182],{},[160,122124,122125],{},"全屏：Ctrl+Alt+F",[160,122127,122128,122129,122134],{},"adb调试",[157,122130,122131],{},[160,122132,122133],{},"使Linux与Android用ADB连接。",[194,122135,122137],{"className":117354,"code":122136,"language":117356,"meta":27,"style":27},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[200,122138,122139,122144,122155,122160,122172,122177],{"__ignoreMap":27},[203,122140,122141],{"class":205,"line":206},[203,122142,122143],{"class":272},"# 连接安卓\n",[203,122145,122146,122149,122152],{"class":205,"line":124},[203,122147,122148],{"class":2052},"adb",[203,122150,122151],{"class":318}," connect",[203,122153,122154],{"class":262}," 127.0.0.1\n",[203,122156,122157],{"class":205,"line":1269},[203,122158,122159],{"class":272},"# 打开shell\n",[203,122161,122162,122164,122166,122169],{"class":205,"line":1284},[203,122163,122148],{"class":2052},[203,122165,26941],{"class":262},[203,122167,122168],{"class":318}," 127.0.0.1:5555",[203,122170,122171],{"class":318}," shell\n",[203,122173,122174],{"class":205,"line":1290},[203,122175,122176],{"class":272},"# 使用root权限\n",[203,122178,122179],{"class":205,"line":1304},[203,122180,122181],{"class":2052},"su\n",[160,122183,122184,122185],{},"中文输入法",[157,122186,122187],{},[160,122188,122189],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122191,122193],{"id":122192},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122195,122196,122197],{},"rEFInd 官网与文档：",[452,122198,122199],{"href":122199,"rel":122200},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23956],[5216,122202,122203],{},"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":27,"searchDepth":124,"depth":124,"links":122205},[122206,122207,122211],{"id":121871,"depth":124,"text":121872},{"id":121875,"depth":124,"text":121876,"children":122208},[122209,122210],{"id":121879,"depth":1269,"text":121880},{"id":121895,"depth":1269,"text":121896},{"id":122192,"depth":124,"text":122193},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121863,"description":23467},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122218,"title":122219,"body":122220,"description":23467,"extension":129,"meta":125519,"navigation":131,"path":125520,"seo":125521,"stem":125522,"__hash__":125523},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122221,"toc":125493},[122222,122225,122229,122232,122239,122489,122492,122564,122567,122571,122575,122580,122583,122586,122589,122594,122597,122600,122603,122608,122611,122616,122619,122622,122627,122630,122635,122638,122642,122646,122649,122654,122657,122671,122674,122677,122686,122689,122698,122701,122704,122713,122716,122725,122728,122731,122740,122743,122746,122761,122764,122767,122776,122781,122784,122787,122796,122799,122808,122811,122820,122823,122832,122837,122840,122848,122853,122856,122865,122868,122876,122881,122884,122893,122896,122899,122903,122906,122911,122914,122919,122933,122938,122943,122954,122959,122965,122970,122985,122990,122993,122998,123003,123008,123016,123021,123028,123033,123044,123049,123052,123056,123059,123062,123067,123070,123089,123094,123097,123106,123111,123114,123136,123139,123169,123172,123177,123180,123194,123199,123218,123221,123224,123229,123241,123246,123251,123254,123259,123262,123277,123280,123285,123290,123294,123299,123339,123342,123346,123352,123358,123363,123366,123373,123378,123385,123388,123391,123398,123412,123415,123475,123478,123492,123504,123507,123510,123513,123577,123580,123583,123586,123606,123609,123614,123621,123625,123628,123632,123637,123642,123646,123649,123652,123694,123699,123702,123724,123739,123741,123746,123758,123818,123820,123822,123876,123878,123880,123886,123891,123894,123899,123903,123906,123968,123973,123976,123978,123982,123994,124076,124078,124080,124134,124140,124142,124146,124151,124153,124158,124162,124182,124217,124221,124224,124227,124230,124237,124240,124252,124255,124270,124273,124292,124340,124343,124360,124363,124377,124382,124385,124394,124409,124421,124459,124464,124473,124478,124483,124509,124518,124522,124526,124531,124534,124538,124542,124547,124550,124555,124558,124563,124566,124571,124574,124578,124583,124586,124591,124594,124598,124603,124606,124611,124614,124619,124622,124626,124631,124634,124639,124642,124647,124650,124654,124659,124662,124667,124670,124675,124678,124683,124686,124691,124694,124699,124702,124706,124711,124714,124719,124726,124730,124735,124738,124743,124746,124750,124755,124758,124761,124764,124767,124770,124774,124777,124787,124792,124797,124819,124824,124829,124836,124840,124845,124848,124851,124856,124859,124862,124865,124868,124871,124874,124877,124880,124883,124886,124889,124892,124897,124902,124907,124912,124917,124922,124927,124930,124934,124937,124941,124946,124951,124956,124961,124965,124971,124979,124984,124987,124992,125007,125010,125015,125049,125064,125067,125122,125148,125160,125163,125172,125175,125190,125195,125198,125204,125209,125212,125217,125220,125225,125230,125237,125240,125255,125258,125293,125298,125306,125344,125347,125350,125355,125358,125363,125374,125408,125413,125416,125425,125430,125436,125439,125444,125453,125458,125461,125464,125469,125477,125480,125485,125490],[10,122223,122219],{"id":122224},"_7-其他操作",[14,122226,122228],{"id":122227},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122230,122231],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122233,122234,122235,122238],{},"进入工控机的硬盘目录，进入",[200,122236,122237],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[194,122240,122244],{"className":122241,"code":122242,"language":122243,"meta":27,"style":27},"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",[200,122245,122246,122254,122265,122272,122279,122291,122298,122310,122321,122332,122339,122346,122353,122365,122377,122384,122396,122408,122415,122427,122439,122451,122462,122469,122480],{"__ignoreMap":27},[203,122247,122248,122251],{"class":205,"line":206},[203,122249,122250],{"class":51358},"network",[203,122252,122253],{"class":213},": \n",[203,122255,122256,122259,122261,122263],{"class":205,"line":124},[203,122257,122258],{"class":51358},"  version",[203,122260,51495],{"class":213},[203,122262,291],{"class":262},[203,122264,2763],{"class":213},[203,122266,122267,122270],{"class":205,"line":1269},[203,122268,122269],{"class":51358},"  wifis",[203,122271,122253],{"class":213},[203,122273,122274,122277],{"class":205,"line":1284},[203,122275,122276],{"class":51358},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[203,122278,122253],{"class":213},[203,122280,122281,122284,122286,122289],{"class":205,"line":1290},[203,122282,122283],{"class":51358},"      renderer",[203,122285,51495],{"class":213},[203,122287,122288],{"class":318},"NetworkManager",[203,122290,2763],{"class":213},[203,122292,122293,122296],{"class":205,"line":1304},[203,122294,122295],{"class":51358},"      match",[203,122297,122253],{"class":213},[203,122299,122300,122303,122305,122308],{"class":205,"line":1310},[203,122301,122302],{"class":51358},"        name",[203,122304,51495],{"class":213},[203,122306,122307],{"class":318},"\"wlan0\"",[203,122309,2763],{"class":213},[203,122311,122312,122315,122317,122319],{"class":205,"line":1401},[203,122313,122314],{"class":51358},"      dhcp4",[203,122316,51495],{"class":213},[203,122318,1452],{"class":262},[203,122320,2763],{"class":213},[203,122322,122323,122326,122328,122330],{"class":205,"line":1407},[203,122324,122325],{"class":51358},"      dhcp6",[203,122327,51495],{"class":213},[203,122329,1452],{"class":262},[203,122331,2763],{"class":213},[203,122333,122334,122337],{"class":205,"line":1419},[203,122335,122336],{"class":51358},"      access-points",[203,122338,122253],{"class":213},[203,122340,122341,122344],{"class":205,"line":1701},[203,122342,122343],{"class":318},"        \"EMIS_Vinci_Robocon_5G\"",[203,122345,122253],{"class":213},[203,122347,122348,122351],{"class":205,"line":1706},[203,122349,122350],{"class":51358},"          auth",[203,122352,122253],{"class":213},[203,122354,122355,122358,122360,122363],{"class":205,"line":1712},[203,122356,122357],{"class":51358},"            key-management",[203,122359,51495],{"class":213},[203,122361,122362],{"class":318},"\"psk\"",[203,122364,2763],{"class":213},[203,122366,122367,122370,122372,122375],{"class":205,"line":1717},[203,122368,122369],{"class":51358},"            password",[203,122371,51495],{"class":213},[203,122373,122374],{"class":318},"\"vinci666\"",[203,122376,2763],{"class":213},[203,122378,122379,122382],{"class":205,"line":1731},[203,122380,122381],{"class":51358},"          networkmanager",[203,122383,122253],{"class":213},[203,122385,122386,122389,122391,122394],{"class":205,"line":1736},[203,122387,122388],{"class":51358},"            uuid",[203,122390,51495],{"class":213},[203,122392,122393],{"class":318},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[203,122395,2763],{"class":213},[203,122397,122398,122401,122403,122406],{"class":205,"line":1742},[203,122399,122400],{"class":51358},"            name",[203,122402,51495],{"class":213},[203,122404,122405],{"class":318},"\"EMIS_Vinci_Robocon_5G\"",[203,122407,2763],{"class":213},[203,122409,122410,122413],{"class":205,"line":1763},[203,122411,122412],{"class":51358},"            passthrough",[203,122414,122253],{"class":213},[203,122416,122417,122420,122422,122425],{"class":205,"line":1768},[203,122418,122419],{"class":51358},"              wifi-security.auth-alg",[203,122421,51495],{"class":213},[203,122423,122424],{"class":318},"\"open\"",[203,122426,2763],{"class":213},[203,122428,122429,122432,122434,122437],{"class":205,"line":1782},[203,122430,122431],{"class":51358},"              ipv6.addr-gen-mode",[203,122433,51495],{"class":213},[203,122435,122436],{"class":318},"\"default\"",[203,122438,2763],{"class":213},[203,122440,122441,122444,122446,122449],{"class":205,"line":1787},[203,122442,122443],{"class":51358},"              ipv6.ip6-privacy",[203,122445,51495],{"class":213},[203,122447,122448],{"class":318},"\"-1\"",[203,122450,2763],{"class":213},[203,122452,122453,122456,122458,122460],{"class":205,"line":1816},[203,122454,122455],{"class":51358},"              proxy._",[203,122457,51495],{"class":213},[203,122459,7742],{"class":318},[203,122461,2763],{"class":213},[203,122463,122464,122467],{"class":205,"line":1821},[203,122465,122466],{"class":51358},"      networkmanager",[203,122468,122253],{"class":213},[203,122470,122471,122474,122476,122478],{"class":205,"line":1838},[203,122472,122473],{"class":51358},"        uuid",[203,122475,51495],{"class":213},[203,122477,122393],{"class":318},[203,122479,2763],{"class":213},[203,122481,122482,122484,122486],{"class":205,"line":1843},[203,122483,122302],{"class":51358},[203,122485,51495],{"class":213},[203,122487,122488],{"class":318},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122490,122491],{},"将其改为新wifi的名和密码：",[194,122493,122495],{"className":122241,"code":122494,"language":122243,"meta":27,"style":27},"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",[200,122496,122497,122503,122512,122518,122525,122534,122542,122548,122554],{"__ignoreMap":27},[203,122498,122499,122501],{"class":205,"line":206},[203,122500,122250],{"class":51358},[203,122502,3828],{"class":213},[203,122504,122505,122507,122509],{"class":205,"line":124},[203,122506,122258],{"class":51358},[203,122508,51495],{"class":213},[203,122510,122511],{"class":262},"2\n",[203,122513,122514,122516],{"class":205,"line":1269},[203,122515,122269],{"class":51358},[203,122517,3828],{"class":213},[203,122519,122520,122523],{"class":205,"line":1284},[203,122521,122522],{"class":51358},"    wlan0",[203,122524,3828],{"class":213},[203,122526,122527,122529,122531],{"class":205,"line":1290},[203,122528,122314],{"class":51358},[203,122530,51495],{"class":213},[203,122532,122533],{"class":262},"true\n",[203,122535,122536,122538,122540],{"class":205,"line":1304},[203,122537,122325],{"class":51358},[203,122539,51495],{"class":213},[203,122541,122533],{"class":262},[203,122543,122544,122546],{"class":205,"line":1310},[203,122545,122336],{"class":51358},[203,122547,3828],{"class":213},[203,122549,122550,122552],{"class":205,"line":1401},[203,122551,122343],{"class":318},[203,122553,3828],{"class":213},[203,122555,122556,122559,122561],{"class":205,"line":1407},[203,122557,122558],{"class":51358},"          password",[203,122560,51495],{"class":213},[203,122562,122563],{"class":318},"\"vinci666\"\n",[19,122565,122566],{},"工控机开机即可连上网。",[14,122568,122570],{"id":122569},"_72-ssh远程开发","7.2 SSH远程开发",[174,122572,122574],{"id":122573},"_721-环境准备","7.2.1 环境准备",[19,122576,122577],{},[363,122578,122579],{},"1.硬件准备",[19,122581,122582],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,122584,122585],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,122587,122588],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,122590,122591],{},[363,122592,122593],{},"2.设置固定IP",[19,122595,122596],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,122598,122599],{},"1.进入设置界面",[19,122601,122602],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,122604,122605],{},[25,122606],{"alt":27,"src":122607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,122609,122610],{},"2.配置所连接的网络",[19,122612,122613],{},[25,122614],{"alt":27,"src":122615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,122617,122618],{},"3.设置固定IP",[19,122620,122621],{},"查看当前IP地址。",[19,122623,122624],{},[25,122625],{"alt":27,"src":122626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,122628,122629],{},"设置固定IP。",[19,122631,122632],{},[25,122633],{"alt":27,"src":122634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,122636,122637],{},"至此，IP配置完毕。",[174,122639,122641],{"id":122640},"_722-环境搭建","7.2.2 环境搭建",[19,122643,122644],{},[363,122645,25811],{},[19,122647,122648],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,122650,122651],{},[363,122652,122653],{},"实现",[19,122655,122656],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[157,122658,122659,122662,122665,122668],{},[160,122660,122661],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[160,122663,122664],{},"远程主机启动SSH服务；",[160,122666,122667],{},"本地主机登陆远程主机；",[160,122669,122670],{},"实现数据传输。",[19,122672,122673],{},"1.安装SSH客户端与服务端",[19,122675,122676],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[194,122678,122680],{"className":120874,"code":122679,"language":120876,"meta":120877,"style":27}," sudo apt install openssh-server\n",[200,122681,122682],{"__ignoreMap":27},[203,122683,122684],{"class":205,"line":206},[203,122685,122679],{},[19,122687,122688],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[194,122690,122692],{"className":120874,"code":122691,"language":120876,"meta":120877,"style":27},"sudo apt install openssh-client\n",[200,122693,122694],{"__ignoreMap":27},[203,122695,122696],{"class":205,"line":206},[203,122697,122691],{},[19,122699,122700],{},"2.远程主机启动SSH服务",[19,122702,122703],{},"远程主机启动 ssh 服务命令如下：",[194,122705,122707],{"className":120874,"code":122706,"language":120876,"meta":120877,"style":27},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[200,122708,122709],{"__ignoreMap":27},[203,122710,122711],{"class":205,"line":206},[203,122712,122706],{},[19,122714,122715],{},"启动后可使用如下命令查看服务是否正常运行：",[194,122717,122719],{"className":120874,"code":122718,"language":120876,"meta":120877,"style":27},"ps -e | grep ssh\n",[200,122720,122721],{"__ignoreMap":27},[203,122722,122723],{"class":205,"line":206},[203,122724,122718],{},[19,122726,122727],{},"如果启动成功，会包含 sshd 程序。",[19,122729,122730],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[194,122732,122734],{"className":120874,"code":122733,"language":120876,"meta":120877,"style":27},"sudo systemctl enable ssh\n",[200,122735,122736],{"__ignoreMap":27},[203,122737,122738],{"class":205,"line":206},[203,122739,122733],{},[19,122741,122742],{},"3.本地远程登录",[19,122744,122745],{},"登录远程主机可以调用如下命令:",[194,122747,122749],{"className":117354,"code":122748,"language":117356,"meta":27,"style":27},"ssh -X 用户名@ip地址\n",[200,122750,122751],{"__ignoreMap":27},[203,122752,122753,122755,122758],{"class":205,"line":206},[203,122754,121705],{"class":2052},[203,122756,122757],{"class":262}," -X",[203,122759,122760],{"class":318}," 用户名@ip地址\n",[19,122762,122763],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,122765,122766],{},"如果退出，可以调用exit命令：",[194,122768,122770],{"className":120874,"code":122769,"language":120876,"meta":120877,"style":27},"exit\n",[200,122771,122772],{"__ignoreMap":27},[203,122773,122774],{"class":205,"line":206},[203,122775,122769],{},[19,122777,122778],{},[363,122779,122780],{},"4.实现数据传输",[19,122782,122783],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,122785,122786],{},"上传文件指令格式如下：",[194,122788,122790],{"className":120874,"code":122789,"language":120876,"meta":120877,"style":27},"scp 本地文件路径 账号@ip:路径\n",[200,122791,122792],{"__ignoreMap":27},[203,122793,122794],{"class":205,"line":206},[203,122795,122789],{},[19,122797,122798],{},"上传文件夹指令格式如下：",[194,122800,122802],{"className":120874,"code":122801,"language":120876,"meta":120877,"style":27},"scp -r 本地文件夹路径 账号@ip:路径\n",[200,122803,122804],{"__ignoreMap":27},[203,122805,122806],{"class":205,"line":206},[203,122807,122801],{},[19,122809,122810],{},"下载文件指令格式如下：",[194,122812,122814],{"className":120874,"code":122813,"language":120876,"meta":120877,"style":27},"scp 账号@ip:路径 本地文件夹路径\n",[200,122815,122816],{"__ignoreMap":27},[203,122817,122818],{"class":205,"line":206},[203,122819,122813],{},[19,122821,122822],{},"下载文件夹指令格式如下：",[194,122824,122826],{"className":120874,"code":122825,"language":120876,"meta":120877,"style":27},"scp -r 账号@ip:路径 本地文件夹路径\n",[200,122827,122828],{"__ignoreMap":27},[203,122829,122830],{"class":205,"line":206},[203,122831,122825],{},[19,122833,122834],{},[363,122835,122836],{},"优化",[19,122838,122839],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[157,122841,122842,122845],{},[160,122843,122844],{},"本地生成密钥对；",[160,122846,122847],{},"将公钥上传至远程主机。",[19,122849,122850],{},[363,122851,122852],{},"1.生成密钥对",[19,122854,122855],{},"本地客户端生成公私钥：（一路回车默认即可）",[194,122857,122859],{"className":120874,"code":122858,"language":120876,"meta":120877,"style":27},"ssh-keygen\n",[200,122860,122861],{"__ignoreMap":27},[203,122862,122863],{"class":205,"line":206},[203,122864,122858],{},[19,122866,122867],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[157,122869,122870,122873],{},[160,122871,122872],{},"id_rsa （私钥）；",[160,122874,122875],{},"id_rsa.pub (公钥)。",[19,122877,122878],{},[363,122879,122880],{},"2.公钥上传",[19,122882,122883],{},"上传指令如下：",[194,122885,122887],{"className":120874,"code":122886,"language":120876,"meta":120877,"style":27},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[200,122888,122889],{"__ignoreMap":27},[203,122890,122891],{"class":205,"line":206},[203,122892,122886],{},[19,122894,122895],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,122897,122898],{},"以后再远程登录就无需录入密码了。",[174,122900,122902],{"id":122901},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,122904,122905],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,122907,122908],{},[363,122909,122910],{},"1.准备工作",[19,122912,122913],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,122915,122916],{},[363,122917,122918],{},"2.为VScode安装远程开发插件",[19,122920,122921,122922,122925,122926,122929,122930,28443],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[200,122923,122924],{},"扩展：商店","的搜索栏输入",[200,122927,122928],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[200,122931,122932],{},"安装",[19,122934,122935],{},[25,122936],{"alt":27,"src":122937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,122939,122940],{},[363,122941,122942],{},"3.配置远程连接",[19,122944,122945,122946,122949,122950,122953],{},"步骤1：使用快捷键",[200,122947,122948],{},"ctrl + shift + p","打开命令输入窗口，并输入",[200,122951,122952],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,122955,122956],{},[25,122957],{"alt":27,"src":122958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,122960,122961,122962,28443],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[200,122963,122964],{},"Add New SSH Host",[19,122966,122967],{},[25,122968],{"alt":27,"src":122969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,122971,122972,122973,122976,122977,122980,122981,122984],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[200,122974,122975],{},"ssh +X ubuntu@192.168.43.164","，其中，",[200,122978,122979],{},"ubuntu","需要替换为你的登录用户名，",[200,122982,122983],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,122986,122987],{},[25,122988],{"alt":27,"src":122989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,122991,122992],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,122994,122995],{},[25,122996],{"alt":27,"src":122997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,122999,123000],{},[25,123001],{"alt":27,"src":123002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123004,123005],{},[363,123006,123007],{},"4.使用",[19,123009,123010,123011,122949,123013,123015],{},"步骤1：继续使用快捷键",[200,123012,122948],{},[200,123014,122952],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123017,123018],{},[25,123019],{"alt":27,"src":123020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123022,123023,123024,123027],{},"或者，也可以点击侧边栏的",[200,123025,123026],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123029,123030],{},[25,123031],{"alt":27,"src":123032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123034,123035,123036,123039,123040,123043],{},"步骤2：选择菜单栏的",[200,123037,123038],{},"文件","下的",[200,123041,123042],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123045,123046],{},[25,123047],{"alt":27,"src":123048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123050,123051],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123053,123055],{"id":123054},"_73-远程桌面","7.3 远程桌面",[19,123057,123058],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123060,123061],{},"我们选择使用VNC来看。",[157,123063,123064],{},[160,123065,123066],{},"安装VNC服务器：",[19,123068,123069],{},"这里以TigerVNC为例进行安装：",[194,123071,123073],{"className":117354,"code":123072,"language":117356,"meta":27,"style":27},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[200,123074,123075],{"__ignoreMap":27},[203,123076,123077,123079,123081,123083,123086],{"class":205,"line":206},[203,123078,24634],{"class":2052},[203,123080,117375],{"class":318},[203,123082,23925],{"class":318},[203,123084,123085],{"class":318}," tigervnc-standalone-server",[203,123087,123088],{"class":318}," tigervnc-common\n",[157,123090,123091],{"start":124},[160,123092,123093],{},"设置VNC密码：",[19,123095,123096],{},"为VNC用户设置密码，运行以下命令：",[194,123098,123100],{"className":117354,"code":123099,"language":117356,"meta":27,"style":27},"vncpasswd\n",[200,123101,123102],{"__ignoreMap":27},[203,123103,123104],{"class":205,"line":206},[203,123105,123099],{"class":2052},[157,123107,123108],{"start":1269},[160,123109,123110],{},"配置VNC启动脚本:",[19,123112,123113],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[194,123115,123117],{"className":117354,"code":123116,"language":117356,"meta":27,"style":27},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[200,123118,123119,123128],{"__ignoreMap":27},[203,123120,123121,123123,123125],{"class":205,"line":206},[203,123122,101324],{"class":2052},[203,123124,29274],{"class":262},[203,123126,123127],{"class":318}," ~\u002F.vnc\n",[203,123129,123130,123133],{"class":205,"line":124},[203,123131,123132],{"class":2052},"nano",[203,123134,123135],{"class":318}," ~\u002F.vnc\u002Fxstartup\n",[19,123137,123138],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[194,123140,123142],{"className":117354,"code":123141,"language":117356,"meta":27,"style":27},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[200,123143,123144,123149,123157,123164],{"__ignoreMap":27},[203,123145,123146],{"class":205,"line":206},[203,123147,123148],{"class":272},"#!\u002Fbin\u002Fsh\n",[203,123150,123151,123154],{"class":205,"line":124},[203,123152,123153],{"class":262},"unset",[203,123155,123156],{"class":318}," SESSION_MANAGER\n",[203,123158,123159,123161],{"class":205,"line":1269},[203,123160,123153],{"class":262},[203,123162,123163],{"class":318}," DBUS_SESSION_BUS_ADDRESS\n",[203,123165,123166],{"class":205,"line":1284},[203,123167,123168],{"class":2052},"gnome-session\n",[19,123170,123171],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[157,123173,123174],{"start":1284},[160,123175,123176],{},"给予执行权限：",[19,123178,123179],{},"为xstartup文件设置执行权限：",[194,123181,123183],{"className":117354,"code":123182,"language":117356,"meta":27,"style":27},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[200,123184,123185],{"__ignoreMap":27},[203,123186,123187,123189,123192],{"class":205,"line":206},[203,123188,24669],{"class":2052},[203,123190,123191],{"class":318}," +x",[203,123193,123135],{"class":318},[157,123195,123196],{"start":1290},[160,123197,123198],{},"启动VNC服务器：",[194,123200,123202],{"className":117354,"code":123201,"language":117356,"meta":27,"style":27},"vncserver -geometry 1920x1080 -localhost=0\n",[200,123203,123204],{"__ignoreMap":27},[203,123205,123206,123209,123212,123215],{"class":205,"line":206},[203,123207,123208],{"class":2052},"vncserver",[203,123210,123211],{"class":262}," -geometry",[203,123213,123214],{"class":318}," 1920x1080",[203,123216,123217],{"class":262}," -localhost=0\n",[19,123219,123220],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123222,123223],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[157,123225,123226],{"start":1304},[160,123227,123228],{},"查看已开启的VNC服务器：",[194,123230,123232],{"className":117354,"code":123231,"language":117356,"meta":27,"style":27},"vncserver -list\n",[200,123233,123234],{"__ignoreMap":27},[203,123235,123236,123238],{"class":205,"line":206},[203,123237,123208],{"class":2052},[203,123239,123240],{"class":262}," -list\n",[19,123242,123243],{},[25,123244],{"alt":27,"src":123245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[157,123247,123248],{"start":1310},[160,123249,123250],{},"连接到VNC服务器：",[19,123252,123253],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[157,123255,123256],{"start":1401},[160,123257,123258],{},"停止VNC服务器：",[19,123260,123261],{},"如果需要停止VNC服务器，可以使用以下命令：",[194,123263,123265],{"className":117354,"code":123264,"language":117356,"meta":27,"style":27},"vncserver -kill :1\n",[200,123266,123267],{"__ignoreMap":27},[203,123268,123269,123271,123274],{"class":205,"line":206},[203,123270,123208],{"class":2052},[203,123272,123273],{"class":262}," -kill",[203,123275,123276],{"class":318}," :1\n",[19,123278,123279],{},"将:1替换为你实际使用的显示编号。",[19,123281,123282],{},[25,123283],{"alt":27,"src":123284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123286,123287],{},[25,123288],{"alt":27,"src":123289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123291,123293],{"id":123292},"_74-usb端口设置","7.4 USB端口设置",[19,123295,123296],{},[363,123297,123298],{},"首先先配置好权限",[194,123300,123302],{"className":117354,"code":123301,"language":117356,"meta":27,"style":27},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[200,123303,123304,123309,123322,123329,123334],{"__ignoreMap":27},[203,123305,123306],{"class":205,"line":206},[203,123307,123308],{"class":272},"# 将用户权限提高\n",[203,123310,123311,123313,123315,123317,123320],{"class":205,"line":124},[203,123312,24634],{"class":2052},[203,123314,26632],{"class":318},[203,123316,26635],{"class":262},[203,123318,123319],{"class":318}," dialout",[203,123321,26640],{"class":213},[203,123323,123324,123326],{"class":205,"line":1269},[203,123325,26659],{"class":2052},[203,123327,123328],{"class":318}," dialout\n",[203,123330,123331],{"class":205,"line":1284},[203,123332,123333],{"class":272},"# 查看下面命令是否输出dialout（若输出才正常）\n",[203,123335,123336],{"class":205,"line":1290},[203,123337,123338],{"class":2052},"groups\n",[19,123340,123341],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[174,123343,123345],{"id":123344},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123347,123348,123351],{},[363,123349,123350],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123353,123354,123357],{},[363,123355,123356],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123359,123360],{},[363,123361,123362],{},"流程如下：",[19,123364,123365],{},"（1）.查找设备idVendor和idProduct",[19,123367,123368,123369,123372],{},"接入两个USB设备，在终端调用指令",[200,123370,123371],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123374,123375],{},[25,123376],{"alt":27,"src":123377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123379,123380,123381,123384],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[200,123382,123383],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123386,123387],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123389,123390],{},"（2）.编写映射规则",[19,123392,123393,123394,123397],{},"在",[200,123395,123396],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[194,123399,123401],{"className":117354,"code":123400,"language":117356,"meta":27,"style":27},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[200,123402,123403],{"__ignoreMap":27},[203,123404,123405,123407,123409],{"class":205,"line":206},[203,123406,24634],{"class":2052},[203,123408,118641],{"class":318},[203,123410,123411],{"class":318}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123413,123414],{},"输入如下内容：",[194,123416,123418],{"className":117354,"code":123417,"language":117356,"meta":27,"style":27},"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",[200,123419,123420,123450],{"__ignoreMap":27},[203,123421,123422,123425,123427,123430,123433,123436,123439,123441,123444,123447],{"class":205,"line":206},[203,123423,123424],{"class":213},"KERNEL",[203,123426,259],{"class":209},[203,123428,123429],{"class":318},"=\"ttyUSB*\",",[203,123431,123432],{"class":2052}," ATTRS",[203,123434,123435],{"class":318},"{idVendor}==",[203,123437,123438],{"class":2052},"\"10c4\"",[203,123440,592],{"class":2052},[203,123442,123443],{"class":318}," ATTRS{idProduct}==\"ea60\",",[203,123445,123446],{"class":318}," MODE:=\"0777\",",[203,123448,123449],{"class":318}," SYMLINK+=\"mylidar\"\n",[203,123451,123452,123454,123456,123458,123460,123462,123465,123467,123470,123472],{"class":205,"line":124},[203,123453,123424],{"class":213},[203,123455,259],{"class":209},[203,123457,123429],{"class":318},[203,123459,123432],{"class":2052},[203,123461,123435],{"class":318},[203,123463,123464],{"class":2052},"\"1a86\"",[203,123466,592],{"class":2052},[203,123468,123469],{"class":318}," ATTRS{idProduct}==\"7523\",",[203,123471,123446],{"class":318},[203,123473,123474],{"class":318}," SYMLINK+=\"mycar\"\n",[19,123476,123477],{},"代码解释：",[1221,123479,123480,123483,123486,123489],{},[160,123481,123482],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[160,123484,123485],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[160,123487,123488],{},"SYMLINK是符号连接，即绑定的别名；",[160,123490,123491],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123493,123494,123495,123498,123501],{},"***小提示：***",[23644,123496,123497],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[200,123499,123500],{},"\u002Fetc\u002Fudev\u002Frule.d",[23644,123502,123503],{},"目录即可。",[19,123505,123506],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123508,123509],{},"（3）.使规则生效",[19,123511,123512],{},"在终端下输入如下指令：",[194,123514,123516],{"className":117354,"code":123515,"language":117356,"meta":27,"style":27},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[200,123517,123518,123523,123535,123546,123550,123555,123568],{"__ignoreMap":27},[203,123519,123520],{"class":205,"line":206},[203,123521,123522],{"class":272},"# Ubuntu用下方命令\n",[203,123524,123525,123527,123529,123532],{"class":205,"line":124},[203,123526,24634],{"class":2052},[203,123528,120106],{"class":318},[203,123530,123531],{"class":318}," udev",[203,123533,123534],{"class":318}," reload\n",[203,123536,123537,123539,123541,123543],{"class":205,"line":1269},[203,123538,24634],{"class":2052},[203,123540,120106],{"class":318},[203,123542,123531],{"class":318},[203,123544,123545],{"class":318}," restart\n",[203,123547,123548],{"class":205,"line":1284},[203,123549,2489],{"emptyLinePlaceholder":131},[203,123551,123552],{"class":205,"line":1290},[203,123553,123554],{"class":272},"#Fedora用下方命令\n",[203,123556,123557,123559,123562,123565],{"class":205,"line":1304},[203,123558,24634],{"class":2052},[203,123560,123561],{"class":318}," udevadm",[203,123563,123564],{"class":318}," control",[203,123566,123567],{"class":262}," --reload\n",[203,123569,123570,123572,123574],{"class":205,"line":1310},[203,123571,24634],{"class":2052},[203,123573,123561],{"class":318},[203,123575,123576],{"class":318}," trigger\n",[19,123578,123579],{},"再重新插拔设备即可。",[19,123581,123582],{},"（4）.测试",[19,123584,123585],{},"终端下输入如下指令",[194,123587,123589],{"className":117354,"code":123588,"language":117356,"meta":27,"style":27},"ll \u002Fdev | grep ttyUSB\n",[200,123590,123591],{"__ignoreMap":27},[203,123592,123593,123596,123599,123601,123603],{"class":205,"line":206},[203,123594,123595],{"class":2052},"ll",[203,123597,123598],{"class":318}," \u002Fdev",[203,123600,25167],{"class":209},[203,123602,30294],{"class":2052},[203,123604,123605],{"class":318}," ttyUSB\n",[19,123607,123608],{},"运行结果如下：",[19,123610,123611],{},[25,123612],{"alt":27,"src":123613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,123615,123616,123617,123620],{},"也可以多次插拔USB设备，会发现设备端口",[200,123618,123619],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,123622,123623],{},[363,123624,118022],{},[19,123626,123627],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[174,123629,123631],{"id":123630},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,123633,123634,123636],{},[363,123635,123350],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,123638,123639,123641],{},[363,123640,123356],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,123643,123644],{},[363,123645,123362],{},[19,123647,123648],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,123650,123651],{},"调用如下指令查看第一台雷达的USB信息：",[194,123653,123655],{"className":117354,"code":123654,"language":117356,"meta":27,"style":27},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[200,123656,123657,123677],{"__ignoreMap":27},[203,123658,123659,123662,123664,123667,123670,123672,123674],{"class":205,"line":206},[203,123660,123661],{"class":2052},"udevadm",[203,123663,69879],{"class":318},[203,123665,123666],{"class":262}," --attribute-walk",[203,123668,123669],{"class":262}," --name=\u002Fdev\u002FttyUSB0",[203,123671,25167],{"class":209},[203,123673,30294],{"class":2052},[203,123675,123676],{"class":318}," KERNELS\n",[203,123678,123679,123681,123683,123685,123688,123690,123692],{"class":205,"line":124},[203,123680,123661],{"class":2052},[203,123682,69879],{"class":318},[203,123684,123666],{"class":262},[203,123686,123687],{"class":262}," --name=\u002Fdev\u002FttyACM0",[203,123689,25167],{"class":209},[203,123691,30294],{"class":2052},[203,123693,123676],{"class":318},[19,123695,123696],{},[25,123697],{"alt":27,"src":123698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,123700,123701],{},"调用如下指令查看第二台雷达的USB信息：",[194,123703,123705],{"className":117354,"code":123704,"language":117356,"meta":27,"style":27},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[200,123706,123707],{"__ignoreMap":27},[203,123708,123709,123711,123713,123715,123718,123720,123722],{"class":205,"line":206},[203,123710,123661],{"class":2052},[203,123712,69879],{"class":318},[203,123714,123666],{"class":262},[203,123716,123717],{"class":262}," --name=\u002Fdev\u002FttyUSB1",[203,123719,25167],{"class":209},[203,123721,30294],{"class":2052},[203,123723,123676],{"class":318},[19,123725,123726,123727,123730,123731,123734,123735,123738],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[200,123728,123729],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[200,123732,123733],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[363,123736,123737],{},"唯一性标识","”。",[19,123740,123390],{},[19,123742,123393,123743,123745],{},[200,123744,123396],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[194,123747,123748],{"className":117354,"code":123400,"language":117356,"meta":27,"style":27},[200,123749,123750],{"__ignoreMap":27},[203,123751,123752,123754,123756],{"class":205,"line":206},[203,123753,24634],{"class":2052},[203,123755,118641],{"class":318},[203,123757,123411],{"class":318},[194,123759,123761],{"className":117354,"code":123760,"language":117356,"meta":27,"style":27},"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",[200,123762,123763,123792],{"__ignoreMap":27},[203,123764,123765,123767,123769,123771,123774,123776,123779,123782,123784,123787,123789],{"class":205,"line":206},[203,123766,123424],{"class":213},[203,123768,259],{"class":209},[203,123770,123429],{"class":318},[203,123772,123773],{"class":213}," KERNELS",[203,123775,259],{"class":209},[203,123777,123778],{"class":318},"=\"1-1.3:1.0\",",[203,123780,123781],{"class":2052}," MODE:",[203,123783,259],{"class":318},[203,123785,123786],{"class":2052},"\"0777\"",[203,123788,592],{"class":2052},[203,123790,123791],{"class":318}," SYMLINK+=\"rplidar_front\"\n",[203,123793,123794,123796,123798,123800,123802,123804,123807,123809,123811,123813,123815],{"class":205,"line":124},[203,123795,123424],{"class":213},[203,123797,259],{"class":209},[203,123799,123429],{"class":318},[203,123801,123773],{"class":213},[203,123803,259],{"class":209},[203,123805,123806],{"class":318},"=\"1-1.4:1.0\",",[203,123808,123781],{"class":2052},[203,123810,259],{"class":318},[203,123812,123786],{"class":2052},[203,123814,592],{"class":2052},[203,123816,123817],{"class":318}," SYMLINK+=\"rplidar_back\"\n",[19,123819,123509],{},[19,123821,123512],{},[194,123823,123824],{"className":117354,"code":123515,"language":117356,"meta":27,"style":27},[200,123825,123826,123830,123840,123850,123854,123858,123868],{"__ignoreMap":27},[203,123827,123828],{"class":205,"line":206},[203,123829,123522],{"class":272},[203,123831,123832,123834,123836,123838],{"class":205,"line":124},[203,123833,24634],{"class":2052},[203,123835,120106],{"class":318},[203,123837,123531],{"class":318},[203,123839,123534],{"class":318},[203,123841,123842,123844,123846,123848],{"class":205,"line":1269},[203,123843,24634],{"class":2052},[203,123845,120106],{"class":318},[203,123847,123531],{"class":318},[203,123849,123545],{"class":318},[203,123851,123852],{"class":205,"line":1284},[203,123853,2489],{"emptyLinePlaceholder":131},[203,123855,123856],{"class":205,"line":1290},[203,123857,123554],{"class":272},[203,123859,123860,123862,123864,123866],{"class":205,"line":1304},[203,123861,24634],{"class":2052},[203,123863,123561],{"class":318},[203,123865,123564],{"class":318},[203,123867,123567],{"class":262},[203,123869,123870,123872,123874],{"class":205,"line":1310},[203,123871,24634],{"class":2052},[203,123873,123561],{"class":318},[203,123875,123576],{"class":318},[19,123877,123579],{},[19,123879,123582],{},[19,123881,123585,123882,123885],{},[200,123883,123884],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,123887,123888],{},[25,123889],{"alt":27,"src":123890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,123892,123893],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,123895,123896,123898],{},[363,123897,118022],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[174,123900,123902],{"id":123901},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,123904,123905],{},"（1）.查看所连接的主机USB接口的信息",[194,123907,123909],{"className":117354,"code":123908,"language":117356,"meta":27,"style":27},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[200,123910,123911,123941],{"__ignoreMap":27},[203,123912,123913,123915,123917,123920,123922,123924,123926,123928,123931,123934,123936,123939],{"class":205,"line":206},[203,123914,123661],{"class":2052},[203,123916,69879],{"class":318},[203,123918,123919],{"class":262}," -a",[203,123921,29274],{"class":262},[203,123923,28480],{"class":213},[203,123925,123661],{"class":2052},[203,123927,69879],{"class":318},[203,123929,123930],{"class":262}," -q",[203,123932,123933],{"class":318}," path",[203,123935,25173],{"class":262},[203,123937,123938],{"class":318}," \u002Fdev\u002FttyACM0",[203,123940,220],{"class":213},[203,123942,123943,123945,123947,123949,123951,123953,123955,123957,123959,123961,123963,123966],{"class":205,"line":124},[203,123944,123661],{"class":2052},[203,123946,69879],{"class":318},[203,123948,123919],{"class":262},[203,123950,29274],{"class":262},[203,123952,28480],{"class":213},[203,123954,123661],{"class":2052},[203,123956,69879],{"class":318},[203,123958,123930],{"class":262},[203,123960,123933],{"class":318},[203,123962,25173],{"class":262},[203,123964,123965],{"class":318}," \u002Fdev\u002FttyUSB0",[203,123967,220],{"class":213},[19,123969,123970],{},[25,123971],{"alt":27,"src":123972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,123974,123975],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,123977,123390],{},[19,123979,123393,123980,123745],{},[200,123981,123396],{},[194,123983,123984],{"className":117354,"code":123400,"language":117356,"meta":27,"style":27},[200,123985,123986],{"__ignoreMap":27},[203,123987,123988,123990,123992],{"class":205,"line":206},[203,123989,24634],{"class":2052},[203,123991,118641],{"class":318},[203,123993,123411],{"class":318},[194,123995,123997],{"className":117354,"code":123996,"language":117356,"meta":27,"style":27},"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",[200,123998,123999,124027,124053],{"__ignoreMap":27},[203,124000,124001,124003,124005,124008,124010,124012,124014,124016,124019,124022,124024],{"class":205,"line":206},[203,124002,123424],{"class":213},[203,124004,259],{"class":209},[203,124006,124007],{"class":318},"=\"ttyACM*\",",[203,124009,123432],{"class":2052},[203,124011,123435],{"class":318},[203,124013,123464],{"class":2052},[203,124015,592],{"class":2052},[203,124017,124018],{"class":318}," ATTRS{idProduct}==\"55d4\",",[203,124020,124021],{"class":318}," ATTRS{serial}==\"0001\",",[203,124023,123446],{"class":318},[203,124025,124026],{"class":318}," SYMLINK+=\"ttyACM_MCU\"\n",[203,124028,124029,124031,124033,124035,124037,124039,124041,124043,124045,124048,124050],{"class":205,"line":124},[203,124030,123424],{"class":213},[203,124032,259],{"class":209},[203,124034,124007],{"class":318},[203,124036,123432],{"class":2052},[203,124038,123435],{"class":318},[203,124040,123464],{"class":2052},[203,124042,592],{"class":2052},[203,124044,124018],{"class":318},[203,124046,124047],{"class":318}," ATTRS{serial}==\"0002\",",[203,124049,123446],{"class":318},[203,124051,124052],{"class":318}," SYMLINK+=\"ttyACM_Lidar\"\n",[203,124054,124055,124057,124059,124061,124063,124065,124067,124069,124071,124073],{"class":205,"line":1269},[203,124056,123424],{"class":213},[203,124058,259],{"class":209},[203,124060,123429],{"class":318},[203,124062,123432],{"class":2052},[203,124064,123435],{"class":318},[203,124066,123464],{"class":2052},[203,124068,592],{"class":2052},[203,124070,123469],{"class":318},[203,124072,123446],{"class":318},[203,124074,124075],{"class":318}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124077,123509],{},[19,124079,123512],{},[194,124081,124082],{"className":117354,"code":123515,"language":117356,"meta":27,"style":27},[200,124083,124084,124088,124098,124108,124112,124116,124126],{"__ignoreMap":27},[203,124085,124086],{"class":205,"line":206},[203,124087,123522],{"class":272},[203,124089,124090,124092,124094,124096],{"class":205,"line":124},[203,124091,24634],{"class":2052},[203,124093,120106],{"class":318},[203,124095,123531],{"class":318},[203,124097,123534],{"class":318},[203,124099,124100,124102,124104,124106],{"class":205,"line":1269},[203,124101,24634],{"class":2052},[203,124103,120106],{"class":318},[203,124105,123531],{"class":318},[203,124107,123545],{"class":318},[203,124109,124110],{"class":205,"line":1284},[203,124111,2489],{"emptyLinePlaceholder":131},[203,124113,124114],{"class":205,"line":1290},[203,124115,123554],{"class":272},[203,124117,124118,124120,124122,124124],{"class":205,"line":1304},[203,124119,24634],{"class":2052},[203,124121,123561],{"class":318},[203,124123,123564],{"class":318},[203,124125,123567],{"class":262},[203,124127,124128,124130,124132],{"class":205,"line":1310},[203,124129,24634],{"class":2052},[203,124131,123561],{"class":318},[203,124133,123576],{"class":318},[19,124135,124136,124137],{},"再重新插拔设备即可，或者 ",[363,124138,124139],{},"直接重启系统。",[19,124141,123582],{},[19,124143,123585,124144,123885],{},[200,124145,123884],{},[19,124147,124148],{},[25,124149],{"alt":27,"src":124150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124152,123893],{},[19,124154,124155,124157],{},[363,124156,118022],{}," 一些设备可能没有串口号等。",[174,124159,124161],{"id":124160},"_744-其他注意事项","7.4.4 其他注意事项",[19,124163,124164,124165,124167,124168,124171,124172,18500,124175,124178,124179,124181],{},"并非所有的USB设备端口号都是",[200,124166,123619],{},"的格式，比如Arduino的端口号可能是",[200,124169,124170],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[200,124173,124174],{},"videon",[200,124176,124177],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[200,124180,124174],{},"端口，绑定时需要关联的也是该接口。",[19,124183,124184,124185,124188,124189,124192,124193,124195,124196,124199,124200,124203,124204,124207,124208,124207,124211,124207,124214,28443],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[200,124186,124187],{},"KERNEL==\"ttyUSB*\"","修改为",[200,124190,124191],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[200,124194,124187],{},"修改为类似于",[200,124197,124198],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[200,124201,124202],{},"video[0,2,4,6]","表示可以绑定的端口为",[200,124205,124206],{},"video0","或",[200,124209,124210],{},"video2",[200,124212,124213],{},"video4",[200,124215,124216],{},"video6",[14,124218,124220],{"id":124219},"_75-挂载内网网页","7.5 挂载内网网页",[19,124222,124223],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124225,124226],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124228,124229],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124231,124232,124233],{},"Termux 下载地址（F-Droid）：",[452,124234,124235],{"href":124235,"rel":124236},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23956],[19,124238,124239],{},"首先打开app后，先更新软件缓存：",[194,124241,124243],{"className":117354,"code":124242,"language":117356,"meta":27,"style":27},"pkg update\n",[200,124244,124245],{"__ignoreMap":27},[203,124246,124247,124250],{"class":205,"line":206},[203,124248,124249],{"class":2052},"pkg",[203,124251,26300],{"class":318},[19,124253,124254],{},"然后换源",[194,124256,124258],{"className":117354,"code":124257,"language":117356,"meta":27,"style":27},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[200,124259,124260],{"__ignoreMap":27},[203,124261,124262,124264,124267],{"class":205,"line":206},[203,124263,123132],{"class":2052},[203,124265,124266],{"class":213}," $PREFIX",[203,124268,124269],{"class":318},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124271,124272],{},"将该文件内容替换为下面：",[194,124274,124276],{"className":117354,"code":124275,"language":117356,"meta":27,"style":27},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[200,124277,124278],{"__ignoreMap":27},[203,124279,124280,124283,124286,124289],{"class":205,"line":206},[203,124281,124282],{"class":2052},"deb",[203,124284,124285],{"class":318}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[203,124287,124288],{"class":318}," stable",[203,124290,124291],{"class":318}," main\n",[1221,124293,124294,124321],{},[160,124295,124296,124297,124299,124300],{},"如果你使用的是",[200,124298,123132],{},"编辑器：",[1221,124301,124302,124309,124315],{},[160,124303,124304,124305,124308],{},"按 ",[200,124306,124307],{},"Ctrl+O"," 保存文件。",[160,124310,124304,124311,124314],{},[200,124312,124313],{},"Enter"," 确认文件名。",[160,124316,124304,124317,124320],{},[200,124318,124319],{},"Ctrl+X"," 退出编辑器。",[160,124322,124296,124323,124299,124326],{},[200,124324,124325],{},"vim",[1221,124327,124328,124334],{},[160,124329,124304,124330,124333],{},[200,124331,124332],{},"Esc"," 退出编辑模式。",[160,124335,124336,124337,124339],{},"输入 ",[200,124338,119279],{}," 保存并退出。",[19,124341,124342],{},"接下来重新更新软件源：",[194,124344,124346],{"className":117354,"code":124345,"language":117356,"meta":27,"style":27},"pkg update && pkg upgrade\n",[200,124347,124348],{"__ignoreMap":27},[203,124349,124350,124352,124354,124356,124358],{"class":205,"line":206},[203,124351,124249],{"class":2052},[203,124353,117405],{"class":318},[203,124355,26248],{"class":213},[203,124357,124249],{"class":2052},[203,124359,117391],{"class":318},[19,124361,124362],{},"安装python：",[194,124364,124366],{"className":117354,"code":124365,"language":117356,"meta":27,"style":27},"pkg install python\n",[200,124367,124368],{"__ignoreMap":27},[203,124369,124370,124372,124374],{"class":205,"line":206},[203,124371,124249],{"class":2052},[203,124373,23925],{"class":318},[203,124375,124376],{"class":318}," python\n",[19,124378,124379,26531],{},[363,124380,124381],{},"通过Termux访问设备存储",[19,124383,124384],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[194,124386,124388],{"className":117354,"code":124387,"language":117356,"meta":27,"style":27},"termux-setup-storage\n",[200,124389,124390],{"__ignoreMap":27},[203,124391,124392],{"class":205,"line":206},[203,124393,124387],{"class":2052},[157,124395,124396],{},[160,124397,124398,26531,124401],{},[363,124399,124400],{},"进入HTML文件所在的目录",[157,124402,124403],{},[160,124404,124405,124406,124408],{},"使用",[200,124407,101334],{},"命令进入HTML文件所在的目录：",[194,124410,124412],{"className":117354,"code":124411,"language":117356,"meta":27,"style":27},"cd ~\u002Fyour_html_folder\n",[200,124413,124414],{"__ignoreMap":27},[203,124415,124416,124418],{"class":205,"line":206},[203,124417,101334],{"class":262},[203,124419,124420],{"class":318}," ~\u002Fyour_html_folder\n",[157,124422,124423],{"start":124},[160,124424,124425,26531,124428,124433,124450],{},[363,124426,124427],{},"启动Python HTTP服务器",[157,124429,124430],{},[160,124431,124432],{},"运行以下命令启动一个简单的HTTP服务器：",[194,124434,124436],{"className":117354,"code":124435,"language":117356,"meta":27,"style":27},"python -m http.server 8000\n",[200,124437,124438],{"__ignoreMap":27},[203,124439,124440,124442,124444,124447],{"class":205,"line":206},[203,124441,30438],{"class":2052},[203,124443,100940],{"class":262},[203,124445,124446],{"class":318}," http.server",[203,124448,124449],{"class":262}," 8000\n",[157,124451,124452],{"start":1269},[160,124453,124454,124455,124458],{},"这会在端口",[200,124456,124457],{},"8000","上启动一个Web服务器。",[1221,124460,124461],{},[160,124462,124463],{},"启动服务器后，Termux会显示日志信息，例如：",[194,124465,124467],{"className":120874,"code":124466,"language":120876,"meta":120877,"style":27},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[200,124468,124469],{"__ignoreMap":27},[203,124470,124471],{"class":205,"line":206},[203,124472,124466],{},[1221,124474,124475],{},[160,124476,124477],{},"这表示服务器已成功启动。",[19,124479,124480],{},[363,124481,124482],{},"在浏览器中访问HTML文件",[157,124484,124485],{},[160,124486,124487,26531,124490,124495],{},[363,124488,124489],{},"在同一设备上访问",[157,124491,124492],{},[160,124493,124494],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[194,124496,124499],{"className":124497,"code":124498,"language":71722,"meta":27,"style":27},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[200,124500,124501],{"__ignoreMap":27},[203,124502,124503,124506],{"class":205,"line":206},[203,124504,124505],{"class":213},"http:",[203,124507,124508],{"class":272},"\u002F\u002Flocalhost:8000\n",[1221,124510,124511],{},[160,124512,124513,124514,124517],{},"如果HTML文件中有",[200,124515,124516],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124519,124521],{"id":124520},"_76-linux重点知识","7.6 Linux重点知识",[174,124523,124525],{"id":124524},"_761-关于点的说明","7.6.1 关于点的说明",[19,124527,124528],{},[25,124529],{"alt":27,"src":124530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,124532,124533],{},"一点本目录，两点上目录",[174,124535,124537],{"id":124536},"_762-目录","7.6.2 目录",[22088,124539,124541],{"id":124540},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,124543,124544],{},[363,124545,124546],{},"\u002Fboot:",[19,124548,124549],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,124551,124552],{},[363,124553,124554],{},"\u002Fetc:",[19,124556,124557],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,124559,124560],{},[363,124561,124562],{},"\u002Flib：",[19,124564,124565],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,124567,124568],{},[363,124569,124570],{},"\u002Fsys:",[19,124572,124573],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22088,124575,124577],{"id":124576},"_7622-指令集合","7.6.2.2 指令集合",[19,124579,124580],{},[363,124581,124582],{},"\u002Fbin:",[19,124584,124585],{},"为二进制文件的缩写，存放最经常使用的命令",[19,124587,124588],{},[363,124589,124590],{},"\u002Fsbin:",[19,124592,124593],{},"只有系统管理员才能使用的程序和指令",[22088,124595,124597],{"id":124596},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,124599,124600],{},[363,124601,124602],{},"\u002Fdev:",[19,124604,124605],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,124607,124608],{},[363,124609,124610],{},"\u002Fmedia:",[19,124612,124613],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,124615,124616],{},[363,124617,124618],{},"\u002Fmnt:",[19,124620,124621],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22088,124623,124625],{"id":124624},"_7624-临时文件","7.6.2.4 临时文件",[19,124627,124628],{},[363,124629,124630],{},"\u002Frun:",[19,124632,124633],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,124635,124636],{},[363,124637,124638],{},"\u002Flost+found:",[19,124640,124641],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,124643,124644],{},[363,124645,124646],{},"\u002Ftmp:",[19,124648,124649],{},"这个目录是用来存放一些临时文件的",[22088,124651,124653],{"id":124652},"_7625-账户","7.6.2.5 账户",[19,124655,124656],{},[363,124657,124658],{},"\u002Froot：",[19,124660,124661],{},"系统管理员的用户主目录",[19,124663,124664,26531],{},[363,124665,124666],{},"\u002Fhome",[19,124668,124669],{},"用户的主目录，以用户的账号命名的",[19,124671,124672,26531],{},[363,124673,124674],{},"\u002Fusr",[19,124676,124677],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,124679,124680],{},[363,124681,124682],{},"\u002Fusr\u002Fbin：",[19,124684,124685],{},"系统用户使用的应用程序与指令",[19,124687,124688],{},[363,124689,124690],{},"\u002Fusr\u002Fsbin：",[19,124692,124693],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,124695,124696],{},[363,124697,124698],{},"\u002Fusr\u002Fsrc：",[19,124700,124701],{},"内核源代码默认的放置目录",[22088,124703,124705],{"id":124704},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,124707,124708],{},[363,124709,124710],{},"\u002Fvar：",[19,124712,124713],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,124715,124716],{},[363,124717,124718],{},"\u002Fproc:",[19,124720,124721,124722,124725],{},"管理 ",[363,124723,124724],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22088,124727,124729],{"id":124728},"_7627-扩展用的","7.6.2.7 扩展用的",[19,124731,124732],{},[363,124733,124734],{},"\u002Fopt:",[19,124736,124737],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,124739,124740],{},[363,124741,124742],{},"\u002Fsrv:",[19,124744,124745],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[174,124747,124749],{"id":124748},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,124751,124752],{},[25,124753],{"alt":27,"src":124754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,124756,124757],{},"windows-->linux:",[19,124759,124760],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,124762,124763],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,124765,124766],{},"linux传输文件到windows",[19,124768,124769],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[174,124771,124773],{"id":124772},"_764-易忘知识","7.6.4 易忘知识",[19,124775,124776],{},"操作系统内核查看",[194,124778,124779],{"className":117354,"code":121348,"language":117356,"meta":27,"style":27},[200,124780,124781],{"__ignoreMap":27},[203,124782,124783,124785],{"class":205,"line":206},[203,124784,70262],{"class":2052},[203,124786,121357],{"class":262},[19,124788,124789],{},[25,124790],{"alt":27,"src":124791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,124793,124794],{},[25,124795],{"alt":27,"src":124796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[194,124798,124800],{"className":117354,"code":124799,"language":117356,"meta":27,"style":27},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[200,124801,124802,124814],{"__ignoreMap":27},[203,124803,124804,124806,124809,124812],{"class":205,"line":206},[203,124805,121565],{"class":2052},[203,124807,124808],{"class":318}," mvtest",[203,124810,124811],{"class":318}," mvtest2",[203,124813,2763],{"class":213},[203,124815,124816],{"class":205,"line":124},[203,124817,124818],{"class":2052},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,124820,124821],{},[25,124822],{"alt":27,"src":124823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,124825,124826],{},[25,124827],{"alt":27,"src":124828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,124830,124831,124832,124835],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[200,124833,124834],{},"du -a"," 可以快速查看磁盘使用细节。",[174,124837,124839],{"id":124838},"_765-vim","7.6.5 Vim",[19,124841,124842],{},[25,124843],{"alt":27,"src":124844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,124846,124847],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,124849,124850],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,124852,124853],{},[363,124854,124855],{},"1.命令模式：",[19,124857,124858],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,124860,124861],{},"x 删除当前光标所在处的字符",[19,124863,124864],{},"：切换到底线命令模式，以在最底一行输入命令",[19,124866,124867],{},"a 进行插入模式，在光标下一个位置输入文本",[19,124869,124870],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,124872,124873],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,124875,124876],{},"dd 剪切当前行",[19,124878,124879],{},"yy 复制当前行",[19,124881,124882],{},"p 粘贴剪贴板内容到光标下方",[19,124884,124885],{},"P 粘贴剪贴板内容到光标上方",[19,124887,124888],{},"u 撤销上一次操作",[19,124890,124891],{},"ctrl+r 重做上一次操作",[19,124893,124894,124896],{},[1009,124895],{}," 保存文件",[19,124898,124899,124901],{},[859,124900],{}," 退出Vim编辑器",[19,124903,124904,124906],{},[859,124905],{},"! 强制退出Vim编辑器，不保存修改",[19,124908,124909],{},[363,124910,124911],{},"2.输入模式：",[19,124913,124914],{},[25,124915],{"alt":27,"src":124916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,124918,124919],{},[363,124920,124921],{},"3.底线命令模式：",[19,124923,124924],{},[25,124925],{"alt":27,"src":124926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,124928,124929],{},"按下esc可以退出底线命令模式",[174,124931,124933],{"id":124932},"_766-apt","7.6.6 apt",[19,124935,124936],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[174,124938,124940],{"id":124939},"_767-home与root的区别","7.6.7 home与root的区别",[19,124942,124943],{},[25,124944],{"alt":27,"src":124945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,124947,124948],{},[25,124949],{"alt":27,"src":124950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,124952,124953],{},[25,124954],{"alt":27,"src":124955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,124957,124958],{},[25,124959],{"alt":27,"src":124960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[174,124962,124964],{"id":124963},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,124966,124967],{},[452,124968,124969],{"href":124969,"rel":124970},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23956],[157,124972,124973,124976],{},[160,124974,124975],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[160,124977,124978],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,124980,124981],{},[25,124982],{"alt":27,"src":124983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,124985,124986],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,124988,124989],{},[25,124990],{"alt":27,"src":124991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[194,124993,124995],{"className":120874,"code":124994,"language":120876,"meta":120877,"style":27},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[200,124996,124997,125002],{"__ignoreMap":27},[203,124998,124999],{"class":205,"line":206},[203,125000,125001],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[203,125003,125004],{"class":205,"line":124},[203,125005,125006],{},".\u002Fpycharm.sh\n",[19,125008,125009],{},"3️⃣创建.desktop文件",[19,125011,125012],{},[363,125013,125014],{},"原理：",[1221,125016,125017,125027],{},[160,125018,125019,125020,125026],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[363,125021,125022,125025],{},[200,125023,125024],{},".desktop"," 文件"," 来识别应用。",[160,125028,125029,125031,125032],{},[200,125030,125024],{}," 文件相当于一个“应用注册表”，告诉系统：",[1221,125033,125034,125037,125040,125043,125046],{},[160,125035,125036],{},"应用名字（Name）",[160,125038,125039],{},"图标（Icon）",[160,125041,125042],{},"执行命令（Exec）",[160,125044,125045],{},"分类（Categories）",[160,125047,125048],{},"是否需要终端（Terminal）",[194,125050,125052],{"className":120874,"code":125051,"language":120876,"meta":120877,"style":27},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[200,125053,125054,125059],{"__ignoreMap":27},[203,125055,125056],{"class":205,"line":206},[203,125057,125058],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[203,125060,125061],{"class":205,"line":124},[203,125062,125063],{},"nano pycharm.desktop\n",[19,125065,125066],{},"nano是一个命令行下的编辑器，也可以使用vim",[194,125068,125070],{"className":120874,"code":125069,"language":120876,"meta":120877,"style":27},"[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",[200,125071,125072,125077,125082,125087,125092,125097,125102,125107,125112,125117],{"__ignoreMap":27},[203,125073,125074],{"class":205,"line":206},[203,125075,125076],{},"[Desktop Entry]\n",[203,125078,125079],{"class":205,"line":124},[203,125080,125081],{},"Version=1.0\n",[203,125083,125084],{"class":205,"line":1269},[203,125085,125086],{},"Type=Application\n",[203,125088,125089],{"class":205,"line":1284},[203,125090,125091],{},"Name=PyCharm\n",[203,125093,125094],{"class":205,"line":1290},[203,125095,125096],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[203,125098,125099],{"class":205,"line":1304},[203,125100,125101],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[203,125103,125104],{"class":205,"line":1310},[203,125105,125106],{},"Comment=JetBrains PyCharm IDE\n",[203,125108,125109],{"class":205,"line":1401},[203,125110,125111],{},"Categories=Development;IDE;\n",[203,125113,125114],{"class":205,"line":1407},[203,125115,125116],{},"Terminal=false\n",[203,125118,125119],{"class":205,"line":1419},[203,125120,125121],{},"StartupWMClass=jetbrains-pycharm\n",[1221,125123,125124,125130,125136,125142],{},[160,125125,125126,125129],{},[200,125127,125128],{},"Exec"," → 点击图标时执行的命令",[160,125131,125132,125135],{},[200,125133,125134],{},"Icon"," → 显示在菜单和桌面上的图标",[160,125137,125138,125141],{},[200,125139,125140],{},"Terminal=false"," → 不打开终端",[160,125143,125144,125147],{},[200,125145,125146],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125149,125150,125151],"blockquote",{},[19,125152,125153,125154,125156,125157],{},"可以理解成 ",[200,125155,125024],{}," 文件是 Linux 的 ",[363,125158,125159],{},"快捷方式配置文件",[19,125161,125162],{},"4️⃣设置可执行权限",[194,125164,125166],{"className":120874,"code":125165,"language":120876,"meta":120877,"style":27},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[200,125167,125168],{"__ignoreMap":27},[203,125169,125170],{"class":205,"line":206},[203,125171,125165],{},[19,125173,125174],{},"5️⃣桌面图标启动的话如下：",[194,125176,125178],{"className":120874,"code":125177,"language":120876,"meta":120877,"style":27},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[200,125179,125180,125185],{"__ignoreMap":27},[203,125181,125182],{"class":205,"line":206},[203,125183,125184],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[203,125186,125187],{"class":205,"line":124},[203,125188,125189],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[157,125191,125192],{"start":1269},[160,125193,125194],{},"下载Appimage文件实现软件的安装",[19,125196,125197],{},"1️⃣先下载appimage",[19,125199,125200],{},[452,125201,125202],{"href":125202,"rel":125203},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23956],[19,125205,125206],{},[25,125207],{"alt":27,"src":125208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125210,125211],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125213,125214],{},[25,125215],{"alt":27,"src":125216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125218,125219],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125221,125222],{},[25,125223],{"alt":27,"src":125224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125226,125227],{},[25,125228],{"alt":27,"src":125229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125231,125232,125233,125236],{},"3️⃣给他们放在",[200,125234,125235],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125238,125239],{},"4️⃣给软件执行权限",[194,125241,125243],{"className":120874,"code":125242,"language":120876,"meta":120877,"style":27},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[200,125244,125245,125250],{"__ignoreMap":27},[203,125246,125247],{"class":205,"line":206},[203,125248,125249],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[203,125251,125252],{"class":205,"line":124},[203,125253,125254],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125256,125257],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[194,125259,125261],{"className":117354,"code":125260,"language":117356,"meta":27,"style":27},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[200,125262,125263,125270,125277,125283],{"__ignoreMap":27},[203,125264,125265,125267],{"class":205,"line":206},[203,125266,101334],{"class":262},[203,125268,125269],{"class":318}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[203,125271,125272,125274],{"class":205,"line":124},[203,125273,101341],{"class":2052},[203,125275,125276],{"class":318}," .\u002Fqqmusic.desktop\n",[203,125278,125279,125281],{"class":205,"line":1269},[203,125280,124325],{"class":2052},[203,125282,125276],{"class":318},[203,125284,125285,125287,125289,125291],{"class":205,"line":1284},[203,125286,24634],{"class":2052},[203,125288,24637],{"class":318},[203,125290,123191],{"class":318},[203,125292,125276],{"class":318},[19,125294,125295,125297],{},[200,125296,101341],{},"：一个 Linux 命令，主要功能是：",[1221,125299,125300,125303],{},[160,125301,125302],{},"如果文件不存在，就创建一个新的空文件",[160,125304,125305],{},"如果文件已存在，就更新该文件的最后修改时间",[194,125307,125309],{"className":120874,"code":125308,"language":120876,"meta":120877,"style":27},"[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",[200,125310,125311,125315,125320,125325,125330,125334,125339],{"__ignoreMap":27},[203,125312,125313],{"class":205,"line":206},[203,125314,125076],{},[203,125316,125317],{"class":205,"line":124},[203,125318,125319],{},"Name=QQ音乐\n",[203,125321,125322],{"class":205,"line":1269},[203,125323,125324],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[203,125326,125327],{"class":205,"line":1284},[203,125328,125329],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[203,125331,125332],{"class":205,"line":1290},[203,125333,125086],{},[203,125335,125336],{"class":205,"line":1304},[203,125337,125338],{},"Categories=Audio;Music;Player;\n",[203,125340,125341],{"class":205,"line":1310},[203,125342,125343],{},"Comment=QQ Music Client for Linux\n",[19,125345,125346],{},"将文件复制进去",[19,125348,125349],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125351,125352],{},[25,125353],{"alt":27,"src":125354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125356,125357],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125359,125360],{},[25,125361],{"alt":27,"src":125362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125364,125365,125366,125369,125370,125373],{},"如果你用的不是KDE，那么也可以直接修改",[200,125367,125368],{},"qqmuic.desktop","：在exec的末尾加上",[200,125371,125372],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[194,125375,125377],{"className":120874,"code":125376,"language":120876,"meta":120877,"style":27},"[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",[200,125378,125379,125383,125387,125392,125396,125400,125404],{"__ignoreMap":27},[203,125380,125381],{"class":205,"line":206},[203,125382,125076],{},[203,125384,125385],{"class":205,"line":124},[203,125386,125319],{},[203,125388,125389],{"class":205,"line":1269},[203,125390,125391],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[203,125393,125394],{"class":205,"line":1284},[203,125395,125329],{},[203,125397,125398],{"class":205,"line":1290},[203,125399,125086],{},[203,125401,125402],{"class":205,"line":1304},[203,125403,125338],{},[203,125405,125406],{"class":205,"line":1310},[203,125407,125343],{},[19,125409,125410],{},[25,125411],{"alt":27,"src":125412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125414,125415],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[194,125417,125419],{"className":120874,"code":125418,"language":120876,"meta":120877,"style":27},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[200,125420,125421],{"__ignoreMap":27},[203,125422,125423],{"class":205,"line":206},[203,125424,125418],{},[157,125426,125427],{"start":1284},[160,125428,125429],{},"去Flathub上安装软件",[19,125431,125432],{},[452,125433,125434],{"href":125434,"rel":125435},"https:\u002F\u002Fflathub.org\u002F",[23956],[19,125437,125438],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125440,125441],{},[25,125442],{"alt":27,"src":125443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[194,125445,125447],{"className":120874,"code":125446,"language":120876,"meta":120877,"style":27},"flatpak install flathub com.obsproject.Studio\n",[200,125448,125449],{"__ignoreMap":27},[203,125450,125451],{"class":205,"line":206},[203,125452,125446],{},[19,125454,125455],{},[25,125456],{"alt":27,"src":125457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125459,125460],{},"2️⃣运行软件",[19,125462,125463],{},"a.官方方式：",[19,125465,125466],{},[25,125467],{"alt":27,"src":125468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[194,125470,125471],{"className":120874,"code":125446,"language":120876,"meta":120877,"style":27},[200,125472,125473],{"__ignoreMap":27},[203,125474,125475],{"class":205,"line":206},[203,125476,125446],{},[19,125478,125479],{},"b.当普通软件运行：",[19,125481,125482],{},[25,125483],{"alt":27,"src":125484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125486,125487],{},[25,125488],{"alt":27,"src":125489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5216,125491,125492],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":27,"searchDepth":124,"depth":124,"links":125494},[125495,125496,125501,125502,125508,125509],{"id":122227,"depth":124,"text":122228},{"id":122569,"depth":124,"text":122570,"children":125497},[125498,125499,125500],{"id":122573,"depth":1269,"text":122574},{"id":122640,"depth":1269,"text":122641},{"id":122901,"depth":1269,"text":122902},{"id":123054,"depth":124,"text":123055},{"id":123292,"depth":124,"text":123293,"children":125503},[125504,125505,125506,125507],{"id":123344,"depth":1269,"text":123345},{"id":123630,"depth":1269,"text":123631},{"id":123901,"depth":1269,"text":123902},{"id":124160,"depth":1269,"text":124161},{"id":124219,"depth":124,"text":124220},{"id":124520,"depth":124,"text":124521,"children":125510},[125511,125512,125513,125514,125515,125516,125517,125518],{"id":124524,"depth":1269,"text":124525},{"id":124536,"depth":1269,"text":124537},{"id":124748,"depth":1269,"text":124749},{"id":124772,"depth":1269,"text":124773},{"id":124838,"depth":1269,"text":124839},{"id":124932,"depth":1269,"text":124933},{"id":124939,"depth":1269,"text":124940},{"id":124963,"depth":1269,"text":124964},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122219,"description":23467},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125525,"title":125526,"body":125527,"description":23467,"extension":129,"meta":125531,"navigation":131,"path":125532,"seo":125533,"stem":125534,"__hash__":125535},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125528,"toc":125529},[],{"title":27,"searchDepth":124,"depth":124,"links":125530},[],{"category":30321},"\u002Fwiki\u002F2025-01-27-linux",{"title":125526,"description":23467},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125537,"title":125538,"body":125539,"description":125543,"extension":129,"meta":125934,"navigation":131,"path":125935,"seo":125936,"stem":125937,"__hash__":125938},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125540,"toc":125932},[125541,125544,125548,125565,125568,125621,125625,125627,125667,125676,125680,125683,125924,125929],[19,125542,125543],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125545,125547],{"id":125546},"_1ubuntu环境配置","1.Ubuntu环境配置",[157,125549,125550,125553,125556,125559,125562],{},[160,125551,125552],{},"ubuntu环境换源",[160,125554,125555],{},"安装cuda",[160,125557,125558],{},"安装miniconda",[160,125560,125561],{},"安装pytorch",[160,125563,125564],{},"安装genesis",[19,125566,125567],{},"参考链接：",[194,125569,125571],{"className":23913,"code":125570,"language":23915,"meta":27,"style":27},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[200,125572,125573],{"__ignoreMap":27},[203,125574,125575,125578,125581,125584,125586,125589,125592,125594,125597,125600,125602,125605,125608,125610,125613,125616,125618],{"class":205,"line":206},[203,125576,125577],{"class":2052},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[203,125579,125580],{"class":318},"=blogdetail",[203,125582,125583],{"class":213},"&sharetype",[203,125585,259],{"class":209},[203,125587,125588],{"class":318},"blogdetail",[203,125590,125591],{"class":213},"&sharerId",[203,125593,259],{"class":209},[203,125595,125596],{"class":318},"144728092",[203,125598,125599],{"class":213},"&sharerefer",[203,125601,259],{"class":209},[203,125603,125604],{"class":318},"PC",[203,125606,125607],{"class":213},"&sharesource",[203,125609,259],{"class":209},[203,125611,125612],{"class":318},"qq_69379513",[203,125614,125615],{"class":213},"&sharefrom",[203,125617,259],{"class":209},[203,125619,125620],{"class":318},"from_link\n",[10,125622,125624],{"id":125623},"_2genesis-报错issue","2.Genesis 报错issue",[19,125626,125567],{},[194,125628,125629],{"className":23913,"code":125570,"language":23915,"meta":27,"style":27},[200,125630,125631],{"__ignoreMap":27},[203,125632,125633,125635,125637,125639,125641,125643,125645,125647,125649,125651,125653,125655,125657,125659,125661,125663,125665],{"class":205,"line":206},[203,125634,125577],{"class":2052},[203,125636,125580],{"class":318},[203,125638,125583],{"class":213},[203,125640,259],{"class":209},[203,125642,125588],{"class":318},[203,125644,125591],{"class":213},[203,125646,259],{"class":209},[203,125648,125596],{"class":318},[203,125650,125599],{"class":213},[203,125652,259],{"class":209},[203,125654,125604],{"class":318},[203,125656,125607],{"class":213},[203,125658,259],{"class":209},[203,125660,125612],{"class":318},[203,125662,125615],{"class":213},[203,125664,259],{"class":209},[203,125666,125620],{"class":318},[194,125668,125670],{"className":23913,"code":125669,"language":23915,"meta":27,"style":27},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[200,125671,125672],{"__ignoreMap":27},[203,125673,125674],{"class":205,"line":206},[203,125675,125669],{"class":2052},[10,125677,125679],{"id":125678},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,125681,125682],{},"hello_robot.py",[194,125684,125686],{"className":30436,"code":125685,"language":30438,"meta":27,"style":27},"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",[200,125687,125688,125694,125709,125713,125725,125737,125741,125754,125758,125777,125787,125797,125811,125815,125819,125824,125828,125838,125845,125859,125866,125876,125881,125885,125903,125908,125912,125919],{"__ignoreMap":27},[203,125689,125690,125692],{"class":205,"line":206},[203,125691,30450],{"class":209},[203,125693,45363],{"class":213},[203,125695,125696,125699,125702,125704,125706],{"class":205,"line":124},[203,125697,125698],{"class":213},"os.environ[",[203,125700,125701],{"class":318},"'PYOPENGL_PLATFORM'",[203,125703,4532],{"class":213},[203,125705,259],{"class":209},[203,125707,125708],{"class":318}," 'glx'\n",[203,125710,125711],{"class":205,"line":1269},[203,125712,2489],{"emptyLinePlaceholder":131},[203,125714,125715,125717,125720,125722],{"class":205,"line":1284},[203,125716,30450],{"class":209},[203,125718,125719],{"class":213}," genesis ",[203,125721,31441],{"class":209},[203,125723,125724],{"class":213}," gs\n",[203,125726,125727,125729,125732,125734],{"class":205,"line":1290},[203,125728,30795],{"class":209},[203,125730,125731],{"class":213}," pynput ",[203,125733,30450],{"class":209},[203,125735,125736],{"class":213}," keyboard\n",[203,125738,125739],{"class":205,"line":1304},[203,125740,2489],{"emptyLinePlaceholder":131},[203,125742,125743,125746,125749,125751],{"class":205,"line":1310},[203,125744,125745],{"class":213},"gs.init(",[203,125747,125748],{"class":5306},"backend",[203,125750,259],{"class":209},[203,125752,125753],{"class":213},"gs.gpu)\n",[203,125755,125756],{"class":205,"line":1401},[203,125757,2489],{"emptyLinePlaceholder":131},[203,125759,125760,125763,125765,125768,125771,125773,125775],{"class":205,"line":1407},[203,125761,125762],{"class":213},"scene ",[203,125764,259],{"class":209},[203,125766,125767],{"class":213}," gs.Scene(",[203,125769,125770],{"class":5306},"show_viewer",[203,125772,259],{"class":209},[203,125774,31534],{"class":262},[203,125776,220],{"class":213},[203,125778,125779,125782,125784],{"class":205,"line":1419},[203,125780,125781],{"class":213},"plane ",[203,125783,259],{"class":209},[203,125785,125786],{"class":213}," scene.add_entity(gs.morphs.Plane())\n",[203,125788,125789,125792,125794],{"class":205,"line":1701},[203,125790,125791],{"class":213},"franka ",[203,125793,259],{"class":209},[203,125795,125796],{"class":213}," scene.add_entity(\n",[203,125798,125799,125802,125804,125806,125809],{"class":205,"line":1706},[203,125800,125801],{"class":213},"    gs.morphs.MJCF(",[203,125803,45412],{"class":5306},[203,125805,259],{"class":209},[203,125807,125808],{"class":318},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[203,125810,38105],{"class":213},[203,125812,125813],{"class":205,"line":1712},[203,125814,220],{"class":213},[203,125816,125817],{"class":205,"line":1717},[203,125818,2489],{"emptyLinePlaceholder":131},[203,125820,125821],{"class":205,"line":1731},[203,125822,125823],{"class":213},"scene.build()\n",[203,125825,125826],{"class":205,"line":1736},[203,125827,2489],{"emptyLinePlaceholder":131},[203,125829,125830,125832,125835],{"class":205,"line":1742},[203,125831,32005],{"class":209},[203,125833,125834],{"class":2052}," on_press",[203,125836,125837],{"class":213},"(key):\n",[203,125839,125840,125843],{"class":205,"line":1763},[203,125841,125842],{"class":209},"    try",[203,125844,3828],{"class":213},[203,125846,125847,125849,125852,125854,125857],{"class":205,"line":1768},[203,125848,2586],{"class":209},[203,125850,125851],{"class":213}," key.char ",[203,125853,3038],{"class":209},[203,125855,125856],{"class":318}," 'q'",[203,125858,3828],{"class":213},[203,125860,125861,125863],{"class":205,"line":1782},[203,125862,15822],{"class":209},[203,125864,125865],{"class":262}," False\n",[203,125867,125868,125871,125874],{"class":205,"line":1787},[203,125869,125870],{"class":209},"    except",[203,125872,125873],{"class":262}," AttributeError",[203,125875,3828],{"class":213},[203,125877,125878],{"class":205,"line":1816},[203,125879,125880],{"class":209},"        pass\n",[203,125882,125883],{"class":205,"line":1821},[203,125884,2489],{"emptyLinePlaceholder":131},[203,125886,125887,125890,125892,125895,125898,125900],{"class":205,"line":1838},[203,125888,125889],{"class":213},"listener ",[203,125891,259],{"class":209},[203,125893,125894],{"class":213}," keyboard.Listener(",[203,125896,125897],{"class":5306},"on_press",[203,125899,259],{"class":209},[203,125901,125902],{"class":213},"on_press)\n",[203,125904,125905],{"class":205,"line":1843},[203,125906,125907],{"class":213},"listener.start()\n",[203,125909,125910],{"class":205,"line":1848},[203,125911,2489],{"emptyLinePlaceholder":131},[203,125913,125914,125916],{"class":205,"line":1853},[203,125915,108721],{"class":209},[203,125917,125918],{"class":213}," listener.running:\n",[203,125920,125921],{"class":205,"line":1867},[203,125922,125923],{"class":213},"    scene.step()\n",[19,125925,125926],{},[25,125927],{"alt":27,"src":125928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5216,125930,125931],{},"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":27,"searchDepth":124,"depth":124,"links":125933},[],{"category":23469},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125538,"description":125543},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125940,"title":125941,"body":125942,"description":23467,"extension":129,"meta":125957,"navigation":131,"path":125958,"seo":125959,"stem":125960,"__hash__":125961},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125943,"toc":125954},[125944,125947,125951],[10,125945,125941],{"id":125946},"_1-基础知识",[14,125948,125950],{"id":125949},"_11-js的组成","1.1 js的组成",[19,125952,125953],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":27,"searchDepth":124,"depth":124,"links":125955},[125956],{"id":125949,"depth":124,"text":125950},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125941,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125963,"title":125964,"body":125965,"description":23467,"extension":129,"meta":126104,"navigation":131,"path":126105,"seo":126106,"stem":126107,"__hash__":126108},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125966,"toc":126092},[125967,125970,125974,125977,125981,125991,125995,125998,126001,126004,126008,126015,126021,126025,126031,126042,126046,126049,126053,126056,126060,126063,126067,126070,126074,126077,126080,126083,126086,126089],[10,125968,125964],{"id":125969},"_2-vscode必备内容",[14,125971,125973],{"id":125972},"_21-标签分类","2.1 标签分类",[19,125975,125976],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,125978,125980],{"id":125979},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,125982,125983,125984,125986,125987,125990],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[200,125985,440],{}," 然后按 ",[200,125988,125989],{},"Tab","，快速自动生成基本结构。",[14,125992,125994],{"id":125993},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,125996,125997],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,125999,126000],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126002,126003],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126005,126007],{"id":126006},"_24-视图缩放","2.4 视图缩放",[19,126009,126010,126011,126014],{},"缩放视图 ",[200,126012,126013],{},"ctrl+"," 可实现代码增大。",[19,126016,126017,126020],{},[200,126018,126019],{},"ctrl-"," 可实现代码减小。",[14,126022,126024],{"id":126023},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126026,126027,126028,28443],{},"VSCode 新建文件快捷键为 ",[200,126029,126030],{},"ctrl+N",[19,126032,126033,126034,126037,126038,126041],{},"保存快捷键为 ",[200,126035,126036],{},"ctrl+S","，将文本保存为 ",[200,126039,126040],{},".html"," 文件。",[14,126043,126045],{"id":126044},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126047,126048],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126050,126052],{"id":126051},"_27-vscode-icons","2.7 vscode-icons",[19,126054,126055],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126057,126059],{"id":126058},"_28-easy-less","2.8 Easy LESS",[19,126061,126062],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126064,126066],{"id":126065},"_29-会了吧插件","2.9 会了吧插件",[19,126068,126069],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126071,126073],{"id":126072},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126075,126076],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126078,126079],{},"②选定多个相同的单词:ctrl+D",[19,126081,126082],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126084,126085],{},"④全局替换某些单词:ctrl+h",[19,126087,126088],{},"⑤快速定位到某一行:ctrl+g",[19,126090,126091],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":27,"searchDepth":124,"depth":124,"links":126093},[126094,126095,126096,126097,126098,126099,126100,126101,126102,126103],{"id":125972,"depth":124,"text":125973},{"id":125979,"depth":124,"text":125980},{"id":125993,"depth":124,"text":125994},{"id":126006,"depth":124,"text":126007},{"id":126023,"depth":124,"text":126024},{"id":126044,"depth":124,"text":126045},{"id":126051,"depth":124,"text":126052},{"id":126058,"depth":124,"text":126059},{"id":126065,"depth":124,"text":126066},{"id":126072,"depth":124,"text":126073},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125964,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126110,"title":126111,"body":126112,"description":23467,"extension":129,"meta":126271,"navigation":131,"path":126272,"seo":126273,"stem":126274,"__hash__":126275},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126113,"toc":126263},[126114,126117,126121,126131,126137,126143,126147,126156,126160,126165,126168,126171,126175,126178,126188,126197,126206,126215,126225,126232,126237,126242,126255],[10,126115,126111],{"id":126116},"_3-html文本与容器标签",[14,126118,126120],{"id":126119},"_31-标题标签","3.1 标题标签",[19,126122,126123,126126,126127,126130],{},[200,126124,126125],{},"\u003Ch1>","我是一级标签",[200,126128,126129],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126132,126133,126126,126135],{},[200,126134,126125],{},[200,126136,126129],{},[19,126138,123393,126139,126142],{},[200,126140,126141],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126144,126146],{"id":126145},"_32-段落标签","3.2 段落标签",[19,126148,126149,126152,126153],{},[200,126150,126151],{},"\u003Cp>","....",[200,126154,126155],{},"\u003C\u002Fp>",[14,126157,126159],{"id":126158},"_33-换行标签","3.3 换行标签",[19,126161,126162],{},[200,126163,126164],{},"\u003Cbr \u002F>",[19,126166,126167],{},"具有强制换行的作用",[19,126169,126170],{},"单标签",[14,126172,126174],{"id":126173},"_34-文本格式化标签","3.4 文本格式化标签",[19,126176,126177],{},"提供粗体、斜体和下划线等效果",[19,126179,126180,126181,82597,126184,126187],{},"加粗：",[200,126182,126183],{},"\u003Cstrong>...\u003C\u002Fstrong>",[200,126185,126186],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126189,126190,126191,82597,126194,126187],{},"斜体：",[200,126192,126193],{},"\u003Cem>...\u003C\u002Fem>",[200,126195,126196],{},"\u003Ci>...\u003C\u002Fi>",[19,126198,126199,126200,82597,126203,126187],{},"删除线：",[200,126201,126202],{},"\u003Cdel>...\u003C\u002Fdel>",[200,126204,126205],{},"\u003Cs>...\u003C\u002Fs>",[19,126207,126208,126209,82597,126212,126187],{},"下划线：",[200,126210,126211],{},"\u003Cins>...\u003C\u002Fins>",[200,126213,126214],{},"\u003Cu>...\u003C\u002Fu>",[14,126216,126218,126219,18500,126222,102751],{"id":126217},"_35-div和span标签","3.5 ",[200,126220,126221],{},"\u003Cdiv>",[200,126223,126224],{},"\u003Cspan>",[19,126226,126227,101076,126229,126231],{},[200,126228,126221],{},[200,126230,126224],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126233,126234],{},[200,126235,126236],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126238,126239],{},[200,126240,126241],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126243,126244,126245,126247,126248,126250,126251,126254],{},"两者特点：①",[200,126246,126221],{}," 标签用来布局，但一行通常只放一个 ",[200,126249,126221],{},"。可以理解为一个大盒子，独占一行，在 ",[200,126252,126253],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126256,77307,126257,126259,126260,126262],{},[200,126258,126224],{}," 标签也可用于布局，一行可以放多个 ",[200,126261,126224],{},"，可理解为小盒子。",{"title":27,"searchDepth":124,"depth":124,"links":126264},[126265,126266,126267,126268,126269],{"id":126119,"depth":124,"text":126120},{"id":126145,"depth":124,"text":126146},{"id":126158,"depth":124,"text":126159},{"id":126173,"depth":124,"text":126174},{"id":126217,"depth":124,"text":126270},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126111,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126277,"title":126278,"body":126279,"description":23467,"extension":129,"meta":126476,"navigation":131,"path":126477,"seo":126478,"stem":126479,"__hash__":126480},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126280,"toc":126468},[126281,126284,126288,126291,126297,126304,126310,126316,126319,126322,126325,126328,126331,126334,126337,126341,126344,126347,126350,126356,126362,126368,126375,126379,126385,126391,126394,126397,126403,126409,126415,126418,126421,126425,126428,126438,126444,126448,126457,126461,126464],[10,126282,126278],{"id":126283},"_4-html图像与链接",[14,126285,126287],{"id":126286},"_41-图像标签","4.1 图像标签",[19,126289,126290],{},"（1）标签",[19,126292,126293,126296],{},[200,126294,126295],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126298,126299,126300,126303],{},"src是",[200,126301,126302],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126305,126306,126307],{},"alt:文本，替换文本。图像不能显示的文字 ",[200,126308,126309],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126311,126312,126313],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[200,126314,126315],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126317,126318],{},"width:像素，设置图像的宽度",[19,126320,126321],{},"height:像素，设置图像的高度",[19,126323,126324],{},"border：像素，设置图像的边框粗细",[19,126326,126327],{},"（2）图像标签属性的注意点：",[19,126329,126330],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126332,126333],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126335,126336],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126338,126340],{"id":126339},"_42-路径注意要点","4.2 路径注意要点：",[19,126342,126343],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126345,126346],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126348,126349],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126351,126352,126353],{},"①同一级路径：图像文件位于HTML文件同一级，如",[200,126354,126355],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126357,126358,126359],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[200,126360,126361],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126363,126364,126365],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[200,126366,126367],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126369,126370,126371,465],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[452,126372,126373],{"href":126373,"rel":126374},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23956],[14,126376,126378],{"id":126377},"_43-超链接标签","4.3 超链接标签",[19,126380,126381,126384],{},[200,126382,126383],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126386,126387,126388],{},"①语法格式：",[200,126389,126390],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126392,126393],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126395,126396],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126398,126399,126400],{},"③链接分类：外部链接：",[200,126401,126402],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126404,126405,126406],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[200,126407,126408],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126410,126411,126412],{},"空链接：如果当时没有确定链接目标时，",[200,126413,126414],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126416,126417],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126419,126420],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126422,126424],{"id":126423},"_44-锚点链接","4.4 锚点链接",[19,126426,126427],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126429,126430,126431,126434,126435],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[200,126432,126433],{},"\u003Ca href=\"#two\">","第二级",[200,126436,126437],{},"\u003C\u002Fa>",[19,126439,126440,126441],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[200,126442,126443],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126445,126447],{"id":126446},"_45-注释标签","4.5 注释标签",[19,126449,126450,126453,126454],{},[200,126451,126452],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[200,126455,126456],{},"ctrl+\u002F",[14,126458,126460],{"id":126459},"_46-特殊字符","4.6 特殊字符",[19,126462,126463],{},"可以实现添加多个空格",[25,126465],{"style":126466,"src":126467},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":27,"searchDepth":124,"depth":124,"links":126469},[126470,126471,126472,126473,126474,126475],{"id":126286,"depth":124,"text":126287},{"id":126339,"depth":124,"text":126340},{"id":126377,"depth":124,"text":126378},{"id":126423,"depth":124,"text":126424},{"id":126446,"depth":124,"text":126447},{"id":126459,"depth":124,"text":126460},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126278,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126482,"title":126483,"body":126484,"description":23467,"extension":129,"meta":126777,"navigation":131,"path":126778,"seo":126779,"stem":126780,"__hash__":126781},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126485,"toc":126768},[126486,126489,126493,126496,126499,126502,126505,126508,126511,126514,126517,126520,126540,126546,126550,126553,126556,126559,126562,126565,126568,126572,126575,126578,126581,126584,126597,126602,126605,126608,126623,126626,126629,126632,126635,126638,126642,126645,126652,126655,126658,126661,126664,126667,126673,126676,126679,126685,126688,126691,126694,126700,126703,126706,126720,126727,126730,126733,126740,126749,126752,126755,126758,126762,126765],[10,126487,126483],{"id":126488},"_5-html表格列表与表单",[14,126490,126492],{"id":126491},"_51-表格标签","5.1 表格标签",[19,126494,126495],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126497,126498],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126500,126501],{},"②表格基本语法：",[25,126503],{"style":126466,"src":126504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126506,126507],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[25,126509],{"style":126466,"src":126510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126512,126513],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[25,126515],{"style":126466,"src":126516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126518,126519],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,126521,126522,126525,126526,126528,126529,126532,126533,126535,126536,126539],{},[200,126523,126524],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[200,126527,126524],{},"内部必须拥有",[200,126530,126531],{},"\u003Ctr>","标签，一般位于第一行，",[200,126534,126524],{},"比",[200,126537,126538],{},"\u003Cth>","范围广",[19,126541,126542,126545],{},[200,126543,126544],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,126547,126549],{"id":126548},"_52-合并单元格","5.2 合并单元格",[19,126551,126552],{},"（1）合并单元格方式：",[19,126554,126555],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,126557,126558],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,126560,126561],{},"（2）目标单元格：",[19,126563,126564],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,126566,126567],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,126569,126571],{"id":126570},"_53-列表标签","5.3 列表标签",[19,126573,126574],{},"（1）分类：无序列表、有序列表、自定义列表",[19,126576,126577],{},"①无序列表：",[25,126579],{"style":126466,"src":126580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,126582,126583],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,126585,126586,126589,126590,126593,126594,126596],{},[200,126587,126588],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[200,126591,126592],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[200,126595,126588],{},"中输入其他标签或文字是不对的",[19,126598,126599,126601],{},[200,126600,126592],{},"之间相当于一个容器，可以容纳所有元素",[19,126603,126604],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,126606,126607],{},"在css中去除前边的小圆点采用如下代码:",[194,126609,126613],{"className":126610,"code":126611,"language":126612,"meta":27,"style":27},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[200,126614,126615],{"__ignoreMap":27},[203,126616,126617,126620],{"class":205,"line":206},[203,126618,126619],{"class":51358},"list-style",[203,126621,126622],{"class":213},": none;\n",[19,126624,126625],{},"②有序列表：",[25,126627],{"style":126466,"src":126628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,126630,126631],{},"③自定义列表：",[25,126633],{"style":126466,"src":126634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[25,126636],{"style":126466,"src":126637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,126639,126641],{"id":126640},"_54-表单标签","5.4 表单标签",[19,126643,126644],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,126646,126647,126648,126651],{},"（1）表单域：包含单元素的区域，",[200,126649,126650],{},"\u003Cform>","标签可以实现信息的收集和传递。",[25,126653],{"style":126466,"src":126654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,126656,126657],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,126659,126660],{},"表单元素提交必须有name属性",[19,126662,126663],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,126665,126666],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,126668,77284,126669,126672],{},[200,126670,126671],{},"\u003Cinput>","输入表单元素",[25,126674],{"style":126466,"src":126675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[25,126677],{"style":126466,"src":126678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,126680,126681,126682],{},"单选按钮：",[200,126683,126684],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[25,126686],{"style":126466,"src":126687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,126689,126690],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[25,126692],{"style":126466,"src":126693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,126695,126696,126699],{},[363,126697,126698],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,126701,126702],{},"②select下拉表单元素：可以节约页面控件",[25,126704],{"style":126466,"src":126705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,126707,126708,13885,126710,126713,126714,126716,126717,126719],{},[363,126709,243],{},[200,126711,126712],{},"\u003Cselect>","中至少包含一对",[200,126715,102772],{},"；在",[200,126718,102772],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,126721,126722,126723,126726],{},"③",[200,126724,126725],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[25,126728],{"style":126466,"src":126729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,126731,126732],{},"3行20列",[14,126734,126736,126737,102751],{"id":126735},"_55-lable标签","5.5 ",[200,126738,126739],{},"\u003Clable>",[19,126741,126742,126743,126745,126746,126748],{},"它不是表单标签，但常常与表单标签搭配使用，",[200,126744,126739],{},"标签用于绑定一个表单标签，当点击",[200,126747,126739],{},"标签内的文本",[19,126750,126751],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[25,126753],{"style":126466,"src":126754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[25,126756],{"style":126466,"src":126757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,126759,126761],{"id":126760},"_56-实例","5.6 实例",[25,126763],{"style":126466,"src":126764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5216,126766,126767],{},"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":27,"searchDepth":124,"depth":124,"links":126769},[126770,126771,126772,126773,126774,126776],{"id":126491,"depth":124,"text":126492},{"id":126548,"depth":124,"text":126549},{"id":126570,"depth":124,"text":126571},{"id":126640,"depth":124,"text":126641},{"id":126735,"depth":124,"text":126775},"5.5 \u003Clable>标签",{"id":126760,"depth":124,"text":126761},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126483,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126783,"title":126784,"body":126785,"description":23467,"extension":129,"meta":127334,"navigation":131,"path":127335,"seo":127336,"stem":127337,"__hash__":127338},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126786,"toc":127309},[126787,126790,126794,126797,126800,126804,126807,126810,126813,126816,126819,126822,126825,126829,126832,126836,126839,126842,126845,126849,126852,126855,126858,126864,126867,126870,126873,126876,126879,126882,126885,126918,126922,126925,126928,126931,126935,126938,126941,126944,126947,126950,126954,126957,126960,126963,126967,126970,126974,126977,126981,126984,126989,126993,126996,127000,127003,127006,127009,127012,127039,127042,127046,127049,127052,127057,127060,127063,127067,127070,127075,127078,127081,127084,127088,127091,127094,127097,127101,127104,127107,127110,127114,127118,127121,127161,127164,127168,127175,127178,127182,127185,127231,127235,127238,127241,127244,127272,127276,127279,127306],[10,126788,126784],{"id":126789},"_6-css语法与文本样式",[14,126791,126793],{"id":126792},"_61-css语法规范","6.1 css语法规范",[19,126795,126796],{},"由两部分组成，选择器及一条或多条声明",[25,126798],{"style":126466,"src":126799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,126801,126802],{},[363,126803,243],{},[19,126805,126806],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,126808,126809],{},"②属性与属性值以“键值对”的形式出现",[19,126811,126812],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,126814,126815],{},"④属性和属性值之间用英文“;”分开",[25,126817],{"style":126466,"src":126818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[25,126820],{"style":126466,"src":126821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[25,126823],{"style":126466,"src":126824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,126826,126828],{"id":126827},"_62-css选择器","6.2 css选择器",[19,126830,126831],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[174,126833,126835],{"id":126834},"_621-标签选择器","6.2.1 标签选择器",[19,126837,126838],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,126840,126841],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[25,126843],{"style":126466,"src":126844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[174,126846,126848],{"id":126847},"_622-类选择器","6.2.2 类选择器",[19,126850,126851],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,126853,126854],{},"②样例",[25,126856],{"style":126466,"src":126857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,126859,126860,126861,126863],{},"③ ",[363,126862,126698],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,126865,126866],{},"可以理解为给这个标签起了个名字，来表示；",[19,126868,126869],{},"长名称或词组可以使用横线来为选择器命名；",[19,126871,126872],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,126874,126875],{},"命名要有意义；",[25,126877],{"style":126466,"src":126878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,126880,126881],{},"类选择器也可以指定特殊的元素p.center{}",[19,126883,126884],{},"p.center和.center都对",[194,126886,126888],{"className":126610,"code":126887,"language":126612,"meta":27,"style":27},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[200,126889,126890,126895,126904,126914],{"__ignoreMap":27},[203,126891,126892],{"class":205,"line":206},[203,126893,126894],{"class":272},"\u002F* 类选择器指定特殊元素 *\u002F\n",[203,126896,126897,126899,126902],{"class":205,"line":124},[203,126898,19],{"class":51358},[203,126900,126901],{"class":2052},".center",[203,126903,15662],{"class":213},[203,126905,126906,126908,126910,126912],{"class":205,"line":1269},[203,126907,70584],{"class":262},[203,126909,51495],{"class":213},[203,126911,51650],{"class":262},[203,126913,1380],{"class":213},[203,126915,126916],{"class":205,"line":1284},[203,126917,1654],{"class":213},[174,126919,126921],{"id":126920},"_623-多类名使用","6.2.3 多类名使用",[19,126923,126924],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[25,126926],{"style":126466,"src":126927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,126929,126930],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[174,126932,126934],{"id":126933},"_624-id选择器","6.2.4 id选择器",[19,126936,126937],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,126939,126940],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[25,126942],{"style":126466,"src":126943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,126945,126946],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,126948,126949],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[174,126951,126953],{"id":126952},"_625-通配符选择器","6.2.5 通配符选择器",[19,126955,126956],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,126958,126959],{},"* {",[19,126961,126962],{},"color=\"red\"}",[174,126964,126966],{"id":126965},"_626-总结","6.2.6 总结",[25,126968],{"style":126466,"src":126969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,126971,126973],{"id":126972},"_63-css字体属性","6.3 css字体属性",[19,126975,126976],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[174,126978,126980],{"id":126979},"_631-字体系列","6.3.1 字体系列",[19,126982,126983],{},"font-family: '宋体';",[19,126985,126986,126988],{},[363,126987,243],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[174,126990,126992],{"id":126991},"_632-字体大小","6.3.2 字体大小",[19,126994,126995],{},"font-size: 20px",[19,126997,126998,26531],{},[363,126999,126698],{},[19,127001,127002],{},"①px（像素）大小是网页的最常用单位",[19,127004,127005],{},"②谷歌浏览器默认为16px",[19,127007,127008],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127010,127011],{},"④可以给body指定整个页面的大小：会自动引用",[194,127013,127015],{"className":126610,"code":127014,"language":126612,"meta":27,"style":27},"body {\n  font-size: 16px;\n}\n",[200,127016,127017,127023,127035],{"__ignoreMap":27},[203,127018,127019,127021],{"class":205,"line":206},[203,127020,51858],{"class":51358},[203,127022,15662],{"class":213},[203,127024,127025,127027,127029,127031,127033],{"class":205,"line":124},[203,127026,70684],{"class":262},[203,127028,51495],{"class":213},[203,127030,815],{"class":262},[203,127032,51550],{"class":209},[203,127034,1380],{"class":213},[203,127036,127037],{"class":205,"line":1269},[203,127038,1654],{"class":213},[19,127040,127041],{},"⑤标题标签比较特殊，需要单独指定大小",[174,127043,127045],{"id":127044},"_633-字体粗细","6.3.3 字体粗细",[19,127047,127048],{},"font-weight: bold;",[19,127050,127051],{},"font-weight: 100；",[19,127053,127054,127056],{},[363,127055,243],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127058,127059],{},"font-weight= 400;",[19,127061,127062],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[174,127064,127066],{"id":127065},"_634-文字样式","6.3.4 文字样式",[19,127068,127069],{},"font-style: normal；",[19,127071,127072,26531],{},[363,127073,127074],{},"属性值",[19,127076,127077],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127079,127080],{},"②italic：浏览器会显示斜体的字体样式",[25,127082],{"style":126466,"src":127083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[174,127085,127087],{"id":127086},"_635-字体符合属性","6.3.5 字体符合属性",[25,127089],{"style":126466,"src":127090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[25,127092],{"style":126466,"src":127093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127095,127096],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127098,127099,26531],{},[363,127100,126698],{},[19,127102,127103],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127105,127106],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127108,127109],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127111,127113],{"id":127112},"_64-css-test文本属性","6.4 css test文本属性",[174,127115,127117],{"id":127116},"_641-文本颜色","6.4.1 文本颜色",[19,127119,127120],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[194,127122,127124],{"className":126610,"code":127123,"language":126612,"meta":27,"style":27},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[200,127125,127126,127131,127137,127147,127152,127157],{"__ignoreMap":27},[203,127127,127128],{"class":205,"line":206},[203,127129,127130],{"class":272},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[203,127132,127133,127135],{"class":205,"line":124},[203,127134,19],{"class":51358},[203,127136,15662],{"class":213},[203,127138,127139,127141,127143,127145],{"class":205,"line":1269},[203,127140,70963],{"class":262},[203,127142,51495],{"class":213},[203,127144,57479],{"class":262},[203,127146,1380],{"class":213},[203,127148,127149],{"class":205,"line":1284},[203,127150,127151],{"class":272},"  \u002F* color: #ff0000; *\u002F\n",[203,127153,127154],{"class":205,"line":1290},[203,127155,127156],{"class":272},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[203,127158,127159],{"class":205,"line":1304},[203,127160,1654],{"class":213},[25,127162],{"style":126466,"src":127163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[174,127165,127167],{"id":127166},"_642-对齐文本","6.4.2 对齐文本",[19,127169,127170,127171,127174],{},"text-align属于用于设置元素内文本内容的 ",[363,127172,127173],{},"水平对齐"," 方式",[19,127176,127177],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[174,127179,127181],{"id":127180},"_643-装饰文本","6.4.3 装饰文本",[19,127183,127184],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[194,127186,127188],{"className":126610,"code":127187,"language":126612,"meta":27,"style":27},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[200,127189,127190,127196,127206,127210,127216,127227],{"__ignoreMap":27},[203,127191,127192,127194],{"class":205,"line":206},[203,127193,452],{"class":51358},[203,127195,15662],{"class":213},[203,127197,127198,127200,127202,127204],{"class":205,"line":124},[203,127199,70560],{"class":262},[203,127201,51495],{"class":213},[203,127203,54795],{"class":262},[203,127205,1380],{"class":213},[203,127207,127208],{"class":205,"line":1269},[203,127209,1654],{"class":213},[203,127211,127212,127214],{"class":205,"line":1284},[203,127213,19],{"class":51358},[203,127215,15662],{"class":213},[203,127217,127218,127220,127222,127225],{"class":205,"line":1290},[203,127219,70560],{"class":262},[203,127221,51495],{"class":213},[203,127223,127224],{"class":262},"underline",[203,127226,1380],{"class":213},[203,127228,127229],{"class":205,"line":1304},[203,127230,1654],{"class":213},[174,127232,127234],{"id":127233},"_644-文本缩进","6.4.4 文本缩进",[19,127236,127237],{},"实现文本的第一行首行缩进自己指定的距离",[19,127239,127240],{},"20px往右边走；-20px往左边走",[19,127242,127243],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[194,127245,127247],{"className":126610,"code":127246,"language":126612,"meta":27,"style":27},"p {\n  text-indent: 2em;\n}\n",[200,127248,127249,127255,127268],{"__ignoreMap":27},[203,127250,127251,127253],{"class":205,"line":206},[203,127252,19],{"class":51358},[203,127254,15662],{"class":213},[203,127256,127257,127260,127262,127264,127266],{"class":205,"line":124},[203,127258,127259],{"class":262},"  text-indent",[203,127261,51495],{"class":213},[203,127263,291],{"class":262},[203,127265,23644],{"class":209},[203,127267,1380],{"class":213},[203,127269,127270],{"class":205,"line":1269},[203,127271,1654],{"class":213},[174,127273,127275],{"id":127274},"_645-行间距","6.4.5 行间距",[19,127277,127278],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[194,127280,127282],{"className":126610,"code":127281,"language":126612,"meta":27,"style":27},"p {\n  line-height: 1.6;\n}\n",[200,127283,127284,127290,127302],{"__ignoreMap":27},[203,127285,127286,127288],{"class":205,"line":206},[203,127287,19],{"class":51358},[203,127289,15662],{"class":213},[203,127291,127292,127295,127297,127300],{"class":205,"line":124},[203,127293,127294],{"class":262},"  line-height",[203,127296,51495],{"class":213},[203,127298,127299],{"class":262},"1.6",[203,127301,1380],{"class":213},[203,127303,127304],{"class":205,"line":1269},[203,127305,1654],{"class":213},[5216,127307,127308],{},"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":27,"searchDepth":124,"depth":124,"links":127310},[127311,127312,127320,127327],{"id":126792,"depth":124,"text":126793},{"id":126827,"depth":124,"text":126828,"children":127313},[127314,127315,127316,127317,127318,127319],{"id":126834,"depth":1269,"text":126835},{"id":126847,"depth":1269,"text":126848},{"id":126920,"depth":1269,"text":126921},{"id":126933,"depth":1269,"text":126934},{"id":126952,"depth":1269,"text":126953},{"id":126965,"depth":1269,"text":126966},{"id":126972,"depth":124,"text":126973,"children":127321},[127322,127323,127324,127325,127326],{"id":126979,"depth":1269,"text":126980},{"id":126991,"depth":1269,"text":126992},{"id":127044,"depth":1269,"text":127045},{"id":127065,"depth":1269,"text":127066},{"id":127086,"depth":1269,"text":127087},{"id":127112,"depth":124,"text":127113,"children":127328},[127329,127330,127331,127332,127333],{"id":127116,"depth":1269,"text":127117},{"id":127166,"depth":1269,"text":127167},{"id":127180,"depth":1269,"text":127181},{"id":127233,"depth":1269,"text":127234},{"id":127274,"depth":1269,"text":127275},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126784,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127340,"title":127341,"body":127342,"description":23467,"extension":129,"meta":127991,"navigation":131,"path":127992,"seo":127993,"stem":127994,"__hash__":127995},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127343,"toc":127972},[127344,127347,127351,127355,127415,127419,127429,127432,127435,127439,127464,127468,127471,127474,127477,127480,127483,127487,127490,127493,127535,127538,127564,127570,127573,127577,127581,127587,127590,127593,127596,127599,127602,127605,127650,127654,127657,127660,127664,127668,127697,127700,127705,127708,127711,127714,127717,127721,127725,127728,127730,127733,127737,127740,127744,127747,127750,127753,127757,127761,127767,127777,127780,127783,127786,127789,127792,127915,127923,127931,127969],[10,127345,127341],{"id":127346},"_7-css引入方式与选择器进阶",[14,127348,127350],{"id":127349},"_71-css引入方式","7.1 css引入方式",[174,127352,127354],{"id":127353},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[194,127356,127360],{"className":127357,"code":127358,"language":127359,"meta":27,"style":27},"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",[200,127361,127362,127370,127377,127389,127402,127407],{"__ignoreMap":27},[203,127363,127364,127366,127368],{"class":205,"line":206},[203,127365,1124],{"class":213},[203,127367,5216],{"class":51358},[203,127369,51365],{"class":213},[203,127371,127372,127375],{"class":205,"line":124},[203,127373,127374],{"class":51358},"  h1",[203,127376,15662],{"class":213},[203,127378,127379,127382,127384,127387],{"class":205,"line":1269},[203,127380,127381],{"class":262},"    color",[203,127383,51495],{"class":213},[203,127385,127386],{"class":262},"blue",[203,127388,1380],{"class":213},[203,127390,127391,127394,127396,127398,127400],{"class":205,"line":1284},[203,127392,127393],{"class":262},"    font-size",[203,127395,51495],{"class":213},[203,127397,1014],{"class":262},[203,127399,51550],{"class":209},[203,127401,1380],{"class":213},[203,127403,127404],{"class":205,"line":1290},[203,127405,127406],{"class":213},"  }\n",[203,127408,127409,127411,127413],{"class":205,"line":1304},[203,127410,51843],{"class":213},[203,127412,5216],{"class":51358},[203,127414,51365],{"class":213},[19,127416,127417,26531],{},[363,127418,126698],{},[19,127420,77284,127421,127424,127425,127428],{},[200,127422,127423],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[200,127426,127427],{},"\u003Chead>","标签中",[19,127430,127431],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127433,127434],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[174,127436,127438],{"id":127437},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[194,127440,127442],{"className":127357,"code":127441,"language":127359,"meta":27,"style":27},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[200,127443,127444],{"__ignoreMap":27},[203,127445,127446,127448,127450,127452,127454,127457,127460,127462],{"class":205,"line":206},[203,127447,1124],{"class":213},[203,127449,19],{"class":51358},[203,127451,62684],{"class":2052},[203,127453,259],{"class":213},[203,127455,127456],{"class":318},"\"color: red; font-size: 16px;\"",[203,127458,127459],{"class":213},">这是一个段落\u003C\u002F",[203,127461,19],{"class":51358},[203,127463,51365],{"class":213},[19,127465,127466,26531],{},[363,127467,126698],{},[19,127469,127470],{},"①style其实就是标签的属性",[19,127472,127473],{},"②在双引号中间，写法要符合css规范",[19,127475,127476],{},"③可以控制当前的标签设置样式",[19,127478,127479],{},"④书写繁琐，简单时才用",[19,127481,127482],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[174,127484,127486],{"id":127485},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127488,127489],{},"使用最多，单独建一个css文件，然后html引用",[19,127491,127492],{},"①css文件部分： style.css",[194,127494,127496],{"className":126610,"code":127495,"language":126612,"meta":27,"style":27},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[200,127497,127498,127503,127509,127519,127531],{"__ignoreMap":27},[203,127499,127500],{"class":205,"line":206},[203,127501,127502],{"class":272},"\u002F* style.css *\u002F\n",[203,127504,127505,127507],{"class":205,"line":124},[203,127506,10],{"class":51358},[203,127508,15662],{"class":213},[203,127510,127511,127513,127515,127517],{"class":205,"line":1269},[203,127512,70963],{"class":262},[203,127514,51495],{"class":213},[203,127516,127386],{"class":262},[203,127518,1380],{"class":213},[203,127520,127521,127523,127525,127527,127529],{"class":205,"line":1284},[203,127522,70684],{"class":262},[203,127524,51495],{"class":213},[203,127526,1014],{"class":262},[203,127528,51550],{"class":209},[203,127530,1380],{"class":213},[203,127532,127533],{"class":205,"line":1290},[203,127534,1654],{"class":213},[19,127536,127537],{},"②html部分",[194,127539,127541],{"className":127357,"code":127540,"language":127359,"meta":27,"style":27},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[200,127542,127543],{"__ignoreMap":27},[203,127544,127545,127547,127549,127551,127553,127555,127557,127559,127562],{"class":205,"line":206},[203,127546,1124],{"class":213},[203,127548,69063],{"class":51358},[203,127550,69066],{"class":2052},[203,127552,259],{"class":213},[203,127554,69071],{"class":318},[203,127556,61115],{"class":2052},[203,127558,259],{"class":213},[203,127560,127561],{"class":318},"\"style.css\"",[203,127563,51365],{"class":213},[19,127565,127566,127569],{},[200,127567,127568],{},"\u003Chr>","水平线标签（但是不常用！）",[19,127571,127572],{},"ctrl+0回到页面原来大小",[14,127574,127576],{"id":127575},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[174,127578,127580],{"id":127579},"_721-快速生成html","7.2.1 快速生成html",[19,127582,127583,127584],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[200,127585,127586],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,127588,127589],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,127591,127592],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,127594,127595],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,127597,127598],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,127600,127601],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,127603,127604],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[194,127606,127608],{"className":127357,"code":127607,"language":127359,"meta":27,"style":27},"\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",[200,127609,127610,127615,127620,127625,127630,127635,127640,127645],{"__ignoreMap":27},[203,127611,127612],{"class":205,"line":206},[203,127613,127614],{"class":272},"\u003C!-- Emmet 语法示例 -->\n",[203,127616,127617],{"class":205,"line":124},[203,127618,127619],{"class":272},"\u003C!-- div*3        → 生成3个div -->\n",[203,127621,127622],{"class":205,"line":1269},[203,127623,127624],{"class":272},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[203,127626,127627],{"class":205,"line":1284},[203,127628,127629],{"class":272},"\u003C!-- div+p        → 兄弟div和p -->\n",[203,127631,127632],{"class":205,"line":1290},[203,127633,127634],{"class":272},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[203,127636,127637],{"class":205,"line":1304},[203,127638,127639],{"class":272},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[203,127641,127642],{"class":205,"line":1310},[203,127643,127644],{"class":272},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[203,127646,127647],{"class":205,"line":1401},[203,127648,127649],{"class":272},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[174,127651,127653],{"id":127652},"_722-快速生成css","7.2.2 快速生成css",[19,127655,127656],{},"简写开头",[19,127658,127659],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,127661,127663],{"id":127662},"_73-css复合选择器","7.3 css复合选择器",[174,127665,127667],{"id":127666},"_731-后代选择器","7.3.1 后代选择器",[194,127669,127671],{"className":126610,"code":127670,"language":126612,"meta":27,"style":27},".parent .child {\n  color: blue;\n}\n",[200,127672,127673,127683,127693],{"__ignoreMap":27},[203,127674,127675,127678,127681],{"class":205,"line":206},[203,127676,127677],{"class":2052},".parent",[203,127679,127680],{"class":2052}," .child",[203,127682,15662],{"class":213},[203,127684,127685,127687,127689,127691],{"class":205,"line":124},[203,127686,70963],{"class":262},[203,127688,51495],{"class":213},[203,127690,127386],{"class":262},[203,127692,1380],{"class":213},[203,127694,127695],{"class":205,"line":1269},[203,127696,1654],{"class":213},[19,127698,127699],{},"元素1 元素2 {样式声明}",[19,127701,127702],{},[363,127703,127704],{},"注意点:",[19,127706,127707],{},"①元素1和元素2中间用空格隔开",[19,127709,127710],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,127712,127713],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,127715,127716],{},"④元素1和元素2可以是任意基础选择器",[174,127718,127720],{"id":127719},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,127722,127723],{},[363,127724,127704],{},[19,127726,127727],{},"①元素1和元素2中间用大于号隔开",[19,127729,127710],{},[19,127731,127732],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[174,127734,127736],{"id":127735},"_733-并集选择器","7.3.3 并集选择器",[19,127738,127739],{},"元素1，元素2 {样式声明}",[19,127741,127742],{},[363,127743,127704],{},[19,127745,127746],{},"①元素1和元素2中间用逗号隔开",[19,127748,127749],{},"②逗号可以理解为和的意思",[19,127751,127752],{},"③并集选择器通常用于集体声明",[174,127754,127756],{"id":127755},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,127758,127759],{},[363,127760,127704],{},[19,127762,127763,127764,127766],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69063,127765],{},"－:visited－:hover－:active。",[19,127768,127769,127770,127773,127774,25798],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127771,127772],"hover",{}," 、 ",[127775,127776],"first-child",{},[19,127778,127779],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,127781,127782],{},"link对没访问的进行设置",[19,127784,127785],{},"vistied对已访问的进行改变",[19,127787,127788],{},"hover鼠标经过就会变",[19,127790,127791],{},"active常按(点)就会变",[194,127793,127795],{"className":126610,"code":127794,"language":126612,"meta":27,"style":27},"\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",[200,127796,127797,127802,127811,127821,127831,127835,127844,127855,127859,127867,127877,127887,127891,127900,127911],{"__ignoreMap":27},[203,127798,127799],{"class":205,"line":206},[203,127800,127801],{"class":272},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[203,127803,127804,127806,127809],{"class":205,"line":124},[203,127805,452],{"class":51358},[203,127807,127808],{"class":2052},":link",[203,127810,15662],{"class":213},[203,127812,127813,127815,127817,127819],{"class":205,"line":1269},[203,127814,70963],{"class":262},[203,127816,51495],{"class":213},[203,127818,62427],{"class":262},[203,127820,1380],{"class":213},[203,127822,127823,127825,127827,127829],{"class":205,"line":1284},[203,127824,70560],{"class":262},[203,127826,51495],{"class":213},[203,127828,54795],{"class":262},[203,127830,1380],{"class":213},[203,127832,127833],{"class":205,"line":1290},[203,127834,1654],{"class":213},[203,127836,127837,127839,127842],{"class":205,"line":1304},[203,127838,452],{"class":51358},[203,127840,127841],{"class":2052},":visited",[203,127843,15662],{"class":213},[203,127845,127846,127848,127850,127853],{"class":205,"line":1310},[203,127847,70963],{"class":262},[203,127849,51495],{"class":213},[203,127851,127852],{"class":262},"purple",[203,127854,1380],{"class":213},[203,127856,127857],{"class":205,"line":1401},[203,127858,1654],{"class":213},[203,127860,127861,127863,127865],{"class":205,"line":1407},[203,127862,452],{"class":51358},[203,127864,60998],{"class":2052},[203,127866,15662],{"class":213},[203,127868,127869,127871,127873,127875],{"class":205,"line":1419},[203,127870,70963],{"class":262},[203,127872,51495],{"class":213},[203,127874,54947],{"class":262},[203,127876,1380],{"class":213},[203,127878,127879,127881,127883,127885],{"class":205,"line":1701},[203,127880,70560],{"class":262},[203,127882,51495],{"class":213},[203,127884,127224],{"class":262},[203,127886,1380],{"class":213},[203,127888,127889],{"class":205,"line":1706},[203,127890,1654],{"class":213},[203,127892,127893,127895,127898],{"class":205,"line":1712},[203,127894,452],{"class":51358},[203,127896,127897],{"class":2052},":active",[203,127899,15662],{"class":213},[203,127901,127902,127904,127906,127909],{"class":205,"line":1717},[203,127903,70963],{"class":262},[203,127905,51495],{"class":213},[203,127907,127908],{"class":262},"green",[203,127910,1380],{"class":213},[203,127912,127913],{"class":205,"line":1731},[203,127914,1654],{"class":213},[174,127916,127918,127919,127922],{"id":127917},"_735-伪类选择器","7.3.5 ",[127920,127921],"focus",{},"伪类选择器",[19,127924,127925,127927,127928,127930],{},[127920,127926],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[200,127929,126671],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[194,127932,127934],{"className":126610,"code":127933,"language":126612,"meta":27,"style":27},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[200,127935,127936,127944,127955,127965],{"__ignoreMap":27},[203,127937,127938,127940,127942],{"class":205,"line":206},[203,127939,53879],{"class":51358},[203,127941,61958],{"class":2052},[203,127943,15662],{"class":213},[203,127945,127946,127949,127951,127953],{"class":205,"line":124},[203,127947,127948],{"class":262},"  border-color",[203,127950,51495],{"class":213},[203,127952,54947],{"class":262},[203,127954,1380],{"class":213},[203,127956,127957,127959,127961,127963],{"class":205,"line":1269},[203,127958,70856],{"class":262},[203,127960,51495],{"class":213},[203,127962,54795],{"class":262},[203,127964,1380],{"class":213},[203,127966,127967],{"class":205,"line":1284},[203,127968,1654],{"class":213},[5216,127970,127971],{},"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":27,"searchDepth":124,"depth":124,"links":127973},[127974,127979,127983],{"id":127349,"depth":124,"text":127350,"children":127975},[127976,127977,127978],{"id":127353,"depth":1269,"text":127354},{"id":127437,"depth":1269,"text":127438},{"id":127485,"depth":1269,"text":127486},{"id":127575,"depth":124,"text":127576,"children":127980},[127981,127982],{"id":127579,"depth":1269,"text":127580},{"id":127652,"depth":1269,"text":127653},{"id":127662,"depth":124,"text":127663,"children":127984},[127985,127986,127987,127988,127989],{"id":127666,"depth":1269,"text":127667},{"id":127719,"depth":1269,"text":127720},{"id":127735,"depth":1269,"text":127736},{"id":127755,"depth":1269,"text":127756},{"id":127917,"depth":1269,"text":127990},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127341,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127997,"title":127998,"body":127999,"description":23467,"extension":129,"meta":129922,"navigation":131,"path":129923,"seo":129924,"stem":129925,"__hash__":129926},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128000,"toc":129896},[128001,128004,128008,128017,128021,128047,128052,128055,128058,128061,128064,128068,128071,128081,128089,128093,128128,128133,128136,128139,128142,128145,128149,128152,128161,128165,128178,128183,128186,128189,128192,128196,128199,128203,128206,128261,128264,128295,128298,128352,128356,128359,128525,128648,128651,128654,128657,128660,128664,128667,128671,128674,128677,128681,128684,128715,128742,128770,128773,128777,128803,128846,128850,128944,128947,128974,128977,128980,128983,128986,128989,128992,128995,128998,129001,129005,129062,129089,129093,129141,129145,129186,129188,129191,129194,129197,129200,129204,129296,129299,129302,129305,129309,129432,129633,129637,129641,129644,129647,129650,129654,129657,129660,129685,129688,129691,129694,129697,129700,129704,129712,129774,129777,129835,129838,129841,129844,129847,129850,129853,129856,129893],[10,128002,127998],{"id":128003},"_8-css显示模式与背景特性",[14,128005,128007],{"id":128006},"_81-css元素显示模式","8.1 css元素显示模式",[19,128009,128010,128011,128013,128014,128016],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[200,128012,126221],{},"自己占一行，比如一行可以放多个",[200,128015,126224],{},"，HTML 元素一般分为块元素和行内元素两种类型",[174,128018,128020],{"id":128019},"_811-块元素","8.1.1 块元素",[19,128022,128023,128024,128026,128027,426,128030,426,128032,426,128034,426,128037,426,128040,128043,128044,128046],{},"常见的块元素有",[200,128025,126125],{},"~",[200,128028,128029],{},"\u003Ch6>",[200,128031,126151],{},[200,128033,126221],{},[200,128035,128036],{},"\u003Cul>",[200,128038,128039],{},"\u003Col>",[200,128041,128042],{},"\u003Cli>","等，其中 ",[200,128045,126221],{}," 标签是最典型的块元素",[19,128048,128049],{},[363,128050,128051],{},"块级元素的特点：",[19,128053,128054],{},"① 比较霸道，自己独占一行。",[19,128056,128057],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128059,128060],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128062,128063],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128065,128066],{},[363,128067,243],{},[19,128069,128070],{},"①文字类的元素内不能使用块级元素",[19,128072,77307,128073,128075,128076,128078,128079],{},[200,128074,126151],{}," 标签主要用于存放文字，因此 ",[200,128077,126151],{}," 里面不能放块级元素，特别是不能放",[200,128080,126221],{},[19,128082,128083,128084,128026,128086,128088],{},"⑥同理， ",[200,128085,126125],{},[200,128087,128029],{},"等都是文字类块级标签，里面也不能放其他块级元素",[174,128090,128092],{"id":128091},"_812-行内元素","8.1.2 行内元素",[19,128094,128095,128096,426,128098,426,128101,426,128104,426,128107,426,128110,426,128113,426,128116,426,128119,426,128122,128124,128125,128127],{},"常见的行内元素有 ",[200,128097,126383],{},[200,128099,128100],{},"\u003Cstrong>",[200,128102,128103],{},"\u003Cb>",[200,128105,128106],{},"\u003Cem>",[200,128108,128109],{},"\u003Ci>",[200,128111,128112],{},"\u003Cdel>",[200,128114,128115],{},"\u003Cs>",[200,128117,128118],{},"\u003Cins>",[200,128120,128121],{},"\u003Cu>",[200,128123,126224],{}," 等，其中 ",[200,128126,126224],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128129,128130],{},[363,128131,128132],{},"特点：",[19,128134,128135],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128137,128138],{},"② 高、宽直接设置是无效的。",[19,128140,128141],{},"③ 默认宽度就是它本身内容的宽度。",[19,128143,128144],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128146,128147],{},[363,128148,243],{},[19,128150,128151],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128153,128154,128155,128157,128158,128160],{},"②特殊情况链接 ",[200,128156,126383],{}," 里面可以放块级元素，但是给 ",[200,128159,126383],{}," 转换一下块级模式最安全",[174,128162,128164],{"id":128163},"_813-行内块元素","8.1.3 行内块元素",[19,128166,128167,128168,426,128171,426,128174,128177],{},"在行内元素中有几个特殊的标签 —— ",[200,128169,128170],{},"\u003Cimg \u002F>",[200,128172,128173],{},"\u003Cinput \u002F>",[200,128175,128176],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128179,128180],{},[363,128181,128182],{},"行内块元素的特点：",[19,128184,128185],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128187,128188],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128190,128191],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[174,128193,128195],{"id":128194},"_814-总结","8.1.4 总结",[25,128197],{"style":126466,"src":128198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[174,128200,128202],{"id":128201},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128204,128205],{},"①转换为块元素：display:block;",[194,128207,128209],{"className":126610,"code":128208,"language":126612,"meta":27,"style":27},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[200,128210,128211,128216,128222,128233,128245,128257],{"__ignoreMap":27},[203,128212,128213],{"class":205,"line":206},[203,128214,128215],{"class":272},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[203,128217,128218,128220],{"class":205,"line":124},[203,128219,452],{"class":51358},[203,128221,15662],{"class":213},[203,128223,128224,128227,128229,128231],{"class":205,"line":1269},[203,128225,128226],{"class":262},"  display",[203,128228,51495],{"class":213},[203,128230,60927],{"class":262},[203,128232,1380],{"class":213},[203,128234,128235,128237,128239,128241,128243],{"class":205,"line":1284},[203,128236,70626],{"class":262},[203,128238,51495],{"class":213},[203,128240,525],{"class":262},[203,128242,51550],{"class":209},[203,128244,1380],{"class":213},[203,128246,128247,128249,128251,128253,128255],{"class":205,"line":1290},[203,128248,70846],{"class":262},[203,128250,51495],{"class":213},[203,128252,615],{"class":262},[203,128254,51550],{"class":209},[203,128256,1380],{"class":213},[203,128258,128259],{"class":205,"line":1304},[203,128260,1654],{"class":213},[19,128262,128263],{},"②转换为行内元素：display:inline;",[194,128265,128267],{"className":126610,"code":128266,"language":126612,"meta":27,"style":27},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[200,128268,128269,128274,128280,128291],{"__ignoreMap":27},[203,128270,128271],{"class":205,"line":206},[203,128272,128273],{"class":272},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[203,128275,128276,128278],{"class":205,"line":124},[203,128277,51669],{"class":51358},[203,128279,15662],{"class":213},[203,128281,128282,128284,128286,128289],{"class":205,"line":1269},[203,128283,128226],{"class":262},[203,128285,51495],{"class":213},[203,128287,128288],{"class":262},"inline",[203,128290,1380],{"class":213},[203,128292,128293],{"class":205,"line":1284},[203,128294,1654],{"class":213},[19,128296,128297],{},"③转换为行内块：display:inline-block;",[194,128299,128301],{"className":126610,"code":128300,"language":126612,"meta":27,"style":27},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[200,128302,128303,128308,128314,128324,128336,128348],{"__ignoreMap":27},[203,128304,128305],{"class":205,"line":206},[203,128306,128307],{"class":272},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[203,128309,128310,128312],{"class":205,"line":124},[203,128311,203],{"class":51358},[203,128313,15662],{"class":213},[203,128315,128316,128318,128320,128322],{"class":205,"line":1269},[203,128317,128226],{"class":262},[203,128319,51495],{"class":213},[203,128321,72441],{"class":262},[203,128323,1380],{"class":213},[203,128325,128326,128328,128330,128332,128334],{"class":205,"line":1284},[203,128327,70626],{"class":262},[203,128329,51495],{"class":213},[203,128331,826],{"class":262},[203,128333,51550],{"class":209},[203,128335,1380],{"class":213},[203,128337,128338,128340,128342,128344,128346],{"class":205,"line":1290},[203,128339,70846],{"class":262},[203,128341,51495],{"class":213},[203,128343,1165],{"class":262},[203,128345,51550],{"class":209},[203,128347,1380],{"class":213},[203,128349,128350],{"class":205,"line":1304},[203,128351,1654],{"class":213},[174,128353,128355],{"id":128354},"_816-小米侧边栏","8.1.6 小米侧边栏",[25,128357],{"style":126466,"src":128358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[194,128360,128362],{"className":127357,"code":128361,"language":127359,"meta":27,"style":27},"\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",[200,128363,128364,128369,128384,128403,128422,128441,128460,128479,128498,128517],{"__ignoreMap":27},[203,128365,128366],{"class":205,"line":206},[203,128367,128368],{"class":272},"\u003C!-- 小米侧边栏案例 -->\n",[203,128370,128371,128373,128375,128377,128379,128382],{"class":205,"line":124},[203,128372,1124],{"class":213},[203,128374,51669],{"class":51358},[203,128376,53544],{"class":2052},[203,128378,259],{"class":213},[203,128380,128381],{"class":318},"\"sidebar\"",[203,128383,51365],{"class":213},[203,128385,128386,128388,128390,128392,128394,128396,128399,128401],{"class":205,"line":1269},[203,128387,52202],{"class":213},[203,128389,452],{"class":51358},[203,128391,61115],{"class":2052},[203,128393,259],{"class":213},[203,128395,61120],{"class":318},[203,128397,128398],{"class":213},">手机 电话卡\u003C\u002F",[203,128400,452],{"class":51358},[203,128402,51365],{"class":213},[203,128404,128405,128407,128409,128411,128413,128415,128418,128420],{"class":205,"line":1284},[203,128406,52202],{"class":213},[203,128408,452],{"class":51358},[203,128410,61115],{"class":2052},[203,128412,259],{"class":213},[203,128414,61120],{"class":318},[203,128416,128417],{"class":213},">电视 盒子\u003C\u002F",[203,128419,452],{"class":51358},[203,128421,51365],{"class":213},[203,128423,128424,128426,128428,128430,128432,128434,128437,128439],{"class":205,"line":1290},[203,128425,52202],{"class":213},[203,128427,452],{"class":51358},[203,128429,61115],{"class":2052},[203,128431,259],{"class":213},[203,128433,61120],{"class":318},[203,128435,128436],{"class":213},">笔记本 平板\u003C\u002F",[203,128438,452],{"class":51358},[203,128440,51365],{"class":213},[203,128442,128443,128445,128447,128449,128451,128453,128456,128458],{"class":205,"line":1304},[203,128444,52202],{"class":213},[203,128446,452],{"class":51358},[203,128448,61115],{"class":2052},[203,128450,259],{"class":213},[203,128452,61120],{"class":318},[203,128454,128455],{"class":213},">出行 穿戴\u003C\u002F",[203,128457,452],{"class":51358},[203,128459,51365],{"class":213},[203,128461,128462,128464,128466,128468,128470,128472,128475,128477],{"class":205,"line":1310},[203,128463,52202],{"class":213},[203,128465,452],{"class":51358},[203,128467,61115],{"class":2052},[203,128469,259],{"class":213},[203,128471,61120],{"class":318},[203,128473,128474],{"class":213},">智能 路由器\u003C\u002F",[203,128476,452],{"class":51358},[203,128478,51365],{"class":213},[203,128480,128481,128483,128485,128487,128489,128491,128494,128496],{"class":205,"line":1401},[203,128482,52202],{"class":213},[203,128484,452],{"class":51358},[203,128486,61115],{"class":2052},[203,128488,259],{"class":213},[203,128490,61120],{"class":318},[203,128492,128493],{"class":213},">健康 儿童\u003C\u002F",[203,128495,452],{"class":51358},[203,128497,51365],{"class":213},[203,128499,128500,128502,128504,128506,128508,128510,128513,128515],{"class":205,"line":1407},[203,128501,52202],{"class":213},[203,128503,452],{"class":51358},[203,128505,61115],{"class":2052},[203,128507,259],{"class":213},[203,128509,61120],{"class":318},[203,128511,128512],{"class":213},">耳机 音响\u003C\u002F",[203,128514,452],{"class":51358},[203,128516,51365],{"class":213},[203,128518,128519,128521,128523],{"class":205,"line":1419},[203,128520,51843],{"class":213},[203,128522,51669],{"class":51358},[203,128524,51365],{"class":213},[194,128526,128528],{"className":126610,"code":128527,"language":126612,"meta":27,"style":27},".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",[200,128529,128530,128539,128549,128562,128574,128586,128598,128608,128619,128623,128633,128644],{"__ignoreMap":27},[203,128531,128532,128535,128537],{"class":205,"line":206},[203,128533,128534],{"class":2052},".sidebar",[203,128536,1488],{"class":51358},[203,128538,15662],{"class":213},[203,128540,128541,128543,128545,128547],{"class":205,"line":124},[203,128542,128226],{"class":262},[203,128544,51495],{"class":213},[203,128546,60927],{"class":262},[203,128548,1380],{"class":213},[203,128550,128551,128553,128555,128558,128560],{"class":205,"line":1269},[203,128552,70626],{"class":262},[203,128554,51495],{"class":213},[203,128556,128557],{"class":262},"234",[203,128559,51550],{"class":209},[203,128561,1380],{"class":213},[203,128563,128564,128566,128568,128570,128572],{"class":205,"line":1284},[203,128565,70846],{"class":262},[203,128567,51495],{"class":213},[203,128569,666],{"class":262},[203,128571,51550],{"class":209},[203,128573,1380],{"class":213},[203,128575,128576,128578,128580,128582,128584],{"class":205,"line":1290},[203,128577,127294],{"class":262},[203,128579,51495],{"class":213},[203,128581,666],{"class":262},[203,128583,51550],{"class":209},[203,128585,1380],{"class":213},[203,128587,128588,128590,128592,128594,128596],{"class":205,"line":1304},[203,128589,70881],{"class":262},[203,128591,51495],{"class":213},[203,128593,1165],{"class":262},[203,128595,51550],{"class":209},[203,128597,1380],{"class":213},[203,128599,128600,128602,128604,128606],{"class":205,"line":1310},[203,128601,70963],{"class":262},[203,128603,51495],{"class":213},[203,128605,60900],{"class":262},[203,128607,1380],{"class":213},[203,128609,128610,128612,128614,128617],{"class":205,"line":1401},[203,128611,70936],{"class":262},[203,128613,51495],{"class":213},[203,128615,128616],{"class":262},"#55585a",[203,128618,1380],{"class":213},[203,128620,128621],{"class":205,"line":1407},[203,128622,1654],{"class":213},[203,128624,128625,128627,128629,128631],{"class":205,"line":1419},[203,128626,128534],{"class":2052},[203,128628,1488],{"class":51358},[203,128630,60998],{"class":2052},[203,128632,15662],{"class":213},[203,128634,128635,128637,128639,128642],{"class":205,"line":1701},[203,128636,70936],{"class":262},[203,128638,51495],{"class":213},[203,128640,128641],{"class":262},"#ff6700",[203,128643,1380],{"class":213},[203,128645,128646],{"class":205,"line":1706},[203,128647,1654],{"class":213},[25,128649],{"style":126466,"src":128650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,128652,128653],{},"行高=盒子高度：实现文字的垂直居中",[19,128655,128656],{},"原理讲解：",[25,128658],{"style":126466,"src":128659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,128661,128663],{"id":128662},"_82-css背景","8.2 css背景",[19,128665,128666],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[174,128668,128670],{"id":128669},"_821-背景颜色","8.2.1 背景颜色",[19,128672,128673],{},"background-color:颜色值;",[19,128675,128676],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[174,128678,128680],{"id":128679},"_822-背景图片","8.2.2 背景图片",[19,128682,128683],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[194,128685,128687],{"className":126610,"code":128686,"language":126612,"meta":27,"style":27},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[200,128688,128689,128695,128711],{"__ignoreMap":27},[203,128690,128691,128693],{"class":205,"line":206},[203,128692,51669],{"class":51358},[203,128694,15662],{"class":213},[203,128696,128697,128700,128702,128704,128706,128709],{"class":205,"line":124},[203,128698,128699],{"class":262},"  background-image",[203,128701,51495],{"class":213},[203,128703,61784],{"class":262},[203,128705,214],{"class":213},[203,128707,128708],{"class":5306},"images\u002Fbg.png",[203,128710,2808],{"class":213},[203,128712,128713],{"class":205,"line":1269},[203,128714,1654],{"class":213},[351,128716,128717,128726],{},[354,128718,128719],{},[357,128720,128721,128724],{},[360,128722,128723],{"align":23827},"参数值",[360,128725,102754],{"align":23827},[398,128727,128728,128735],{},[357,128729,128730,128732],{},[403,128731,54795],{"align":23827},[403,128733,128734],{"align":23827},"无背景图（默认的）",[357,128736,128737,128739],{},[403,128738,61784],{"align":23827},[403,128740,128741],{"align":23827},"使用绝对或相对地址指定背景图像",[194,128743,128744],{"className":126610,"code":128686,"language":126612,"meta":27,"style":27},[200,128745,128746,128752,128766],{"__ignoreMap":27},[203,128747,128748,128750],{"class":205,"line":206},[203,128749,51669],{"class":51358},[203,128751,15662],{"class":213},[203,128753,128754,128756,128758,128760,128762,128764],{"class":205,"line":124},[203,128755,128699],{"class":262},[203,128757,51495],{"class":213},[203,128759,61784],{"class":262},[203,128761,214],{"class":213},[203,128763,128708],{"class":5306},[203,128765,2808],{"class":213},[203,128767,128768],{"class":205,"line":1269},[203,128769,1654],{"class":213},[19,128771,128772],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[174,128774,128776],{"id":128775},"_823-背景平铺","8.2.3 背景平铺",[194,128778,128780],{"className":126610,"code":128779,"language":126612,"meta":27,"style":27},"div {\n  background-repeat: no-repeat;\n}\n",[200,128781,128782,128788,128799],{"__ignoreMap":27},[203,128783,128784,128786],{"class":205,"line":206},[203,128785,51669],{"class":51358},[203,128787,15662],{"class":213},[203,128789,128790,128793,128795,128797],{"class":205,"line":124},[203,128791,128792],{"class":262},"  background-repeat",[203,128794,51495],{"class":213},[203,128796,61794],{"class":262},[203,128798,1380],{"class":213},[203,128800,128801],{"class":205,"line":1269},[203,128802,1654],{"class":213},[351,128804,128805,128813],{},[354,128806,128807],{},[357,128808,128809,128811],{},[360,128810,128723],{"align":23827},[360,128812,102754],{"align":23827},[398,128814,128815,128823,128830,128838],{},[357,128816,128817,128820],{},[403,128818,128819],{"align":23827},"repeat",[403,128821,128822],{"align":23827},"背景图像在纵向和横向上平铺（默认的）",[357,128824,128825,128827],{},[403,128826,61794],{"align":23827},[403,128828,128829],{"align":23827},"背景图像不平铺",[357,128831,128832,128835],{},[403,128833,128834],{"align":23827},"repeat-x",[403,128836,128837],{"align":23827},"背景图像在横向上平铺",[357,128839,128840,128843],{},[403,128841,128842],{"align":23827},"repeat-y",[403,128844,128845],{"align":23827},"背景图像在纵向平铺",[174,128847,128849],{"id":128848},"_824-背景图片位置","8.2.4 背景图片位置",[194,128851,128853],{"className":126610,"code":128852,"language":126612,"meta":27,"style":27},"\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",[200,128854,128855,128860,128866,128880,128884,128889,128895,128911,128915,128920,128926,128940],{"__ignoreMap":27},[203,128856,128857],{"class":205,"line":206},[203,128858,128859],{"class":272},"\u002F* 方位名词 *\u002F\n",[203,128861,128862,128864],{"class":205,"line":124},[203,128863,51669],{"class":51358},[203,128865,15662],{"class":213},[203,128867,128868,128871,128873,128875,128878],{"class":205,"line":1269},[203,128869,128870],{"class":262},"  background-position",[203,128872,51495],{"class":213},[203,128874,51650],{"class":262},[203,128876,128877],{"class":262}," top",[203,128879,1380],{"class":213},[203,128881,128882],{"class":205,"line":1284},[203,128883,1654],{"class":213},[203,128885,128886],{"class":205,"line":1290},[203,128887,128888],{"class":272},"\u002F* 精确单位 *\u002F\n",[203,128890,128891,128893],{"class":205,"line":1304},[203,128892,51669],{"class":51358},[203,128894,15662],{"class":213},[203,128896,128897,128899,128901,128903,128905,128907,128909],{"class":205,"line":1310},[203,128898,128870],{"class":262},[203,128900,51495],{"class":213},[203,128902,914],{"class":262},[203,128904,51550],{"class":209},[203,128906,57562],{"class":262},[203,128908,51550],{"class":209},[203,128910,1380],{"class":213},[203,128912,128913],{"class":205,"line":1401},[203,128914,1654],{"class":213},[203,128916,128917],{"class":205,"line":1407},[203,128918,128919],{"class":272},"\u002F* 混合单位 *\u002F\n",[203,128921,128922,128924],{"class":205,"line":1419},[203,128923,51669],{"class":51358},[203,128925,15662],{"class":213},[203,128927,128928,128930,128932,128934,128936,128938],{"class":205,"line":1701},[203,128929,128870],{"class":262},[203,128931,51495],{"class":213},[203,128933,914],{"class":262},[203,128935,51550],{"class":209},[203,128937,17234],{"class":262},[203,128939,1380],{"class":213},[203,128941,128942],{"class":205,"line":1706},[203,128943,1654],{"class":213},[19,128945,128946],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[351,128948,128949,128957],{},[354,128950,128951],{},[357,128952,128953,128955],{},[360,128954,128723],{"align":23827},[360,128956,25927],{"align":23827},[398,128958,128959,128966],{},[357,128960,128961,128963],{},[403,128962,52026],{"align":23827},[403,128964,128965],{"align":23827},"百分数|由浮点数和单位标识符组成的长度值",[357,128967,128968,128971],{},[403,128969,128970],{"align":23827},"position",[403,128972,128973],{"align":23827},"top|center|bottom|left|center|right 方位名词",[19,128975,128976],{},"其他说明：",[19,128978,128979],{},"①参数是方位名词",[19,128981,128982],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,128984,128985],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,128987,128988],{},"②参数是精确单位",[19,128990,128991],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,128993,128994],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,128996,128997],{},"③参数是混合单位",[19,128999,129000],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[174,129002,129004],{"id":129003},"_825-背景图片固定","8.2.5 背景图片固定",[194,129006,129008],{"className":126610,"code":129007,"language":126612,"meta":27,"style":27},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[200,129009,129010,129015,129021,129033,129037,129042,129048,129058],{"__ignoreMap":27},[203,129011,129012],{"class":205,"line":206},[203,129013,129014],{"class":272},"\u002F* 背景滚动（默认） *\u002F\n",[203,129016,129017,129019],{"class":205,"line":124},[203,129018,51669],{"class":51358},[203,129020,15662],{"class":213},[203,129022,129023,129026,129028,129031],{"class":205,"line":1269},[203,129024,129025],{"class":262},"  background-attachment",[203,129027,51495],{"class":213},[203,129029,129030],{"class":262},"scroll",[203,129032,1380],{"class":213},[203,129034,129035],{"class":205,"line":1284},[203,129036,1654],{"class":213},[203,129038,129039],{"class":205,"line":1290},[203,129040,129041],{"class":272},"\u002F* 背景固定 *\u002F\n",[203,129043,129044,129046],{"class":205,"line":1304},[203,129045,51669],{"class":51358},[203,129047,15662],{"class":213},[203,129049,129050,129052,129054,129056],{"class":205,"line":1310},[203,129051,129025],{"class":262},[203,129053,51495],{"class":213},[203,129055,86291],{"class":262},[203,129057,1380],{"class":213},[203,129059,129060],{"class":205,"line":1401},[203,129061,1654],{"class":213},[351,129063,129064,129073],{},[354,129065,129066],{},[357,129067,129068,129071],{},[360,129069,129070],{"align":23827},"参数",[360,129072,102754],{"align":23827},[398,129074,129075,129082],{},[357,129076,129077,129079],{},[403,129078,129030],{"align":23827},[403,129080,129081],{"align":23827},"背景图像是随对象内容滚动",[357,129083,129084,129086],{},[403,129085,86291],{"align":23827},[403,129087,129088],{"align":23827},"背景图像固定",[174,129090,129092],{"id":129091},"_826-背景样式合写","8.2.6 背景样式合写",[194,129094,129096],{"className":126610,"code":129095,"language":126612,"meta":27,"style":27},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[200,129097,129098,129103,129109,129137],{"__ignoreMap":27},[203,129099,129100],{"class":205,"line":206},[203,129101,129102],{"class":272},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[203,129104,129105,129107],{"class":205,"line":124},[203,129106,51669],{"class":51358},[203,129108,15662],{"class":213},[203,129110,129111,129113,129115,129117,129120,129122,129124,129126,129128,129131,129133,129135],{"class":205,"line":1269},[203,129112,70669],{"class":262},[203,129114,51495],{"class":213},[203,129116,60900],{"class":262},[203,129118,129119],{"class":262}," url",[203,129121,214],{"class":213},[203,129123,128708],{"class":5306},[203,129125,13804],{"class":213},[203,129127,61794],{"class":262},[203,129129,129130],{"class":262}," fixed",[203,129132,17234],{"class":262},[203,129134,128877],{"class":262},[203,129136,1380],{"class":213},[203,129138,129139],{"class":205,"line":1284},[203,129140,1654],{"class":213},[174,129142,129144],{"id":129143},"_827-背景色半透明","8.2.7 背景色半透明",[194,129146,129148],{"className":126610,"code":129147,"language":126612,"meta":27,"style":27},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[200,129149,129150,129156,129182],{"__ignoreMap":27},[203,129151,129152,129154],{"class":205,"line":206},[203,129153,51669],{"class":51358},[203,129155,15662],{"class":213},[203,129157,129158,129160,129162,129164,129166,129168,129170,129172,129174,129176,129178,129180],{"class":205,"line":124},[203,129159,70669],{"class":262},[203,129161,51495],{"class":213},[203,129163,55168],{"class":262},[203,129165,214],{"class":213},[203,129167,405],{"class":262},[203,129169,12525],{"class":213},[203,129171,405],{"class":262},[203,129173,12525],{"class":213},[203,129175,405],{"class":262},[203,129177,12525],{"class":213},[203,129179,100579],{"class":262},[203,129181,2808],{"class":213},[203,129183,129184],{"class":205,"line":1269},[203,129185,1654],{"class":213},[19,129187,99454],{},[19,129189,129190],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129192,129193],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129195,129196],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129198,129199],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[174,129201,129203],{"id":129202},"_828-总结","8.2.8 总结",[351,129205,129206,129217],{},[354,129207,129208],{},[357,129209,129210,129213,129215],{},[360,129211,129212],{"align":23827},"属性",[360,129214,102754],{"align":23827},[360,129216,366],{"align":23827},[398,129218,129219,129230,129241,129252,129263,129274,129285],{},[357,129220,129221,129224,129227],{},[403,129222,129223],{"align":23827},"background-color",[403,129225,129226],{"align":23827},"背景颜色",[403,129228,129229],{"align":23827},"预定义的颜色值\u002F十六进制\u002FRGB代码",[357,129231,129232,129235,129238],{},[403,129233,129234],{"align":23827},"background-image",[403,129236,129237],{"align":23827},"背景图片",[403,129239,129240],{"align":23827},"url(图片路径)",[357,129242,129243,129246,129249],{},[403,129244,129245],{"align":23827},"background-repeat",[403,129247,129248],{"align":23827},"是否平铺",[403,129250,129251],{"align":23827},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[357,129253,129254,129257,129260],{},[403,129255,129256],{"align":23827},"background-position",[403,129258,129259],{"align":23827},"背景位置",[403,129261,129262],{"align":23827},"length\u002Fposition 分别是x和y坐标",[357,129264,129265,129268,129271],{},[403,129266,129267],{"align":23827},"background-attachment",[403,129269,129270],{"align":23827},"背景附着",[403,129272,129273],{"align":23827},"scroll(背景滚动) \u002Ffixed (背景固定)",[357,129275,129276,129279,129282],{},[403,129277,129278],{"align":23827},"背景简写",[403,129280,129281],{"align":23827},"书写更简单",[403,129283,129284],{"align":23827},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[357,129286,129287,129290,129293],{},[403,129288,129289],{"align":23827},"背景半透明",[403,129291,129292],{"align":23827},"背景颜色半透明",[403,129294,129295],{"align":23827},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129297,129298],{},"颜色渐变：",[25,129300],{"style":126466,"src":129301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[25,129303],{"style":126466,"src":129304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[174,129306,129308],{"id":129307},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[194,129310,129312],{"className":127357,"code":129311,"language":127359,"meta":27,"style":27},"\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",[200,129313,129314,129329,129348,129367,129386,129405,129424],{"__ignoreMap":27},[203,129315,129316,129318,129320,129322,129324,129327],{"class":205,"line":206},[203,129317,1124],{"class":213},[203,129319,51669],{"class":51358},[203,129321,53544],{"class":2052},[203,129323,259],{"class":213},[203,129325,129326],{"class":318},"\"nav\"",[203,129328,51365],{"class":213},[203,129330,129331,129333,129335,129337,129339,129341,129344,129346],{"class":205,"line":124},[203,129332,52202],{"class":213},[203,129334,452],{"class":51358},[203,129336,61115],{"class":2052},[203,129338,259],{"class":213},[203,129340,61120],{"class":318},[203,129342,129343],{"class":213},">五彩导航1\u003C\u002F",[203,129345,452],{"class":51358},[203,129347,51365],{"class":213},[203,129349,129350,129352,129354,129356,129358,129360,129363,129365],{"class":205,"line":1269},[203,129351,52202],{"class":213},[203,129353,452],{"class":51358},[203,129355,61115],{"class":2052},[203,129357,259],{"class":213},[203,129359,61120],{"class":318},[203,129361,129362],{"class":213},">五彩导航2\u003C\u002F",[203,129364,452],{"class":51358},[203,129366,51365],{"class":213},[203,129368,129369,129371,129373,129375,129377,129379,129382,129384],{"class":205,"line":1284},[203,129370,52202],{"class":213},[203,129372,452],{"class":51358},[203,129374,61115],{"class":2052},[203,129376,259],{"class":213},[203,129378,61120],{"class":318},[203,129380,129381],{"class":213},">五彩导航3\u003C\u002F",[203,129383,452],{"class":51358},[203,129385,51365],{"class":213},[203,129387,129388,129390,129392,129394,129396,129398,129401,129403],{"class":205,"line":1290},[203,129389,52202],{"class":213},[203,129391,452],{"class":51358},[203,129393,61115],{"class":2052},[203,129395,259],{"class":213},[203,129397,61120],{"class":318},[203,129399,129400],{"class":213},">五彩导航4\u003C\u002F",[203,129402,452],{"class":51358},[203,129404,51365],{"class":213},[203,129406,129407,129409,129411,129413,129415,129417,129420,129422],{"class":205,"line":1304},[203,129408,52202],{"class":213},[203,129410,452],{"class":51358},[203,129412,61115],{"class":2052},[203,129414,259],{"class":213},[203,129416,61120],{"class":318},[203,129418,129419],{"class":213},">五彩导航5\u003C\u002F",[203,129421,452],{"class":51358},[203,129423,51365],{"class":213},[203,129425,129426,129428,129430],{"class":205,"line":1310},[203,129427,51843],{"class":213},[203,129429,51669],{"class":51358},[203,129431,51365],{"class":213},[194,129433,129435],{"className":126610,"code":129434,"language":126612,"meta":27,"style":27},".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",[200,129436,129437,129446,129456,129468,129480,129490,129502,129512,129516,129541,129564,129587,129610],{"__ignoreMap":27},[203,129438,129439,129442,129444],{"class":205,"line":206},[203,129440,129441],{"class":2052},".nav",[203,129443,1488],{"class":51358},[203,129445,15662],{"class":213},[203,129447,129448,129450,129452,129454],{"class":205,"line":124},[203,129449,128226],{"class":262},[203,129451,51495],{"class":213},[203,129453,72441],{"class":262},[203,129455,1380],{"class":213},[203,129457,129458,129460,129462,129464,129466],{"class":205,"line":1269},[203,129459,70626],{"class":262},[203,129461,51495],{"class":213},[203,129463,1031],{"class":262},[203,129465,51550],{"class":209},[203,129467,1380],{"class":213},[203,129469,129470,129472,129474,129476,129478],{"class":205,"line":1284},[203,129471,70846],{"class":262},[203,129473,51495],{"class":213},[203,129475,1070],{"class":262},[203,129477,51550],{"class":209},[203,129479,1380],{"class":213},[203,129481,129482,129484,129486,129488],{"class":205,"line":1290},[203,129483,70584],{"class":262},[203,129485,51495],{"class":213},[203,129487,51650],{"class":262},[203,129489,1380],{"class":213},[203,129491,129492,129494,129496,129498,129500],{"class":205,"line":1304},[203,129493,127294],{"class":262},[203,129495,51495],{"class":213},[203,129497,1070],{"class":262},[203,129499,51550],{"class":209},[203,129501,1380],{"class":213},[203,129503,129504,129506,129508,129510],{"class":205,"line":1310},[203,129505,70963],{"class":262},[203,129507,51495],{"class":213},[203,129509,60900],{"class":262},[203,129511,1380],{"class":213},[203,129513,129514],{"class":205,"line":1401},[203,129515,1654],{"class":213},[203,129517,129518,129520,129522,129525,129527,129529,129532,129534,129536,129538],{"class":205,"line":1407},[203,129519,129441],{"class":2052},[203,129521,1488],{"class":51358},[203,129523,129524],{"class":2052},":nth-child",[203,129526,214],{"class":213},[203,129528,431],{"class":262},[203,129530,129531],{"class":213},") { ",[203,129533,129223],{"class":262},[203,129535,51495],{"class":213},[203,129537,128641],{"class":262},[203,129539,129540],{"class":213},"; }\n",[203,129542,129543,129545,129547,129549,129551,129553,129555,129557,129559,129562],{"class":205,"line":1419},[203,129544,129441],{"class":2052},[203,129546,1488],{"class":51358},[203,129548,129524],{"class":2052},[203,129550,214],{"class":213},[203,129552,291],{"class":262},[203,129554,129531],{"class":213},[203,129556,129223],{"class":262},[203,129558,51495],{"class":213},[203,129560,129561],{"class":262},"#ff0000",[203,129563,129540],{"class":213},[203,129565,129566,129568,129570,129572,129574,129576,129578,129580,129582,129585],{"class":205,"line":1701},[203,129567,129441],{"class":2052},[203,129569,1488],{"class":51358},[203,129571,129524],{"class":2052},[203,129573,214],{"class":213},[203,129575,285],{"class":262},[203,129577,129531],{"class":213},[203,129579,129223],{"class":262},[203,129581,51495],{"class":213},[203,129583,129584],{"class":262},"#00a4ff",[203,129586,129540],{"class":213},[203,129588,129589,129591,129593,129595,129597,129599,129601,129603,129605,129608],{"class":205,"line":1706},[203,129590,129441],{"class":2052},[203,129592,1488],{"class":51358},[203,129594,129524],{"class":2052},[203,129596,214],{"class":213},[203,129598,507],{"class":262},[203,129600,129531],{"class":213},[203,129602,129223],{"class":262},[203,129604,51495],{"class":213},[203,129606,129607],{"class":262},"#ff00ff",[203,129609,129540],{"class":213},[203,129611,129612,129614,129616,129618,129620,129622,129624,129626,129628,129631],{"class":205,"line":1712},[203,129613,129441],{"class":2052},[203,129615,1488],{"class":51358},[203,129617,129524],{"class":2052},[203,129619,214],{"class":213},[203,129621,533],{"class":262},[203,129623,129531],{"class":213},[203,129625,129223],{"class":262},[203,129627,51495],{"class":213},[203,129629,129630],{"class":262},"#00ff00",[203,129632,129540],{"class":213},[14,129634,129636],{"id":129635},"_83-css三大特性","8.3 css三大特性",[174,129638,129640],{"id":129639},"_831-层叠性","8.3.1 层叠性",[19,129642,129643],{},"为了解决样式冲突问题",[19,129645,129646],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,129648,129649],{},"   ②样式不冲突，不会层叠",[174,129651,129653],{"id":129652},"_832-继承性","8.3.2 继承性",[19,129655,129656],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,129658,129659],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[194,129661,129663],{"className":126610,"code":129662,"language":126612,"meta":27,"style":27},"p {\n  color: #333;\n}\n",[200,129664,129665,129671,129681],{"__ignoreMap":27},[203,129666,129667,129669],{"class":205,"line":206},[203,129668,19],{"class":51358},[203,129670,15662],{"class":213},[203,129672,129673,129675,129677,129679],{"class":205,"line":124},[203,129674,70963],{"class":262},[203,129676,51495],{"class":213},[203,129678,62427],{"class":262},[203,129680,1380],{"class":213},[203,129682,129683],{"class":205,"line":1269},[203,129684,1654],{"class":213},[25,129686],{"style":126466,"src":129687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,129689,129690],{},"解释：①行高可以跟单位也可以不跟单位",[19,129692,129693],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,129695,129696],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,129698,129699],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[174,129701,129703],{"id":129702},"_833-优先级","8.3.3 优先级",[157,129705,129706,129709],{},[160,129707,129708],{},"选择器相同，则执行层叠性",[160,129710,129711],{},"选择器不同，则根据选择器权重执行",[351,129713,129714,129724],{},[354,129715,129716],{},[357,129717,129718,129721],{},[360,129719,129720],{"align":23827},"选择器",[360,129722,129723],{"align":23827},"选择器权重",[398,129725,129726,129734,129742,129750,129758,129766],{},[357,129727,129728,129731],{},[403,129729,129730],{"align":23827},"继承 或者*",[403,129732,129733],{"align":23827},"0，0，0，0",[357,129735,129736,129739],{},[403,129737,129738],{"align":23827},"标签选择器",[403,129740,129741],{"align":23827},"0，0，0，1",[357,129743,129744,129747],{},[403,129745,129746],{"align":23827},"类选择器，伪类选择器",[403,129748,129749],{"align":23827},"0，0，1，0",[357,129751,129752,129755],{},[403,129753,129754],{"align":23827},"ID选择器",[403,129756,129757],{"align":23827},"0，1，0，0",[357,129759,129760,129763],{},[403,129761,129762],{"align":23827},"行内样式",[403,129764,129765],{"align":23827},"1，0，0，0",[357,129767,129768,129771],{},[403,129769,129770],{"align":23827},"！important",[403,129772,129773],{"align":23827},"无穷大",[19,129775,129776],{},"! important用法：",[194,129778,129780],{"className":126610,"code":129779,"language":126612,"meta":27,"style":27},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[200,129781,129782,129787,129793,129806,129810,129815,129821,129831],{"__ignoreMap":27},[203,129783,129784],{"class":205,"line":206},[203,129785,129786],{"class":272},"\u002F* !important 拥有最高优先级 *\u002F\n",[203,129788,129789,129791],{"class":205,"line":124},[203,129790,51669],{"class":51358},[203,129792,15662],{"class":213},[203,129794,129795,129797,129799,129801,129804],{"class":205,"line":1269},[203,129796,70963],{"class":262},[203,129798,51495],{"class":213},[203,129800,51703],{"class":262},[203,129802,129803],{"class":209}," !important",[203,129805,1380],{"class":213},[203,129807,129808],{"class":205,"line":1284},[203,129809,1654],{"class":213},[203,129811,129812],{"class":205,"line":1290},[203,129813,129814],{"class":272},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[203,129816,129817,129819],{"class":205,"line":1304},[203,129818,51669],{"class":51358},[203,129820,15662],{"class":213},[203,129822,129823,129825,129827,129829],{"class":205,"line":1310},[203,129824,70963],{"class":262},[203,129826,51495],{"class":213},[203,129828,57479],{"class":262},[203,129830,1380],{"class":213},[203,129832,129833],{"class":205,"line":1401},[203,129834,1654],{"class":213},[19,129836,129837],{},"优先级注意点：",[19,129839,129840],{},"①权重是有4组数字组成,但是不会有进位",[19,129842,129843],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,129845,129846],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,129848,129849],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,129851,129852],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,129854,129855],{},"⑥复合选择器",[351,129857,129858,129868],{},[354,129859,129860],{},[357,129861,129862,129865],{},[360,129863,129864],{"align":23827},"div ul li",[360,129866,129867],{"align":23827},"0,0,0,3",[398,129869,129870,129878,129886],{},[357,129871,129872,129875],{},[403,129873,129874],{"align":23827},".nav ul li",[403,129876,129877],{"align":23827},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[357,129879,129880,129883],{},[403,129881,129882],{"align":23827},"a:hover",[403,129884,129885],{"align":23827},"0,0,1,1",[357,129887,129888,129891],{},[403,129889,129890],{"align":23827},".nav a",[403,129892,129885],{"align":23827},[5216,129894,129895],{},"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":27,"searchDepth":124,"depth":124,"links":129897},[129898,129906,129917],{"id":128006,"depth":124,"text":128007,"children":129899},[129900,129901,129902,129903,129904,129905],{"id":128019,"depth":1269,"text":128020},{"id":128091,"depth":1269,"text":128092},{"id":128163,"depth":1269,"text":128164},{"id":128194,"depth":1269,"text":128195},{"id":128201,"depth":1269,"text":128202},{"id":128354,"depth":1269,"text":128355},{"id":128662,"depth":124,"text":128663,"children":129907},[129908,129909,129910,129911,129912,129913,129914,129915,129916],{"id":128669,"depth":1269,"text":128670},{"id":128679,"depth":1269,"text":128680},{"id":128775,"depth":1269,"text":128776},{"id":128848,"depth":1269,"text":128849},{"id":129003,"depth":1269,"text":129004},{"id":129091,"depth":1269,"text":129092},{"id":129143,"depth":1269,"text":129144},{"id":129202,"depth":1269,"text":129203},{"id":129307,"depth":1269,"text":129308},{"id":129635,"depth":124,"text":129636,"children":129918},[129919,129920,129921],{"id":129639,"depth":1269,"text":129640},{"id":129652,"depth":1269,"text":129653},{"id":129702,"depth":1269,"text":129703},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127998,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129928,"title":129929,"body":129930,"description":23467,"extension":129,"meta":131520,"navigation":131,"path":131521,"seo":131522,"stem":131523,"__hash__":131524},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129931,"toc":131499},[129932,129935,129939,129942,129945,129948,129951,129954,129957,129960,129964,129972,130009,130045,130048,130062,130067,130101,130104,130197,130202,130205,130235,130238,130243,130251,130255,130262,130308,130352,130357,130360,130363,130366,130369,130372,130375,130377,130380,130384,130389,130433,130438,130441,130444,130481,130486,130489,130492,130495,130498,130530,130533,130536,130539,130571,130574,130577,130580,130584,130587,130619,130622,130626,130646,130649,130657,130660,130664,130669,130672,130704,130709,130712,130750,130754,130759,130762,130765,130796,130799,130816,130821,130873,130933,130938,130992,131030,131034,131038,131041,131045,131053,131056,131058,131069,131074,131122,131156,131159,131162,131165,131168,131212,131215,131218,131221,131224,131227,131230,131274,131277,131280,131283,131286,131289,131292,131298,131301,131345,131348,131351,131354,131357,131360,131404,131407,131409,131412,131416,131420,131458,131462,131465,131468,131472,131480,131484,131487,131490,131493,131496],[10,129933,129929],{"id":129934},"_9-css盒模型浮动与切图",[14,129936,129938],{"id":129937},"_91-盒子模型","9.1 盒子模型",[19,129940,129941],{},"利用盒子来设计网页",[19,129943,129944],{},"盒子包含：边框、外边距、内边距、实际内容",[19,129946,129947],{},"网页布局设置：",[19,129949,129950],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,129952,129953],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,129955,129956],{},"③往盒子里装内容",[25,129958],{"style":126466,"src":129959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[174,129961,129963],{"id":129962},"_911-边框border","9.1.1 边框（border）",[157,129965,129966,129969],{},[160,129967,129968],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[160,129970,129971],{},"语法",[194,129973,129975],{"className":126610,"code":129974,"language":126612,"meta":27,"style":27},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[200,129976,129977,129982,129988,130005],{"__ignoreMap":27},[203,129978,129979],{"class":205,"line":206},[203,129980,129981],{"class":272},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[203,129983,129984,129986],{"class":205,"line":124},[203,129985,51669],{"class":51358},[203,129987,15662],{"class":213},[203,129989,129990,129992,129994,129996,129998,130000,130003],{"class":205,"line":1269},[203,129991,70954],{"class":262},[203,129993,51495],{"class":213},[203,129995,431],{"class":262},[203,129997,51550],{"class":209},[203,129999,51579],{"class":262},[203,130001,130002],{"class":262}," #ccc",[203,130004,1380],{"class":213},[203,130006,130007],{"class":205,"line":1284},[203,130008,1654],{"class":213},[351,130010,130011,130019],{},[354,130012,130013],{},[357,130014,130015,130017],{},[360,130016,129212],{"align":23827},[360,130018,102754],{"align":23827},[398,130020,130021,130029,130037],{},[357,130022,130023,130026],{},[403,130024,130025],{"align":23827},"border-width",[403,130027,130028],{"align":23827},"定义边框粗细，单位是px",[357,130030,130031,130034],{},[403,130032,130033],{"align":23827},"border-style",[403,130035,130036],{"align":23827},"边框的样式",[357,130038,130039,130042],{},[403,130040,130041],{"align":23827},"border-color",[403,130043,130044],{"align":23827},"边框的颜色",[19,130046,130047],{},"边框样式 border-style 可以设置如下值：",[1221,130049,130050,130053,130056,130059],{},[160,130051,130052],{},"none：没有边框即忽略所有边框的宽度（默认值）",[160,130054,130055],{},"solid：边框为单实线(最为常用的)",[160,130057,130058],{},"dashed：边框为虚线",[160,130060,130061],{},"dotted：边框为点线",[157,130063,130064],{"start":1269},[160,130065,130066],{},"边框的合写分写",[194,130068,130069],{"className":126610,"code":129974,"language":126612,"meta":27,"style":27},[200,130070,130071,130075,130081,130097],{"__ignoreMap":27},[203,130072,130073],{"class":205,"line":206},[203,130074,129981],{"class":272},[203,130076,130077,130079],{"class":205,"line":124},[203,130078,51669],{"class":51358},[203,130080,15662],{"class":213},[203,130082,130083,130085,130087,130089,130091,130093,130095],{"class":205,"line":1269},[203,130084,70954],{"class":262},[203,130086,51495],{"class":213},[203,130088,431],{"class":262},[203,130090,51550],{"class":209},[203,130092,51579],{"class":262},[203,130094,130002],{"class":262},[203,130096,1380],{"class":213},[203,130098,130099],{"class":205,"line":1284},[203,130100,1654],{"class":213},[19,130102,130103],{},"边框分开写法：",[194,130105,130107],{"className":126610,"code":130106,"language":126612,"meta":27,"style":27},"\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",[200,130108,130109,130114,130120,130138,130156,130175,130193],{"__ignoreMap":27},[203,130110,130111],{"class":205,"line":206},[203,130112,130113],{"class":272},"\u002F* 边框分开写法 *\u002F\n",[203,130115,130116,130118],{"class":205,"line":124},[203,130117,51669],{"class":51358},[203,130119,15662],{"class":213},[203,130121,130122,130125,130127,130129,130131,130133,130136],{"class":205,"line":1269},[203,130123,130124],{"class":262},"  border-top",[203,130126,51495],{"class":213},[203,130128,431],{"class":262},[203,130130,51550],{"class":209},[203,130132,51579],{"class":262},[203,130134,130135],{"class":262}," #000",[203,130137,1380],{"class":213},[203,130139,130140,130143,130145,130147,130149,130151,130154],{"class":205,"line":1284},[203,130141,130142],{"class":262},"  border-right",[203,130144,51495],{"class":213},[203,130146,291],{"class":262},[203,130148,51550],{"class":209},[203,130150,62299],{"class":262},[203,130152,130153],{"class":262}," #333",[203,130155,1380],{"class":213},[203,130157,130158,130161,130163,130165,130167,130170,130173],{"class":205,"line":1290},[203,130159,130160],{"class":262},"  border-bottom",[203,130162,51495],{"class":213},[203,130164,285],{"class":262},[203,130166,51550],{"class":209},[203,130168,130169],{"class":262}," dotted",[203,130171,130172],{"class":262}," #666",[203,130174,1380],{"class":213},[203,130176,130177,130180,130182,130184,130186,130188,130191],{"class":205,"line":1304},[203,130178,130179],{"class":262},"  border-left",[203,130181,51495],{"class":213},[203,130183,431],{"class":262},[203,130185,51550],{"class":209},[203,130187,51579],{"class":262},[203,130189,130190],{"class":262}," #999",[203,130192,1380],{"class":213},[203,130194,130195],{"class":205,"line":1310},[203,130196,1654],{"class":213},[157,130198,130199],{"start":1284},[160,130200,130201],{},"表格的细线边框",[19,130203,130204],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[194,130206,130208],{"className":126610,"code":130207,"language":126612,"meta":27,"style":27},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[200,130209,130210,130215,130221,130231],{"__ignoreMap":27},[203,130211,130212],{"class":205,"line":206},[203,130213,130214],{"class":272},"\u002F* 表格细线边框合并 *\u002F\n",[203,130216,130217,130219],{"class":205,"line":124},[203,130218,351],{"class":51358},[203,130220,15662],{"class":213},[203,130222,130223,130225,130227,130229],{"class":205,"line":1269},[203,130224,70636],{"class":262},[203,130226,51495],{"class":213},[203,130228,65093],{"class":262},[203,130230,1380],{"class":213},[203,130232,130233],{"class":205,"line":1284},[203,130234,1654],{"class":213},[19,130236,130237],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[157,130239,130240],{"start":1290},[160,130241,130242],{},"解决边框额外增加盒子的实际大小的方法：",[1221,130244,130245,130248],{},[160,130246,130247],{},"测量盒子大小的时候,不量边框",[160,130249,130250],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[174,130252,130254],{"id":130253},"_912-内边距","9.1.2 内边距",[157,130256,130257,130260],{},[160,130258,130259],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[160,130261,129971],{},[351,130263,130264,130274],{},[354,130265,130266],{},[357,130267,130268,130271],{},[360,130269,130270],{"align":23827},"值的个数",[360,130272,130273],{"align":23827},"表达意思",[398,130275,130276,130284,130292,130300],{},[357,130277,130278,130281],{},[403,130279,130280],{"align":23827},"padding: 5px;",[403,130282,130283],{"align":23827},"1个值，代表上下左右都有5个元素",[357,130285,130286,130289],{},[403,130287,130288],{"align":23827},"padding: 5px 10px;",[403,130290,130291],{"align":23827},"2个值，代表上下内边距为5像素，左右内边距为10像素",[357,130293,130294,130297],{},[403,130295,130296],{"align":23827},"padding: 5px 10px 20px;",[403,130298,130299],{"align":23827},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[357,130301,130302,130305],{},[403,130303,130304],{"align":23827},"padding: 5px 10px 20px 30px;",[403,130306,130307],{"align":23827},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[351,130309,130310,130318],{},[354,130311,130312],{},[357,130313,130314,130316],{},[360,130315,129212],{"align":23827},[360,130317,102754],{"align":23827},[398,130319,130320,130328,130336,130344],{},[357,130321,130322,130325],{},[403,130323,130324],{"align":23827},"padding-left",[403,130326,130327],{"align":23827},"左内边距",[357,130329,130330,130333],{},[403,130331,130332],{"align":23827},"padding-right",[403,130334,130335],{"align":23827},"右内边距",[357,130337,130338,130341],{},[403,130339,130340],{"align":23827},"padding-top",[403,130342,130343],{"align":23827},"上内边距",[357,130345,130346,130349],{},[403,130347,130348],{"align":23827},"padding-bottom",[403,130350,130351],{"align":23827},"下内边距",[157,130353,130354],{"start":1269},[160,130355,130356],{},"内边距会影响盒子的实际大小",[19,130358,130359],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130361,130362],{},"①内容和边框有了距离，添加了内边距",[19,130364,130365],{},"②padding影响了盒子实际大小",[19,130367,130368],{},"内边距对盒子大小的影响：",[19,130370,130371],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130373,130374],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130376,95278],{},[19,130378,130379],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[174,130381,130383],{"id":130382},"_913-外边距","9.1.3 外边距",[157,130385,130386],{},[160,130387,130388],{},"控制盒子与盒子之间的距离",[351,130390,130391,130399],{},[354,130392,130393],{},[357,130394,130395,130397],{},[360,130396,129212],{"align":23827},[360,130398,102754],{"align":23827},[398,130400,130401,130409,130417,130425],{},[357,130402,130403,130406],{},[403,130404,130405],{"align":23827},"margin-left",[403,130407,130408],{"align":23827},"左外边距",[357,130410,130411,130414],{},[403,130412,130413],{"align":23827},"margin-right",[403,130415,130416],{"align":23827},"右外边距",[357,130418,130419,130422],{},[403,130420,130421],{"align":23827},"margin-top",[403,130423,130424],{"align":23827},"上外边距",[357,130426,130427,130430],{},[403,130428,130429],{"align":23827},"margin-bottom",[403,130431,130432],{"align":23827},"下外边距",[157,130434,130435],{"start":124},[160,130436,130437],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130439,130440],{},"①盒子必须指定了宽度（width）",[19,130442,130443],{},"②盒子左右的外边距都设置为 auto",[194,130445,130447],{"className":126610,"code":130446,"language":126612,"meta":27,"style":27},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[200,130448,130449,130454,130461,130477],{"__ignoreMap":27},[203,130450,130451],{"class":205,"line":206},[203,130452,130453],{"class":272},"\u002F* margin 复合写法（同上） *\u002F\n",[203,130455,130456,130459],{"class":205,"line":124},[203,130457,130458],{"class":2052},".box",[203,130460,15662],{"class":213},[203,130462,130463,130465,130467,130469,130471,130474],{"class":205,"line":1269},[203,130464,70528],{"class":262},[203,130466,51495],{"class":213},[203,130468,405],{"class":262},[203,130470,51614],{"class":262},[203,130472,130473],{"class":213},";  ",[203,130475,130476],{"class":272},"\u002F* 块级盒子水平居中 *\u002F\n",[203,130478,130479],{"class":205,"line":1284},[203,130480,1654],{"class":213},[157,130482,130483],{"start":1269},[160,130484,130485],{},"外边距塌陷问题",[19,130487,130488],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[25,130490],{"style":126466,"src":130491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130493,130494],{},"解决方案：",[19,130496,130497],{},"①可以为父亲元素定义上边距",[194,130499,130500],{"className":126610,"code":130446,"language":126612,"meta":27,"style":27},[200,130501,130502,130506,130512,130526],{"__ignoreMap":27},[203,130503,130504],{"class":205,"line":206},[203,130505,130453],{"class":272},[203,130507,130508,130510],{"class":205,"line":124},[203,130509,130458],{"class":2052},[203,130511,15662],{"class":213},[203,130513,130514,130516,130518,130520,130522,130524],{"class":205,"line":1269},[203,130515,70528],{"class":262},[203,130517,51495],{"class":213},[203,130519,405],{"class":262},[203,130521,51614],{"class":262},[203,130523,130473],{"class":213},[203,130525,130476],{"class":272},[203,130527,130528],{"class":205,"line":1284},[203,130529,1654],{"class":213},[19,130531,130532],{},"②可以为父亲元素定义上内边距",[19,130534,130535],{},"③可以为父亲元素添加overflow:hidden",[25,130537],{"style":126466,"src":130538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[194,130540,130541],{"className":126610,"code":130446,"language":126612,"meta":27,"style":27},[200,130542,130543,130547,130553,130567],{"__ignoreMap":27},[203,130544,130545],{"class":205,"line":206},[203,130546,130453],{"class":272},[203,130548,130549,130551],{"class":205,"line":124},[203,130550,130458],{"class":2052},[203,130552,15662],{"class":213},[203,130554,130555,130557,130559,130561,130563,130565],{"class":205,"line":1269},[203,130556,70528],{"class":262},[203,130558,51495],{"class":213},[203,130560,405],{"class":262},[203,130562,51614],{"class":262},[203,130564,130473],{"class":213},[203,130566,130476],{"class":272},[203,130568,130569],{"class":205,"line":1284},[203,130570,1654],{"class":213},[25,130572],{"style":126466,"src":130573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,130575,130576],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,130578,130579],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[174,130581,130583],{"id":130582},"_914-清除内外边距","9.1.4 清除内外边距",[19,130585,130586],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[194,130588,130589],{"className":126610,"code":130446,"language":126612,"meta":27,"style":27},[200,130590,130591,130595,130601,130615],{"__ignoreMap":27},[203,130592,130593],{"class":205,"line":206},[203,130594,130453],{"class":272},[203,130596,130597,130599],{"class":205,"line":124},[203,130598,130458],{"class":2052},[203,130600,15662],{"class":213},[203,130602,130603,130605,130607,130609,130611,130613],{"class":205,"line":1269},[203,130604,70528],{"class":262},[203,130606,51495],{"class":213},[203,130608,405],{"class":262},[203,130610,51614],{"class":262},[203,130612,130473],{"class":213},[203,130614,130476],{"class":272},[203,130616,130617],{"class":205,"line":1284},[203,130618,1654],{"class":213},[19,130620,130621],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[174,130623,130625],{"id":130624},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1221,130627,130628,130631,130634,130637,130640,130643],{},[160,130629,130630],{},"文件→打开 ：可以打开我们要测量的图片",[160,130632,130633],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[160,130635,130636],{},"右击标尺，把里面的单位改为像素",[160,130638,130639],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[160,130641,130642],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[160,130644,130645],{},"用选区拖动 可以测量大小",[25,130647],{"style":126466,"src":130648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1221,130650,130651,130654],{},[160,130652,130653],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[160,130655,130656],{},"吸管取色工具",[25,130658],{"style":126466,"src":130659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[174,130661,130663],{"id":130662},"_916-案例","9.1.6 案例",[157,130665,130666],{},[160,130667,130668],{},"小米商品",[25,130670],{"style":126466,"src":130671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[194,130673,130674],{"className":126610,"code":130446,"language":126612,"meta":27,"style":27},[200,130675,130676,130680,130686,130700],{"__ignoreMap":27},[203,130677,130678],{"class":205,"line":206},[203,130679,130453],{"class":272},[203,130681,130682,130684],{"class":205,"line":124},[203,130683,130458],{"class":2052},[203,130685,15662],{"class":213},[203,130687,130688,130690,130692,130694,130696,130698],{"class":205,"line":1269},[203,130689,70528],{"class":262},[203,130691,51495],{"class":213},[203,130693,405],{"class":262},[203,130695,51614],{"class":262},[203,130697,130473],{"class":213},[203,130699,130476],{"class":272},[203,130701,130702],{"class":205,"line":1284},[203,130703,1654],{"class":213},[157,130705,130706],{"start":124},[160,130707,130708],{},"快报模块",[25,130710],{"style":126466,"src":130711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[194,130713,130715],{"className":127357,"code":130714,"language":127359,"meta":27,"style":27},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[200,130716,130717,130722,130737,130742],{"__ignoreMap":27},[203,130718,130719],{"class":205,"line":206},[203,130720,130721],{"class":272},"\u003C!-- HTML 代码示例 -->\n",[203,130723,130724,130726,130728,130730,130732,130735],{"class":205,"line":124},[203,130725,1124],{"class":213},[203,130727,51669],{"class":51358},[203,130729,53544],{"class":2052},[203,130731,259],{"class":213},[203,130733,130734],{"class":318},"\"example\"",[203,130736,51365],{"class":213},[203,130738,130739],{"class":205,"line":1269},[203,130740,130741],{"class":213},"  示例内容\n",[203,130743,130744,130746,130748],{"class":205,"line":1284},[203,130745,51843],{"class":213},[203,130747,51669],{"class":51358},[203,130749,51365],{"class":213},[174,130751,130753],{"id":130752},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[157,130755,130756],{},[160,130757,130758],{},"圆角边框",[19,130760,130761],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[25,130763],{"style":126466,"src":130764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[194,130766,130768],{"className":126610,"code":130767,"language":126612,"meta":27,"style":27},"div {\n  border: 1px solid #ccc;\n}\n",[200,130769,130770,130776,130792],{"__ignoreMap":27},[203,130771,130772,130774],{"class":205,"line":206},[203,130773,51669],{"class":51358},[203,130775,15662],{"class":213},[203,130777,130778,130780,130782,130784,130786,130788,130790],{"class":205,"line":124},[203,130779,70954],{"class":262},[203,130781,51495],{"class":213},[203,130783,431],{"class":262},[203,130785,51550],{"class":209},[203,130787,51579],{"class":262},[203,130789,130002],{"class":262},[203,130791,1380],{"class":213},[203,130793,130794],{"class":205,"line":1269},[203,130795,1654],{"class":213},[19,130797,130798],{},"解释:",[1221,130800,130801,130804,130807,130810,130813],{},[160,130802,130803],{},"参数值可以为数值或百分比的形式",[160,130805,130806],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[160,130808,130809],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[160,130811,130812],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[160,130814,130815],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[157,130817,130818],{"start":124},[160,130819,130820],{},"盒子阴影",[194,130822,130824],{"className":126610,"code":130823,"language":126612,"meta":27,"style":27},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[200,130825,130826,130832,130869],{"__ignoreMap":27},[203,130827,130828,130830],{"class":205,"line":206},[203,130829,51669],{"class":51358},[203,130831,15662],{"class":213},[203,130833,130834,130837,130839,130841,130843,130845,130847,130849,130851,130853,130855,130857,130859,130861,130863,130865,130867],{"class":205,"line":124},[203,130835,130836],{"class":262},"  box-shadow",[203,130838,51495],{"class":213},[203,130840,405],{"class":262},[203,130842,14845],{"class":262},[203,130844,51550],{"class":209},[203,130846,2127],{"class":262},[203,130848,51550],{"class":209},[203,130850,78825],{"class":262},[203,130852,214],{"class":213},[203,130854,405],{"class":262},[203,130856,12525],{"class":213},[203,130858,405],{"class":262},[203,130860,12525],{"class":213},[203,130862,405],{"class":262},[203,130864,12525],{"class":213},[203,130866,86268],{"class":262},[203,130868,2808],{"class":213},[203,130870,130871],{"class":205,"line":1269},[203,130872,1654],{"class":213},[351,130874,130875,130883],{},[354,130876,130877],{},[357,130878,130879,130881],{},[360,130880,366],{"align":23827},[360,130882,27547],{"align":23827},[398,130884,130885,130893,130901,130909,130917,130925],{},[357,130886,130887,130890],{},[403,130888,130889],{"align":23827},"h-shadow",[403,130891,130892],{"align":23827},"必需,水平阴影的位置,允许负值",[357,130894,130895,130898],{},[403,130896,130897],{"align":23827},"v-shadow",[403,130899,130900],{"align":23827},"必需,垂直阴影的位置,允许负值",[357,130902,130903,130906],{},[403,130904,130905],{"align":23827},"blur",[403,130907,130908],{"align":23827},"可选,模糊距离,就是影子的虚实",[357,130910,130911,130914],{},[403,130912,130913],{"align":23827},"spread",[403,130915,130916],{"align":23827},"可选,阴影尺寸",[357,130918,130919,130922],{},[403,130920,130921],{"align":23827},"color",[403,130923,130924],{"align":23827},"可选,阴影的颜色",[357,130926,130927,130930],{},[403,130928,130929],{"align":23827},"inset",[403,130931,130932],{"align":23827},"可选,将外部阴影(outset)改为内部阴影",[157,130934,130935],{"start":1269},[160,130936,130937],{},"文字阴影",[194,130939,130941],{"className":126610,"code":130940,"language":126612,"meta":27,"style":27},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[200,130942,130943,130949,130988],{"__ignoreMap":27},[203,130944,130945,130947],{"class":205,"line":206},[203,130946,19],{"class":51358},[203,130948,15662],{"class":213},[203,130950,130951,130954,130956,130958,130960,130962,130964,130966,130968,130970,130972,130974,130976,130978,130980,130982,130984,130986],{"class":205,"line":124},[203,130952,130953],{"class":262},"  text-shadow",[203,130955,51495],{"class":213},[203,130957,431],{"class":262},[203,130959,51550],{"class":209},[203,130961,25176],{"class":262},[203,130963,51550],{"class":209},[203,130965,14845],{"class":262},[203,130967,51550],{"class":209},[203,130969,78825],{"class":262},[203,130971,214],{"class":213},[203,130973,405],{"class":262},[203,130975,12525],{"class":213},[203,130977,405],{"class":262},[203,130979,12525],{"class":213},[203,130981,405],{"class":262},[203,130983,12525],{"class":213},[203,130985,100579],{"class":262},[203,130987,2808],{"class":213},[203,130989,130990],{"class":205,"line":1269},[203,130991,1654],{"class":213},[351,130993,130994,131002],{},[354,130995,130996],{},[357,130997,130998,131000],{},[360,130999,366],{"align":23827},[360,131001,27547],{"align":23827},[398,131003,131004,131010,131017,131024],{},[357,131005,131006,131008],{},[403,131007,130889],{"align":23827},[403,131009,130892],{"align":23827},[357,131011,131012,131014],{},[403,131013,130897],{"align":23827},[403,131015,131016],{"align":23827},"必需,垂直阴影位置,允许负值",[357,131018,131019,131021],{},[403,131020,130905],{"align":23827},[403,131022,131023],{"align":23827},"可选,模糊的距离",[357,131025,131026,131028],{},[403,131027,130921],{"align":23827},[403,131029,130924],{"align":23827},[14,131031,131033],{"id":131032},"_92-浮动","9.2 浮动",[174,131035,131037],{"id":131036},"_921-浮动介绍","9.2.1 浮动介绍",[19,131039,131040],{},"在16.2中详细介绍",[174,131042,131044],{"id":131043},"_922-清除浮动","9.2.2 清除浮动",[157,131046,131047,131050],{},[160,131048,131049],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[160,131051,131052],{},"清除浮动的本质",[19,131054,131055],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131057,9115],{},[1221,131059,131060,131063,131066],{},[160,131061,131062],{},"如果父盒子本身有高度，则不需要清除浮动",[160,131064,131065],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[160,131067,131068],{},"父级有了高度，就不会影响下面的标准流了",[157,131070,131071],{"start":1269},[160,131072,131073],{},"清除浮动样式",[194,131075,131077],{"className":126610,"code":131076,"language":126612,"meta":27,"style":27},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[200,131078,131079,131086,131097,131101,131108,131118],{"__ignoreMap":27},[203,131080,131081,131084],{"class":205,"line":206},[203,131082,131083],{"class":2052},".left",[203,131085,15662],{"class":213},[203,131087,131088,131091,131093,131095],{"class":205,"line":124},[203,131089,131090],{"class":262},"  float",[203,131092,51495],{"class":213},[203,131094,23827],{"class":262},[203,131096,1380],{"class":213},[203,131098,131099],{"class":205,"line":1269},[203,131100,1654],{"class":213},[203,131102,131103,131106],{"class":205,"line":1284},[203,131104,131105],{"class":2052},".right",[203,131107,15662],{"class":213},[203,131109,131110,131112,131114,131116],{"class":205,"line":1290},[203,131111,131090],{"class":262},[203,131113,51495],{"class":213},[203,131115,72580],{"class":262},[203,131117,1380],{"class":213},[203,131119,131120],{"class":205,"line":1304},[203,131121,1654],{"class":213},[351,131123,131124,131132],{},[354,131125,131126],{},[357,131127,131128,131130],{},[360,131129,127074],{"align":23827},[360,131131,27547],{"align":23827},[398,131133,131134,131141,131148],{},[357,131135,131136,131138],{},[403,131137,23827],{"align":23827},[403,131139,131140],{"align":23827},"不允许左侧有浮动元素（清除左侧浮动的影响）",[357,131142,131143,131145],{},[403,131144,72580],{"align":23827},[403,131146,131147],{"align":23827},"不允许右侧有浮动元素（清除右侧浮动的影响）",[357,131149,131150,131153],{},[403,131151,131152],{"align":23827},"both",[403,131154,131155],{"align":23827},"同时清除左右侧浮动的影响",[19,131157,131158],{},"法一",[19,131160,131161],{},"额外标签法也称为隔墙法",[19,131163,131164],{},"使用方式：",[19,131166,131167],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[194,131169,131170],{"className":126610,"code":131076,"language":126612,"meta":27,"style":27},[200,131171,131172,131178,131188,131192,131198,131208],{"__ignoreMap":27},[203,131173,131174,131176],{"class":205,"line":206},[203,131175,131083],{"class":2052},[203,131177,15662],{"class":213},[203,131179,131180,131182,131184,131186],{"class":205,"line":124},[203,131181,131090],{"class":262},[203,131183,51495],{"class":213},[203,131185,23827],{"class":262},[203,131187,1380],{"class":213},[203,131189,131190],{"class":205,"line":1269},[203,131191,1654],{"class":213},[203,131193,131194,131196],{"class":205,"line":1284},[203,131195,131105],{"class":2052},[203,131197,15662],{"class":213},[203,131199,131200,131202,131204,131206],{"class":205,"line":1290},[203,131201,131090],{"class":262},[203,131203,51495],{"class":213},[203,131205,72580],{"class":262},[203,131207,1380],{"class":213},[203,131209,131210],{"class":205,"line":1304},[203,131211,1654],{"class":213},[19,131213,131214],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131216,131217],{},"优点： 通俗易懂，书写方便",[19,131219,131220],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131222,131223],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131225,131226],{},"法二",[19,131228,131229],{},"父级添加overflow属性",[194,131231,131232],{"className":126610,"code":131076,"language":126612,"meta":27,"style":27},[200,131233,131234,131240,131250,131254,131260,131270],{"__ignoreMap":27},[203,131235,131236,131238],{"class":205,"line":206},[203,131237,131083],{"class":2052},[203,131239,15662],{"class":213},[203,131241,131242,131244,131246,131248],{"class":205,"line":124},[203,131243,131090],{"class":262},[203,131245,51495],{"class":213},[203,131247,23827],{"class":262},[203,131249,1380],{"class":213},[203,131251,131252],{"class":205,"line":1269},[203,131253,1654],{"class":213},[203,131255,131256,131258],{"class":205,"line":1284},[203,131257,131105],{"class":2052},[203,131259,15662],{"class":213},[203,131261,131262,131264,131266,131268],{"class":205,"line":1290},[203,131263,131090],{"class":262},[203,131265,51495],{"class":213},[203,131267,72580],{"class":262},[203,131269,1380],{"class":213},[203,131271,131272],{"class":205,"line":1304},[203,131273,1654],{"class":213},[19,131275,131276],{},"overflow: hidden;",[19,131278,131279],{},"优点：代码简洁",[19,131281,131282],{},"缺点：无法显示溢出的部分",[19,131284,131285],{},"注意：是给父元素添加代码",[19,131287,131288],{},"法三",[19,131290,131291],{},"父级添加after伪元素",[19,131293,131294,131297],{},[131295,131296],"after",{}," 方式是额外标签法的升级版",[19,131299,131300],{},"使用的时候复制就可以",[194,131302,131303],{"className":126610,"code":131076,"language":126612,"meta":27,"style":27},[200,131304,131305,131311,131321,131325,131331,131341],{"__ignoreMap":27},[203,131306,131307,131309],{"class":205,"line":206},[203,131308,131083],{"class":2052},[203,131310,15662],{"class":213},[203,131312,131313,131315,131317,131319],{"class":205,"line":124},[203,131314,131090],{"class":262},[203,131316,51495],{"class":213},[203,131318,23827],{"class":262},[203,131320,1380],{"class":213},[203,131322,131323],{"class":205,"line":1269},[203,131324,1654],{"class":213},[203,131326,131327,131329],{"class":205,"line":1284},[203,131328,131105],{"class":2052},[203,131330,15662],{"class":213},[203,131332,131333,131335,131337,131339],{"class":205,"line":1290},[203,131334,131090],{"class":262},[203,131336,51495],{"class":213},[203,131338,72580],{"class":262},[203,131340,1380],{"class":213},[203,131342,131343],{"class":205,"line":1304},[203,131344,1654],{"class":213},[19,131346,131347],{},"优点：没有增加标签，结构更简单",[19,131349,131350],{},"缺点：照顾低版本浏览器",[19,131352,131353],{},"代表网站： 百度、淘宝网、网易等",[19,131355,131356],{},"法四",[19,131358,131359],{},"父级添加双伪元素",[194,131361,131362],{"className":126610,"code":131076,"language":126612,"meta":27,"style":27},[200,131363,131364,131370,131380,131384,131390,131400],{"__ignoreMap":27},[203,131365,131366,131368],{"class":205,"line":206},[203,131367,131083],{"class":2052},[203,131369,15662],{"class":213},[203,131371,131372,131374,131376,131378],{"class":205,"line":124},[203,131373,131090],{"class":262},[203,131375,51495],{"class":213},[203,131377,23827],{"class":262},[203,131379,1380],{"class":213},[203,131381,131382],{"class":205,"line":1269},[203,131383,1654],{"class":213},[203,131385,131386,131388],{"class":205,"line":1284},[203,131387,131105],{"class":2052},[203,131389,15662],{"class":213},[203,131391,131392,131394,131396,131398],{"class":205,"line":1290},[203,131393,131090],{"class":262},[203,131395,51495],{"class":213},[203,131397,72580],{"class":262},[203,131399,1380],{"class":213},[203,131401,131402],{"class":205,"line":1304},[203,131403,1654],{"class":213},[19,131405,131406],{},"优点：代码更简洁",[19,131408,131350],{},[19,131410,131411],{},"代表网站：小米、腾讯等",[14,131413,131415],{"id":131414},"_93-ps切图","9.3 PS切图",[174,131417,131419],{"id":131418},"_931-常见图片格式","9.3.1 常见图片格式",[351,131421,131422,131432],{},[354,131423,131424],{},[357,131425,131426,131429],{},[360,131427,131428],{"align":23827},"jpg图像格式",[360,131430,131431],{"align":23827},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[398,131433,131434,131442,131450],{},[357,131435,131436,131439],{},[403,131437,131438],{"align":23827},"gif图像格式",[403,131440,131441],{"align":23827},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[357,131443,131444,131447],{},[403,131445,131446],{"align":23827},"png图像格式",[403,131448,131449],{"align":23827},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[357,131451,131452,131455],{},[403,131453,131454],{"align":23827},"PSD图像格式",[403,131456,131457],{"align":23827},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[174,131459,131461],{"id":131460},"_932-图层切图","9.3.2 图层切图",[19,131463,131464],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131466,131467],{},"按住shift选中两个图层->图层菜单->合并图层",[174,131469,131471],{"id":131470},"_933-切片切图","9.3.3 切片切图",[1221,131473,131474,131477],{},[160,131475,131476],{},"利用切片工具手动划出",[160,131478,131479],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[174,131481,131483],{"id":131482},"_934-切图步骤","9.3.4 切图步骤",[19,131485,131486],{},"用切片工具选中：",[25,131488],{"style":126466,"src":131489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131491,131492],{},"文件 -> 导出",[25,131494],{"style":126466,"src":131495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5216,131497,131498],{},"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":27,"searchDepth":124,"depth":124,"links":131500},[131501,131510,131514],{"id":129937,"depth":124,"text":129938,"children":131502},[131503,131504,131505,131506,131507,131508,131509],{"id":129962,"depth":1269,"text":129963},{"id":130253,"depth":1269,"text":130254},{"id":130382,"depth":1269,"text":130383},{"id":130582,"depth":1269,"text":130583},{"id":130624,"depth":1269,"text":130625},{"id":130662,"depth":1269,"text":130663},{"id":130752,"depth":1269,"text":130753},{"id":131032,"depth":124,"text":131033,"children":131511},[131512,131513],{"id":131036,"depth":1269,"text":131037},{"id":131043,"depth":1269,"text":131044},{"id":131414,"depth":124,"text":131415,"children":131515},[131516,131517,131518,131519],{"id":131418,"depth":1269,"text":131419},{"id":131460,"depth":1269,"text":131461},{"id":131470,"depth":1269,"text":131471},{"id":131482,"depth":1269,"text":131483},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129929,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131526,"title":131527,"body":131528,"description":23467,"extension":129,"meta":132169,"navigation":131,"path":132170,"seo":132171,"stem":132172,"__hash__":132173},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131529,"toc":132157},[131530,131533,131537,131563,131597,131601,131605,131608,131650,131657,131667,131675,131677,131680,131683,131686,131693,131707,131711,131714,131743,131747,131750,131764,131768,131771,131799,131803,131806,131832,131836,131841,131874,131879,131907,131911,131928,131974,131979,132023,132040,132147,132155],[10,131531,131527],{"id":131532},"_10-css规范与学成在线案例",[14,131534,131536],{"id":131535},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[157,131538,131539,131545,131551,131557],{},[160,131540,131541,131544],{},[363,131542,131543],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[160,131546,131547,131550],{},[363,131548,131549],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[160,131552,131553,131556],{},[363,131554,131555],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[160,131558,131559,131562],{},[363,131560,131561],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[194,131564,131565],{"className":126610,"code":129974,"language":126612,"meta":27,"style":27},[200,131566,131567,131571,131577,131593],{"__ignoreMap":27},[203,131568,131569],{"class":205,"line":206},[203,131570,129981],{"class":272},[203,131572,131573,131575],{"class":205,"line":124},[203,131574,51669],{"class":51358},[203,131576,15662],{"class":213},[203,131578,131579,131581,131583,131585,131587,131589,131591],{"class":205,"line":1269},[203,131580,70954],{"class":262},[203,131582,51495],{"class":213},[203,131584,431],{"class":262},[203,131586,51550],{"class":209},[203,131588,51579],{"class":262},[203,131590,130002],{"class":262},[203,131592,1380],{"class":213},[203,131594,131595],{"class":205,"line":1284},[203,131596,1654],{"class":213},[14,131598,131600],{"id":131599},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[174,131602,131604],{"id":131603},"_1021-header头部制作","10.2.1 header头部制作",[25,131606],{"style":126466,"src":131607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1221,131609,131610,131617,131624,131630,131637,131644],{},[160,131611,131612,131613,131616],{},"1号是版心盒子 ",[363,131614,131615],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[160,131618,131619,131620,131623],{},"版心盒子 里面包含 2号盒子 ",[363,131621,131622],{},"logo"," 图标",[160,131625,131626,131627,131629],{},"版心盒子 里面包含 3号盒子 ",[363,131628,53771],{}," 导航栏",[160,131631,131632,131633,131636],{},"版心盒子 里面包含 4号盒子 ",[363,131634,131635],{},"search"," 搜索框",[160,131638,131639,131640,131643],{},"版心盒子 里面包含 5号盒子 ",[363,131641,131642],{},"user"," 个人信息",[160,131645,131646,131647],{},"注意，要求里面的 ",[363,131648,131649],{},"4个子盒子 必须都浮动",[157,131651,131652],{},[160,131653,131654],{},[363,131655,131656],{},"导航栏注意点:",[19,131658,131659,131660,131663,131664],{},"实际开发中， ",[363,131661,131662],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[363,131665,131666],{},"用 li 包含链接(li+a)的做法",[1221,131668,131669,131672],{},[160,131670,131671],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[160,131673,131674],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,131676,9115],{},[19,131678,131679],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,131681,131682],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,131684,131685],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[157,131687,131688],{"start":124},[160,131689,131690],{},[363,131691,131692],{},"4号盒子search的细节：",[1221,131694,131695,131698,131701],{},[160,131696,131697],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[160,131699,131700],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[160,131702,131703,131706],{},[200,131704,131705],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[174,131708,131710],{"id":131709},"_1022-banner制作","10.2.2 banner制作",[25,131712],{"style":126466,"src":131713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1221,131715,131716,131723,131729,131736],{},[160,131717,131718,131719,131722],{},"1号盒子是通栏的大盒子 ",[363,131720,131721],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[160,131724,131725,131726,131728],{},"2号盒子是版心 ",[363,131727,1009],{}," ， 要水平居中对齐",[160,131730,131731,131732,131735],{},"3号盒子版心内，左对齐 ",[363,131733,131734],{},"subnav"," 侧导航栏",[160,131737,131738,131739,131742],{},"4号盒子版心内，右对齐 ",[363,131740,131741],{},"course"," 课程",[174,131744,131746],{"id":131745},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[25,131748],{"style":126466,"src":131749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1221,131751,131752,131755,131758,131761],{},[160,131753,131754],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[160,131756,131757],{},"1号盒子是标题 H3 左侧浮动",[160,131759,131760],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[160,131762,131763],{},"3号盒子 右浮动 mod 修改",[174,131765,131767],{"id":131766},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[25,131769],{"style":126466,"src":131770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1221,131772,131773,131779,131786,131793,131796],{},[160,131774,131775,131776,131778],{},"1号盒子为最大的盒子 ",[363,131777,53772],{}," 版心水平居中对齐",[160,131780,131781,131782,131785],{},"2号盒子为上面部分 ",[363,131783,131784],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[160,131787,131788,131789,131792],{},"3号盒子为底下部分 ",[363,131790,131791],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[160,131794,131795],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[160,131797,131798],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[174,131800,131802],{"id":131801},"_1025-底部模块制作","10.2.5 底部模块制作",[25,131804],{"style":126466,"src":131805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1221,131807,131808,131815,131818,131825],{},[160,131809,131810,131811,131814],{},"1号盒子通栏大盒子 底部 ",[363,131812,131813],{},"footer"," 给高度 底色是白色",[160,131816,131817],{},"2号盒子版心水平居中",[160,131819,131820,131821,131824],{},"3号盒子版权 ",[363,131822,131823],{},"copyright"," 左对齐",[160,131826,131827,131828,131831],{},"4号盒子 链接组 ",[363,131829,131830],{},"links"," 右对齐",[174,131833,131835],{"id":131834},"_1026-代码模块","10.2.6 代码模块",[157,131837,131838],{},[160,131839,131840],{},"html部分",[194,131842,131844],{"className":127357,"code":131843,"language":127359,"meta":27,"style":27},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[200,131845,131846],{"__ignoreMap":27},[203,131847,131848,131850,131852,131854,131856,131859,131862,131864,131867,131870,131872],{"class":205,"line":206},[203,131849,1124],{"class":213},[203,131851,452],{"class":51358},[203,131853,61115],{"class":2052},[203,131855,259],{"class":213},[203,131857,131858],{"class":318},"\"https:\u002F\u002Fexample.com\"",[203,131860,131861],{"class":2052}," target",[203,131863,259],{"class":213},[203,131865,131866],{"class":318},"\"_blank\"",[203,131868,131869],{"class":213},">链接文字\u003C\u002F",[203,131871,452],{"class":51358},[203,131873,51365],{"class":213},[157,131875,131876],{"start":124},[160,131877,131878],{},"css部分",[194,131880,131881],{"className":127357,"code":131843,"language":127359,"meta":27,"style":27},[200,131882,131883],{"__ignoreMap":27},[203,131884,131885,131887,131889,131891,131893,131895,131897,131899,131901,131903,131905],{"class":205,"line":206},[203,131886,1124],{"class":213},[203,131888,452],{"class":51358},[203,131890,61115],{"class":2052},[203,131892,259],{"class":213},[203,131894,131858],{"class":318},[203,131896,131861],{"class":2052},[203,131898,259],{"class":213},[203,131900,131866],{"class":318},[203,131902,131869],{"class":213},[203,131904,452],{"class":51358},[203,131906,51365],{"class":213},[174,131908,131910],{"id":131909},"_1027-收获","10.2.7 收获",[157,131912,131913,131916,131919,131922,131925],{},[160,131914,131915],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[160,131917,131918],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[160,131920,131921],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[160,131923,131924],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[160,131926,131927],{},"遗忘代码",[194,131929,131931],{"className":126610,"code":131930,"language":126612,"meta":27,"style":27},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[200,131932,131933,131955,131960,131970],{"__ignoreMap":27},[203,131934,131935,131937,131939,131941,131943,131945,131947,131949,131951,131953],{"class":205,"line":206},[203,131936,51669],{"class":51358},[203,131938,12525],{"class":213},[203,131940,19],{"class":51358},[203,131942,12525],{"class":213},[203,131944,10],{"class":51358},[203,131946,12525],{"class":213},[203,131948,1221],{"class":51358},[203,131950,12525],{"class":213},[203,131952,160],{"class":51358},[203,131954,15662],{"class":213},[203,131956,131957],{"class":205,"line":124},[203,131958,131959],{"class":272},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[203,131961,131962,131964,131966,131968],{"class":205,"line":1269},[203,131963,128226],{"class":262},[203,131965,51495],{"class":213},[203,131967,60927],{"class":262},[203,131969,1380],{"class":213},[203,131971,131972],{"class":205,"line":1284},[203,131973,1654],{"class":213},[157,131975,131976],{"start":1304},[160,131977,131978],{},"html引css的程序",[194,131980,131981],{"className":126610,"code":131930,"language":126612,"meta":27,"style":27},[200,131982,131983,132005,132009,132019],{"__ignoreMap":27},[203,131984,131985,131987,131989,131991,131993,131995,131997,131999,132001,132003],{"class":205,"line":206},[203,131986,51669],{"class":51358},[203,131988,12525],{"class":213},[203,131990,19],{"class":51358},[203,131992,12525],{"class":213},[203,131994,10],{"class":51358},[203,131996,12525],{"class":213},[203,131998,1221],{"class":51358},[203,132000,12525],{"class":213},[203,132002,160],{"class":51358},[203,132004,15662],{"class":213},[203,132006,132007],{"class":205,"line":124},[203,132008,131959],{"class":272},[203,132010,132011,132013,132015,132017],{"class":205,"line":1269},[203,132012,128226],{"class":262},[203,132014,51495],{"class":213},[203,132016,60927],{"class":262},[203,132018,1380],{"class":213},[203,132020,132021],{"class":205,"line":1284},[203,132022,1654],{"class":213},[157,132024,132025,132028,132031,132034,132037],{"start":1310},[160,132026,132027],{},"浮动的盒子不会有外边距合并问题",[160,132029,132030],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[160,132032,132033],{},"ctrl+g快速定位行；shift+alt多个光标",[160,132035,132036],{},"学习上方各个模块的选择器起名方法，以后就这样用",[160,132038,132039],{},"在写选择器时尽量写全一些，例如",[194,132041,132043],{"className":126610,"code":132042,"language":126612,"meta":27,"style":27},"\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",[200,132044,132045,132050,132066,132071,132086,132091,132106,132111,132126,132131],{"__ignoreMap":27},[203,132046,132047],{"class":205,"line":206},[203,132048,132049],{"class":272},"\u002F* 静态定位（默认） *\u002F\n",[203,132051,132052,132055,132057,132059,132061,132064],{"class":205,"line":124},[203,132053,132054],{"class":2052},".static",[203,132056,79865],{"class":213},[203,132058,128970],{"class":262},[203,132060,51495],{"class":213},[203,132062,132063],{"class":262},"static",[203,132065,129540],{"class":213},[203,132067,132068],{"class":205,"line":1269},[203,132069,132070],{"class":272},"\u002F* 相对定位 *\u002F\n",[203,132072,132073,132076,132078,132080,132082,132084],{"class":205,"line":1284},[203,132074,132075],{"class":2052},".relative",[203,132077,79865],{"class":213},[203,132079,128970],{"class":262},[203,132081,51495],{"class":213},[203,132083,54822],{"class":262},[203,132085,129540],{"class":213},[203,132087,132088],{"class":205,"line":1290},[203,132089,132090],{"class":272},"\u002F* 绝对定位 *\u002F\n",[203,132092,132093,132096,132098,132100,132102,132104],{"class":205,"line":1304},[203,132094,132095],{"class":2052},".absolute",[203,132097,79865],{"class":213},[203,132099,128970],{"class":262},[203,132101,51495],{"class":213},[203,132103,54889],{"class":262},[203,132105,129540],{"class":213},[203,132107,132108],{"class":205,"line":1310},[203,132109,132110],{"class":272},"\u002F* 固定定位 *\u002F\n",[203,132112,132113,132116,132118,132120,132122,132124],{"class":205,"line":1401},[203,132114,132115],{"class":2052},".fixed",[203,132117,79865],{"class":213},[203,132119,128970],{"class":262},[203,132121,51495],{"class":213},[203,132123,86291],{"class":262},[203,132125,129540],{"class":213},[203,132127,132128],{"class":205,"line":1407},[203,132129,132130],{"class":272},"\u002F* 粘性定位 *\u002F\n",[203,132132,132133,132136,132138,132140,132142,132145],{"class":205,"line":1419},[203,132134,132135],{"class":2052},".sticky",[203,132137,79865],{"class":213},[203,132139,128970],{"class":262},[203,132141,51495],{"class":213},[203,132143,132144],{"class":262},"sticky",[203,132146,129540],{"class":213},[157,132148,132149,132152],{"start":1706},[160,132150,132151],{},"一定要用好注释",[160,132153,132154],{},"浮动的盒子不会有外边距合并的问题",[5216,132156,131498],{},{"title":27,"searchDepth":124,"depth":124,"links":132158},[132159,132160],{"id":131535,"depth":124,"text":131536},{"id":131599,"depth":124,"text":131600,"children":132161},[132162,132163,132164,132165,132166,132167,132168],{"id":131603,"depth":1269,"text":131604},{"id":131709,"depth":1269,"text":131710},{"id":131745,"depth":1269,"text":131746},{"id":131766,"depth":1269,"text":131767},{"id":131801,"depth":1269,"text":131802},{"id":131834,"depth":1269,"text":131835},{"id":131909,"depth":1269,"text":131910},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131527,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132175,"title":132176,"body":132177,"description":23467,"extension":129,"meta":133663,"navigation":131,"path":133664,"seo":133665,"stem":133666,"__hash__":133667},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132178,"toc":133655},[132179,132182,132186,132190,132201,132205,132222,132266,132299,132302,132319,132322,132325,132369,132373,132377,132380,132383,132387,132390,132401,132464,132505,132508,132523,132577,132585,132588,132599,132653,132679,132682,132695,132749,132781,132835,132858,132912,132915,132918,132925,132979,133000,133054,133057,133060,133145,133153,133210,133233,133237,133240,133258,133262,133281,133335,133373,133377,133380,133383,133405,133409,133417,133420,133425,133436,133439,133443,133457,133501,133504,133508,133511,133516,133542,133547,133624,133627,133631,133634,133637,133640,133643,133646,133649,133652],[10,132180,132176],{"id":132181},"_11-传统布局与定位体系",[14,132183,132185],{"id":132184},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[174,132187,132189],{"id":132188},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1221,132191,132192,132195,132198],{},[160,132193,132194],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[160,132196,132197],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[160,132199,132200],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[174,132202,132204],{"id":132203},"_1112-浮动","11.1.2 浮动",[1221,132206,132207,132210,132213,132216,132219],{},[160,132208,132209],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[160,132211,132212],{},"浮动可以改变元素标签默认的排列方式",[160,132214,132215],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[160,132217,132218],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[160,132220,132221],{},"在使用行内块转换时盒子之间是有空隙的",[194,132223,132224],{"className":126610,"code":131076,"language":126612,"meta":27,"style":27},[200,132225,132226,132232,132242,132246,132252,132262],{"__ignoreMap":27},[203,132227,132228,132230],{"class":205,"line":206},[203,132229,131083],{"class":2052},[203,132231,15662],{"class":213},[203,132233,132234,132236,132238,132240],{"class":205,"line":124},[203,132235,131090],{"class":262},[203,132237,51495],{"class":213},[203,132239,23827],{"class":262},[203,132241,1380],{"class":213},[203,132243,132244],{"class":205,"line":1269},[203,132245,1654],{"class":213},[203,132247,132248,132250],{"class":205,"line":1284},[203,132249,131105],{"class":2052},[203,132251,15662],{"class":213},[203,132253,132254,132256,132258,132260],{"class":205,"line":1290},[203,132255,131090],{"class":262},[203,132257,51495],{"class":213},[203,132259,72580],{"class":262},[203,132261,1380],{"class":213},[203,132263,132264],{"class":205,"line":1304},[203,132265,1654],{"class":213},[351,132267,132268,132276],{},[354,132269,132270],{},[357,132271,132272,132274],{},[360,132273,127074],{"align":23827},[360,132275,27547],{"align":23827},[398,132277,132278,132285,132292],{},[357,132279,132280,132282],{},[403,132281,54795],{"align":23827},[403,132283,132284],{"align":23827},"元素不浮动（默认值）",[357,132286,132287,132289],{},[403,132288,23827],{"align":23827},[403,132290,132291],{"align":23827},"元素向左浮动",[357,132293,132294,132296],{},[403,132295,72580],{"align":23827},[403,132297,132298],{"align":23827},"元素向右浮动",[19,132300,132301],{},"浮动重点：",[1221,132303,132304,132307,132310,132313,132316],{},[160,132305,132306],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[160,132308,132309],{},"浮动的元素会一行内显示并且元素顶部对齐",[160,132311,132312],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[160,132314,132315],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[160,132317,132318],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132320,132321],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132323,132324],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[194,132326,132327],{"className":126610,"code":131076,"language":126612,"meta":27,"style":27},[200,132328,132329,132335,132345,132349,132355,132365],{"__ignoreMap":27},[203,132330,132331,132333],{"class":205,"line":206},[203,132332,131083],{"class":2052},[203,132334,15662],{"class":213},[203,132336,132337,132339,132341,132343],{"class":205,"line":124},[203,132338,131090],{"class":262},[203,132340,51495],{"class":213},[203,132342,23827],{"class":262},[203,132344,1380],{"class":213},[203,132346,132347],{"class":205,"line":1269},[203,132348,1654],{"class":213},[203,132350,132351,132353],{"class":205,"line":1284},[203,132352,131105],{"class":2052},[203,132354,15662],{"class":213},[203,132356,132357,132359,132361,132363],{"class":205,"line":1290},[203,132358,131090],{"class":262},[203,132360,51495],{"class":213},[203,132362,72580],{"class":262},[203,132364,1380],{"class":213},[203,132366,132367],{"class":205,"line":1304},[203,132368,1654],{"class":213},[174,132370,132372],{"id":132371},"_1113-定位","11.1.3 定位",[22088,132374,132376],{"id":132375},"_11131-使用场景","11.1.3.1 使用场景",[19,132378,132379],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132381,132382],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22088,132384,132386],{"id":132385},"_11132-定位组成","11.1.3.2 定位组成",[19,132388,132389],{},"定位 = 定位模式 + 边偏移",[157,132391,132392],{},[160,132393,132394,132397,132398],{},[363,132395,132396],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[363,132399,132400],{},"定位模式",[194,132402,132404],{"className":126610,"code":132403,"language":126612,"meta":27,"style":27},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[200,132405,132406,132412,132426,132443,132460],{"__ignoreMap":27},[203,132407,132408,132410],{"class":205,"line":206},[203,132409,130458],{"class":2052},[203,132411,15662],{"class":213},[203,132413,132414,132417,132419,132421,132423],{"class":205,"line":124},[203,132415,132416],{"class":262},"  position",[203,132418,51495],{"class":213},[203,132420,54822],{"class":262},[203,132422,130473],{"class":213},[203,132424,132425],{"class":272},"\u002F* 定位模式 *\u002F\n",[203,132427,132428,132431,132433,132435,132437,132440],{"class":205,"line":1269},[203,132429,132430],{"class":262},"  top",[203,132432,51495],{"class":213},[203,132434,660],{"class":262},[203,132436,51550],{"class":209},[203,132438,132439],{"class":213},";           ",[203,132441,132442],{"class":272},"\u002F* 边偏移：上 *\u002F\n",[203,132444,132445,132448,132450,132452,132454,132457],{"class":205,"line":1284},[203,132446,132447],{"class":262},"  left",[203,132449,51495],{"class":213},[203,132451,914],{"class":262},[203,132453,51550],{"class":209},[203,132455,132456],{"class":213},";          ",[203,132458,132459],{"class":272},"\u002F* 边偏移：左 *\u002F\n",[203,132461,132462],{"class":205,"line":1290},[203,132463,1654],{"class":213},[351,132465,132466,132475],{},[354,132467,132468],{},[357,132469,132470,132472],{},[360,132471,366],{"align":23827},[360,132473,132474],{"align":23827},"语义",[398,132476,132477,132484,132491,132498],{},[357,132478,132479,132481],{},[403,132480,132063],{"align":23827},[403,132482,132483],{"align":23827},"静态定位",[357,132485,132486,132488],{},[403,132487,54822],{"align":23827},[403,132489,132490],{"align":23827},"相对定位",[357,132492,132493,132495],{},[403,132494,54889],{"align":23827},[403,132496,132497],{"align":23827},"绝对定位",[357,132499,132500,132502],{},[403,132501,86291],{"align":23827},[403,132503,132504],{"align":23827},"固定定位",[19,132506,132507],{},"（1）静态定位：",[1221,132509,132510,132521],{},[160,132511,132512,132513,132516,132517,132520],{},"静态定位是元素的 ",[363,132514,132515],{},"默认定位方式"," ， ",[363,132518,132519],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[160,132522,5271],{},[194,132524,132525],{"className":126610,"code":132403,"language":126612,"meta":27,"style":27},[200,132526,132527,132533,132545,132559,132573],{"__ignoreMap":27},[203,132528,132529,132531],{"class":205,"line":206},[203,132530,130458],{"class":2052},[203,132532,15662],{"class":213},[203,132534,132535,132537,132539,132541,132543],{"class":205,"line":124},[203,132536,132416],{"class":262},[203,132538,51495],{"class":213},[203,132540,54822],{"class":262},[203,132542,130473],{"class":213},[203,132544,132425],{"class":272},[203,132546,132547,132549,132551,132553,132555,132557],{"class":205,"line":1269},[203,132548,132430],{"class":262},[203,132550,51495],{"class":213},[203,132552,660],{"class":262},[203,132554,51550],{"class":209},[203,132556,132439],{"class":213},[203,132558,132442],{"class":272},[203,132560,132561,132563,132565,132567,132569,132571],{"class":205,"line":1284},[203,132562,132447],{"class":262},[203,132564,51495],{"class":213},[203,132566,914],{"class":262},[203,132568,51550],{"class":209},[203,132570,132456],{"class":213},[203,132572,132459],{"class":272},[203,132574,132575],{"class":205,"line":1290},[203,132576,1654],{"class":213},[1221,132578,132579,132582],{},[160,132580,132581],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[160,132583,132584],{},"静态定位在布局时我们几乎不用的",[19,132586,132587],{},"（2）相对定位",[1221,132589,132590,132597],{},[160,132591,132592,132593,132596],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[363,132594,132595],{},"原来的位置"," 来说的（自恋型）",[160,132598,5271],{},[194,132600,132601],{"className":126610,"code":132403,"language":126612,"meta":27,"style":27},[200,132602,132603,132609,132621,132635,132649],{"__ignoreMap":27},[203,132604,132605,132607],{"class":205,"line":206},[203,132606,130458],{"class":2052},[203,132608,15662],{"class":213},[203,132610,132611,132613,132615,132617,132619],{"class":205,"line":124},[203,132612,132416],{"class":262},[203,132614,51495],{"class":213},[203,132616,54822],{"class":262},[203,132618,130473],{"class":213},[203,132620,132425],{"class":272},[203,132622,132623,132625,132627,132629,132631,132633],{"class":205,"line":1269},[203,132624,132430],{"class":262},[203,132626,51495],{"class":213},[203,132628,660],{"class":262},[203,132630,51550],{"class":209},[203,132632,132439],{"class":213},[203,132634,132442],{"class":272},[203,132636,132637,132639,132641,132643,132645,132647],{"class":205,"line":1284},[203,132638,132447],{"class":262},[203,132640,51495],{"class":213},[203,132642,914],{"class":262},[203,132644,51550],{"class":209},[203,132646,132456],{"class":213},[203,132648,132459],{"class":272},[203,132650,132651],{"class":205,"line":1290},[203,132652,1654],{"class":213},[1221,132654,132655],{},[160,132656,132657,132658,132660,132661,132663,132664,132667,132668,132671,132672,132674,132675,132678],{},"相对定位的特点：",[53774,132659],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53774,132662],{},"  ② ",[363,132665,132666],{},"原来"," 在标准流的 ",[363,132669,132670],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53774,132673],{},"  ③因此， ",[363,132676,132677],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,132680,132681],{},"（3）绝对定位",[1221,132683,132684,132693],{},[160,132685,132686,132688,132689,132692],{},[363,132687,132497],{}," 是元素在移动位置的时候，是相对于它 ",[363,132690,132691],{},"祖先元素"," 来说的（拼爹型）",[160,132694,5271],{},[194,132696,132697],{"className":126610,"code":132403,"language":126612,"meta":27,"style":27},[200,132698,132699,132705,132717,132731,132745],{"__ignoreMap":27},[203,132700,132701,132703],{"class":205,"line":206},[203,132702,130458],{"class":2052},[203,132704,15662],{"class":213},[203,132706,132707,132709,132711,132713,132715],{"class":205,"line":124},[203,132708,132416],{"class":262},[203,132710,51495],{"class":213},[203,132712,54822],{"class":262},[203,132714,130473],{"class":213},[203,132716,132425],{"class":272},[203,132718,132719,132721,132723,132725,132727,132729],{"class":205,"line":1269},[203,132720,132430],{"class":262},[203,132722,51495],{"class":213},[203,132724,660],{"class":262},[203,132726,51550],{"class":209},[203,132728,132439],{"class":213},[203,132730,132442],{"class":272},[203,132732,132733,132735,132737,132739,132741,132743],{"class":205,"line":1284},[203,132734,132447],{"class":262},[203,132736,51495],{"class":213},[203,132738,914],{"class":262},[203,132740,51550],{"class":209},[203,132742,132456],{"class":213},[203,132744,132459],{"class":272},[203,132746,132747],{"class":205,"line":1290},[203,132748,1654],{"class":213},[1221,132750,132751,132766,132775,132778],{},[160,132752,132753,132754,132756,132757,132759,132760,132762,132763,132765],{},"绝对定位的特点：",[53774,132755],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53774,132758],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53774,132761],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53774,132764],{},"  (4)固定定位",[160,132767,132768,132770,132771,132774],{},[363,132769,132504],{}," 是元素 ",[363,132772,132773],{},"固定于浏览器可视区的位置"," 。（认死理型）",[160,132776,132777],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[160,132779,132780],{},"语法:",[194,132782,132783],{"className":126610,"code":132403,"language":126612,"meta":27,"style":27},[200,132784,132785,132791,132803,132817,132831],{"__ignoreMap":27},[203,132786,132787,132789],{"class":205,"line":206},[203,132788,130458],{"class":2052},[203,132790,15662],{"class":213},[203,132792,132793,132795,132797,132799,132801],{"class":205,"line":124},[203,132794,132416],{"class":262},[203,132796,51495],{"class":213},[203,132798,54822],{"class":262},[203,132800,130473],{"class":213},[203,132802,132425],{"class":272},[203,132804,132805,132807,132809,132811,132813,132815],{"class":205,"line":1269},[203,132806,132430],{"class":262},[203,132808,51495],{"class":213},[203,132810,660],{"class":262},[203,132812,51550],{"class":209},[203,132814,132439],{"class":213},[203,132816,132442],{"class":272},[203,132818,132819,132821,132823,132825,132827,132829],{"class":205,"line":1284},[203,132820,132447],{"class":262},[203,132822,51495],{"class":213},[203,132824,914],{"class":262},[203,132826,51550],{"class":209},[203,132828,132456],{"class":213},[203,132830,132459],{"class":272},[203,132832,132833],{"class":205,"line":1290},[203,132834,1654],{"class":213},[1221,132836,132837,132846],{},[160,132838,132839,132840,132842,132843,132845],{},"特点:",[53774,132841],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53774,132844],{},"  ②固定定位不再占有原先的位置,完全脱标",[160,132847,132848,132849,132851,132852,132854,132855,132857],{},"固定在版心位置的方法:",[53774,132850],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53774,132853],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53774,132856],{},"  实例：",[194,132859,132860],{"className":126610,"code":132403,"language":126612,"meta":27,"style":27},[200,132861,132862,132868,132880,132894,132908],{"__ignoreMap":27},[203,132863,132864,132866],{"class":205,"line":206},[203,132865,130458],{"class":2052},[203,132867,15662],{"class":213},[203,132869,132870,132872,132874,132876,132878],{"class":205,"line":124},[203,132871,132416],{"class":262},[203,132873,51495],{"class":213},[203,132875,54822],{"class":262},[203,132877,130473],{"class":213},[203,132879,132425],{"class":272},[203,132881,132882,132884,132886,132888,132890,132892],{"class":205,"line":1269},[203,132883,132430],{"class":262},[203,132885,51495],{"class":213},[203,132887,660],{"class":262},[203,132889,51550],{"class":209},[203,132891,132439],{"class":213},[203,132893,132442],{"class":272},[203,132895,132896,132898,132900,132902,132904,132906],{"class":205,"line":1284},[203,132897,132447],{"class":262},[203,132899,51495],{"class":213},[203,132901,914],{"class":262},[203,132903,51550],{"class":209},[203,132905,132456],{"class":213},[203,132907,132459],{"class":272},[203,132909,132910],{"class":205,"line":1290},[203,132911,1654],{"class":213},[25,132913],{"style":126466,"src":132914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,132916,132917],{},"(5)粘性定位",[1221,132919,132920,132923],{},[160,132921,132922],{},"粘性定位可以被认为是相对定位和固定定位的混合",[160,132924,5271],{},[194,132926,132927],{"className":126610,"code":132403,"language":126612,"meta":27,"style":27},[200,132928,132929,132935,132947,132961,132975],{"__ignoreMap":27},[203,132930,132931,132933],{"class":205,"line":206},[203,132932,130458],{"class":2052},[203,132934,15662],{"class":213},[203,132936,132937,132939,132941,132943,132945],{"class":205,"line":124},[203,132938,132416],{"class":262},[203,132940,51495],{"class":213},[203,132942,54822],{"class":262},[203,132944,130473],{"class":213},[203,132946,132425],{"class":272},[203,132948,132949,132951,132953,132955,132957,132959],{"class":205,"line":1269},[203,132950,132430],{"class":262},[203,132952,51495],{"class":213},[203,132954,660],{"class":262},[203,132956,51550],{"class":209},[203,132958,132439],{"class":213},[203,132960,132442],{"class":272},[203,132962,132963,132965,132967,132969,132971,132973],{"class":205,"line":1284},[203,132964,132447],{"class":262},[203,132966,51495],{"class":213},[203,132968,914],{"class":262},[203,132970,51550],{"class":209},[203,132972,132456],{"class":213},[203,132974,132459],{"class":272},[203,132976,132977],{"class":205,"line":1290},[203,132978,1654],{"class":213},[1221,132980,132981],{},[160,132982,132983,132984,132986,132987,132989,132990,132992,132993,132996,132997,132999],{},"粘性定位的特点：",[53774,132985],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53774,132988],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53774,132991],{},"  ③必须添加 top 、left、right、bottom ",[363,132994,132995],{},"其中一个"," 才有效",[53774,132998],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[194,133001,133002],{"className":126610,"code":132403,"language":126612,"meta":27,"style":27},[200,133003,133004,133010,133022,133036,133050],{"__ignoreMap":27},[203,133005,133006,133008],{"class":205,"line":206},[203,133007,130458],{"class":2052},[203,133009,15662],{"class":213},[203,133011,133012,133014,133016,133018,133020],{"class":205,"line":124},[203,133013,132416],{"class":262},[203,133015,51495],{"class":213},[203,133017,54822],{"class":262},[203,133019,130473],{"class":213},[203,133021,132425],{"class":272},[203,133023,133024,133026,133028,133030,133032,133034],{"class":205,"line":1269},[203,133025,132430],{"class":262},[203,133027,51495],{"class":213},[203,133029,660],{"class":262},[203,133031,51550],{"class":209},[203,133033,132439],{"class":213},[203,133035,132442],{"class":272},[203,133037,133038,133040,133042,133044,133046,133048],{"class":205,"line":1284},[203,133039,132447],{"class":262},[203,133041,51495],{"class":213},[203,133043,914],{"class":262},[203,133045,51550],{"class":209},[203,133047,132456],{"class":213},[203,133049,132459],{"class":272},[203,133051,133052],{"class":205,"line":1290},[203,133053,1654],{"class":213},[25,133055],{"style":126466,"src":133056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133058,133059],{},"(6)总结",[351,133061,133062,133077],{},[354,133063,133064],{},[357,133065,133066,133068,133071,133074],{},[360,133067,132400],{"align":23827},[360,133069,133070],{"align":23827},"是否脱标",[360,133072,133073],{"align":23827},"移动位置",[360,133075,133076],{"align":23827},"是否常用",[398,133078,133079,133092,133106,133120,133133],{},[357,133080,133081,133084,133086,133089],{},[403,133082,133083],{"align":23827},"Static 静态定位",[403,133085,104736],{"align":23827},[403,133087,133088],{"align":23827},"不能使用边偏移",[403,133090,133091],{"align":23827},"很少",[357,133093,133094,133097,133100,133103],{},[403,133095,133096],{"align":23827},"Relative 相对定位",[403,133098,133099],{"align":23827},"否(占有位置)",[403,133101,133102],{"align":23827},"相对于自身位置移动",[403,133104,133105],{"align":23827},"基本单独使用",[357,133107,133108,133111,133114,133117],{},[403,133109,133110],{"align":23827},"Absolute 绝对定位",[403,133112,133113],{"align":23827},"是(不占有位置)",[403,133115,133116],{"align":23827},"带有定位的父级",[403,133118,133119],{"align":23827},"要和定位父级元素搭配使用",[357,133121,133122,133125,133127,133130],{},[403,133123,133124],{"align":23827},"Fixed 固定定位",[403,133126,133113],{"align":23827},[403,133128,133129],{"align":23827},"浏览器可视区",[403,133131,133132],{"align":23827},"单独使用,不需要父级",[357,133134,133135,133138,133140,133142],{},[403,133136,133137],{"align":23827},"Sticky 粘性定位",[403,133139,133099],{"align":23827},[403,133141,133129],{"align":23827},[403,133143,133144],{"align":23827},"当前阶段少",[157,133146,133147],{"start":124},[160,133148,133149,133152],{},[363,133150,133151],{},"边偏移"," 则决定了该元素的最终位置",[351,133154,133155,133166],{},[354,133156,133157],{},[357,133158,133159,133162,133164],{},[360,133160,133161],{"align":23827},"边偏移属性",[360,133163,27550],{"align":23827},[360,133165,27547],{"align":23827},[398,133167,133168,133179,133190,133200],{},[357,133169,133170,133173,133176],{},[403,133171,133172],{"align":23827},"top",[403,133174,133175],{"align":23827},"top: 80px;",[403,133177,133178],{"align":23827},"顶端偏移量，定义元素相对于父元素上边线的距离",[357,133180,133181,133184,133187],{},[403,133182,133183],{"align":23827},"bottom",[403,133185,133186],{"align":23827},"bottom: 80px ;",[403,133188,133189],{"align":23827},"底部偏移量，定义元素相对于其父元素下边线的距离",[357,133191,133192,133194,133197],{},[403,133193,23827],{"align":23827},[403,133195,133196],{"align":23827},"left: 80px ;",[403,133198,133199],{"align":23827},"左侧偏移量，定义元素相对于其父元素左边线的距离",[357,133201,133202,133204,133207],{},[403,133203,72580],{"align":23827},[403,133205,133206],{"align":23827},"right: 80px ;",[403,133208,133209],{"align":23827},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1221,133211,133212],{},[160,133213,9115,133214,133216,133217,133219,133220,133222,133223,133226,133227,133229,133230,133232],{},[53774,133215],{},"  ① ",[363,133218,133151],{}," 需要和 ",[363,133221,132400],{}," 联合使用， ",[363,133224,133225],{},"单独使用无效"," ；",[53774,133228],{},"  ②top和bottom不要同时使用",[53774,133231],{},"  ③left和right不要同时使用",[22088,133234,133236],{"id":133235},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133238,133239],{},"子级是绝对定位的话，父级要用相对定位",[1221,133241,133242,133245,133248,133251],{},[160,133243,133244],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[160,133246,133247],{},"父盒子需要加定位限制子盒子在父盒子内显示",[160,133249,133250],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[160,133252,133253,133254,133257],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[363,133255,133256],{},"子绝父绝"," 也会遇到",[22088,133259,133261],{"id":133260},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1221,133263,133264,133279],{},[160,133265,133266,133267,133270,133271,133274,133275,133278],{},"在使用 ",[363,133268,133269],{},"定位"," 布局时，可能会 ",[363,133272,133273],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[363,133276,133277],{},"z-index"," 来控制盒子的前后次序 (z轴)",[160,133280,5271],{},[194,133282,133283],{"className":126610,"code":132403,"language":126612,"meta":27,"style":27},[200,133284,133285,133291,133303,133317,133331],{"__ignoreMap":27},[203,133286,133287,133289],{"class":205,"line":206},[203,133288,130458],{"class":2052},[203,133290,15662],{"class":213},[203,133292,133293,133295,133297,133299,133301],{"class":205,"line":124},[203,133294,132416],{"class":262},[203,133296,51495],{"class":213},[203,133298,54822],{"class":262},[203,133300,130473],{"class":213},[203,133302,132425],{"class":272},[203,133304,133305,133307,133309,133311,133313,133315],{"class":205,"line":1269},[203,133306,132430],{"class":262},[203,133308,51495],{"class":213},[203,133310,660],{"class":262},[203,133312,51550],{"class":209},[203,133314,132439],{"class":213},[203,133316,132442],{"class":272},[203,133318,133319,133321,133323,133325,133327,133329],{"class":205,"line":1284},[203,133320,132447],{"class":262},[203,133322,51495],{"class":213},[203,133324,914],{"class":262},[203,133326,51550],{"class":209},[203,133328,132456],{"class":213},[203,133330,132459],{"class":272},[203,133332,133333],{"class":205,"line":1290},[203,133334,1654],{"class":213},[1221,133336,133337],{},[160,133338,133339,133340,133216,133342,133344,133345,127773,133348,82597,133351,133353,133354,133356,133357,133360,133361,133226,133364,133366,133367,133370,133372],{},"z-index的特性",[53774,133341],{},[363,133343,127074],{}," ： ",[363,133346,133347],{},"正整数",[363,133349,133350],{},"负整数",[363,133352,405],{}," ，默认值是 0，数值越大，盒子越靠上；",[53774,133355],{},"  ②如果 ",[363,133358,133359],{},"属性值相同"," ，则按照书写顺序， ",[363,133362,133363],{},"后来居上",[53774,133365],{},"  ③数字后面 ",[363,133368,133369],{},"不能加单位",[53774,133371],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22088,133374,133376],{"id":133375},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133378,133379],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133381,133382],{},"方法:",[1221,133384,133385,133395],{},[160,133386,133387,133388,133391,133392],{},"left: 50%; 让 ",[363,133389,133390],{},"盒子的左侧"," 移动到 ",[363,133393,133394],{},"父级元素的水平中心位置",[160,133396,133397,133398,133401,133402],{},"margin-left: -100px; 让盒子 ",[363,133399,133400],{},"向左"," 移动 ",[363,133403,133404],{},"自身宽度的一半",[22088,133406,133408],{"id":133407},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[157,133410,133411,133414],{},[160,133412,133413],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[160,133415,133416],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133418,133419],{},"也就是说绝对定位和固定定位和浮动类似",[157,133421,133422],{"start":1269},[160,133423,133424],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1221,133426,133427,133430,133433],{},[160,133428,133429],{},"可以用inline-block 转换为行内块",[160,133431,133432],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[160,133434,133435],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133437,133438],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22088,133440,133442],{"id":133441},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[157,133444,133445,133448,133451,133454],{},[160,133446,133447],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[160,133449,133450],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[160,133452,133453],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[160,133455,133456],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[194,133458,133459],{"className":126610,"code":131076,"language":126612,"meta":27,"style":27},[200,133460,133461,133467,133477,133481,133487,133497],{"__ignoreMap":27},[203,133462,133463,133465],{"class":205,"line":206},[203,133464,131083],{"class":2052},[203,133466,15662],{"class":213},[203,133468,133469,133471,133473,133475],{"class":205,"line":124},[203,133470,131090],{"class":262},[203,133472,51495],{"class":213},[203,133474,23827],{"class":262},[203,133476,1380],{"class":213},[203,133478,133479],{"class":205,"line":1269},[203,133480,1654],{"class":213},[203,133482,133483,133485],{"class":205,"line":1284},[203,133484,131105],{"class":2052},[203,133486,15662],{"class":213},[203,133488,133489,133491,133493,133495],{"class":205,"line":1290},[203,133490,131090],{"class":262},[203,133492,51495],{"class":213},[203,133494,72580],{"class":262},[203,133496,1380],{"class":213},[203,133498,133499],{"class":205,"line":1304},[203,133500,1654],{"class":213},[25,133502],{"style":126466,"src":133503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22088,133505,133507],{"id":133506},"_11138-轮播图","11.1.3.8 轮播图",[25,133509],{"style":126466,"src":133510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[157,133512,133513],{},[160,133514,133515],{},"制作顺序:",[1221,133517,133518,133521,133524,133533],{},[160,133519,133520],{},"大盒子我们类名为： tb-promo 淘宝广告",[160,133522,133523],{},"里面先放一张图片",[160,133525,133526,133527,133529,133530,133532],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53774,133528],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53774,133531],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[160,133534,133535,133536,133538,133539,133541],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53774,133537],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53774,133540],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[157,133543,133544],{"start":124},[160,133545,133546],{},"代码模块",[194,133548,133550],{"className":126610,"code":133549,"language":126612,"meta":27,"style":27},"\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",[200,133551,133552,133557,133564,133574,133584,133594,133598,133603,133610,133620],{"__ignoreMap":27},[203,133553,133554],{"class":205,"line":206},[203,133555,133556],{"class":272},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[203,133558,133559,133562],{"class":205,"line":124},[203,133560,133561],{"class":2052},".son",[203,133563,15662],{"class":213},[203,133565,133566,133568,133570,133572],{"class":205,"line":1269},[203,133567,132416],{"class":262},[203,133569,51495],{"class":213},[203,133571,54889],{"class":262},[203,133573,1380],{"class":213},[203,133575,133576,133578,133580,133582],{"class":205,"line":1284},[203,133577,132430],{"class":262},[203,133579,51495],{"class":213},[203,133581,405],{"class":262},[203,133583,1380],{"class":213},[203,133585,133586,133588,133590,133592],{"class":205,"line":1290},[203,133587,132447],{"class":262},[203,133589,51495],{"class":213},[203,133591,405],{"class":262},[203,133593,1380],{"class":213},[203,133595,133596],{"class":205,"line":1304},[203,133597,1654],{"class":213},[203,133599,133600],{"class":205,"line":1310},[203,133601,133602],{"class":272},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[203,133604,133605,133608],{"class":205,"line":1401},[203,133606,133607],{"class":2052},".father",[203,133609,15662],{"class":213},[203,133611,133612,133614,133616,133618],{"class":205,"line":1407},[203,133613,132416],{"class":262},[203,133615,51495],{"class":213},[203,133617,54822],{"class":262},[203,133619,1380],{"class":213},[203,133621,133622],{"class":205,"line":1419},[203,133623,1654],{"class":213},[19,133625,133626],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[174,133628,133630],{"id":133629},"_1114-定位数值的移动","11.1.4 定位数值的移动",[25,133632],{"style":126466,"src":133633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,133635,133636],{},"✨ 黄金口诀：",[19,133638,133639],{},"\"TOP正下负上，LEFT正右负左\"",[19,133641,133642],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,133644,133645],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,133647,133648],{},"✨ 简单记：",[19,133650,133651],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5216,133653,133654],{},"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":27,"searchDepth":124,"depth":124,"links":133656},[133657],{"id":132184,"depth":124,"text":132185,"children":133658},[133659,133660,133661,133662],{"id":132188,"depth":1269,"text":132189},{"id":132203,"depth":1269,"text":132204},{"id":132371,"depth":1269,"text":132372},{"id":133629,"depth":1269,"text":133630},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132176,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133669,"title":133670,"body":133671,"description":23467,"extension":129,"meta":135094,"navigation":131,"path":135095,"seo":135096,"stem":135097,"__hash__":135098},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133672,"toc":135073},[133673,133676,133680,133688,133692,133697,133705,133717,133721,133726,133734,133745,133749,133754,133795,133803,133807,133810,133813,133816,133910,133913,134007,134010,134104,134107,134110,134145,134148,134151,134181,134184,134187,134190,134193,134196,134199,134202,134272,134275,134279,134283,134324,134328,134334,134337,134340,134344,134347,134350,134353,134434,134437,134440,134444,134448,134451,134454,134457,134460,134463,134469,134478,134482,134501,134505,134515,134518,134521,134524,134527,134530,134533,134536,134539,134548,134552,134561,134564,134569,134622,134627,134793,134796,134799,134804,134807,134810,134813,134816,134821,134969,134972,134975,134980,134983,134988,135022,135025,135028,135032,135035,135042,135045,135048,135051,135054,135057,135060,135063,135067,135070],[10,133674,133670],{"id":133675},"_12-显示隐藏与图形资源",[14,133677,133679],{"id":133678},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1221,133681,133682,133685],{},[160,133683,133684],{},"目的:让一个元素在页面中消失或者显示出来",[160,133686,133687],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[174,133689,133691],{"id":133690},"_1211-display-显示","12.1.1 display 显示",[157,133693,133694],{},[160,133695,133696],{},"display 设置或检索对象是否及如何显示",[1221,133698,133699,133702],{},[160,133700,133701],{},"display: none;隐藏对象",[160,133703,133704],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[157,133706,133707,133714],{"start":124},[160,133708,133709,133710,133713],{},"特点： display 隐藏元素后， ",[363,133711,133712],{},"不再占"," 有原来的位置",[160,133715,133716],{},"在js中使用非常的广泛",[174,133718,133720],{"id":133719},"_1212-visibility可见性","12.1.2 visibility可见性",[157,133722,133723],{},[160,133724,133725],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1221,133727,133728,133731],{},[160,133729,133730],{},"visibility： visible；元素可见",[160,133732,133733],{},"visibility：hidden；元素隐藏",[157,133735,133736,133739,133742],{"start":124},[160,133737,133738],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[160,133740,133741],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[160,133743,133744],{},"隐藏后继续占有原有位置",[174,133746,133748],{"id":133747},"_1213-overflow溢出","12.1.3 overflow溢出",[1221,133750,133751],{},[160,133752,133753],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[351,133755,133756,133764],{},[354,133757,133758],{},[357,133759,133760,133762],{},[360,133761,127074],{"align":23827},[360,133763,27547],{"align":23827},[398,133765,133766,133774,133781,133788],{},[357,133767,133768,133771],{},[403,133769,133770],{"align":23827},"visible",[403,133772,133773],{"align":23827},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[357,133775,133776,133778],{},[403,133777,61772],{"align":23827},[403,133779,133780],{"align":23827},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[357,133782,133783,133785],{},[403,133784,129030],{"align":23827},[403,133786,133787],{"align":23827},"不管超出内容否，总是显示滚动条",[357,133789,133790,133792],{},[403,133791,72721],{"align":23827},[403,133793,133794],{"align":23827},"超出自动显示滚动条，不超出不显示滚动条",[1221,133796,133797,133800],{},[160,133798,133799],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[160,133801,133802],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[174,133804,133806],{"id":133805},"_1214-案例收获","12.1.4 案例收获",[25,133808],{"style":126466,"src":133809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,133811,133812],{},"问题：没做出来动态效果，使用hover没实现",[19,133814,133815],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[194,133817,133818],{"className":126610,"code":132042,"language":126612,"meta":27,"style":27},[200,133819,133820,133824,133838,133842,133856,133860,133874,133878,133892,133896],{"__ignoreMap":27},[203,133821,133822],{"class":205,"line":206},[203,133823,132049],{"class":272},[203,133825,133826,133828,133830,133832,133834,133836],{"class":205,"line":124},[203,133827,132054],{"class":2052},[203,133829,79865],{"class":213},[203,133831,128970],{"class":262},[203,133833,51495],{"class":213},[203,133835,132063],{"class":262},[203,133837,129540],{"class":213},[203,133839,133840],{"class":205,"line":1269},[203,133841,132070],{"class":272},[203,133843,133844,133846,133848,133850,133852,133854],{"class":205,"line":1284},[203,133845,132075],{"class":2052},[203,133847,79865],{"class":213},[203,133849,128970],{"class":262},[203,133851,51495],{"class":213},[203,133853,54822],{"class":262},[203,133855,129540],{"class":213},[203,133857,133858],{"class":205,"line":1290},[203,133859,132090],{"class":272},[203,133861,133862,133864,133866,133868,133870,133872],{"class":205,"line":1304},[203,133863,132095],{"class":2052},[203,133865,79865],{"class":213},[203,133867,128970],{"class":262},[203,133869,51495],{"class":213},[203,133871,54889],{"class":262},[203,133873,129540],{"class":213},[203,133875,133876],{"class":205,"line":1310},[203,133877,132110],{"class":272},[203,133879,133880,133882,133884,133886,133888,133890],{"class":205,"line":1401},[203,133881,132115],{"class":2052},[203,133883,79865],{"class":213},[203,133885,128970],{"class":262},[203,133887,51495],{"class":213},[203,133889,86291],{"class":262},[203,133891,129540],{"class":213},[203,133893,133894],{"class":205,"line":1407},[203,133895,132130],{"class":272},[203,133897,133898,133900,133902,133904,133906,133908],{"class":205,"line":1419},[203,133899,132135],{"class":2052},[203,133901,79865],{"class":213},[203,133903,128970],{"class":262},[203,133905,51495],{"class":213},[203,133907,132144],{"class":262},[203,133909,129540],{"class":213},[19,133911,133912],{},"完整代码：",[194,133914,133915],{"className":126610,"code":132042,"language":126612,"meta":27,"style":27},[200,133916,133917,133921,133935,133939,133953,133957,133971,133975,133989,133993],{"__ignoreMap":27},[203,133918,133919],{"class":205,"line":206},[203,133920,132049],{"class":272},[203,133922,133923,133925,133927,133929,133931,133933],{"class":205,"line":124},[203,133924,132054],{"class":2052},[203,133926,79865],{"class":213},[203,133928,128970],{"class":262},[203,133930,51495],{"class":213},[203,133932,132063],{"class":262},[203,133934,129540],{"class":213},[203,133936,133937],{"class":205,"line":1269},[203,133938,132070],{"class":272},[203,133940,133941,133943,133945,133947,133949,133951],{"class":205,"line":1284},[203,133942,132075],{"class":2052},[203,133944,79865],{"class":213},[203,133946,128970],{"class":262},[203,133948,51495],{"class":213},[203,133950,54822],{"class":262},[203,133952,129540],{"class":213},[203,133954,133955],{"class":205,"line":1290},[203,133956,132090],{"class":272},[203,133958,133959,133961,133963,133965,133967,133969],{"class":205,"line":1304},[203,133960,132095],{"class":2052},[203,133962,79865],{"class":213},[203,133964,128970],{"class":262},[203,133966,51495],{"class":213},[203,133968,54889],{"class":262},[203,133970,129540],{"class":213},[203,133972,133973],{"class":205,"line":1310},[203,133974,132110],{"class":272},[203,133976,133977,133979,133981,133983,133985,133987],{"class":205,"line":1401},[203,133978,132115],{"class":2052},[203,133980,79865],{"class":213},[203,133982,128970],{"class":262},[203,133984,51495],{"class":213},[203,133986,86291],{"class":262},[203,133988,129540],{"class":213},[203,133990,133991],{"class":205,"line":1407},[203,133992,132130],{"class":272},[203,133994,133995,133997,133999,134001,134003,134005],{"class":205,"line":1419},[203,133996,132135],{"class":2052},[203,133998,79865],{"class":213},[203,134000,128970],{"class":262},[203,134002,51495],{"class":213},[203,134004,132144],{"class":262},[203,134006,129540],{"class":213},[19,134008,134009],{},"分布思路重点详解：",[194,134011,134012],{"className":126610,"code":132042,"language":126612,"meta":27,"style":27},[200,134013,134014,134018,134032,134036,134050,134054,134068,134072,134086,134090],{"__ignoreMap":27},[203,134015,134016],{"class":205,"line":206},[203,134017,132049],{"class":272},[203,134019,134020,134022,134024,134026,134028,134030],{"class":205,"line":124},[203,134021,132054],{"class":2052},[203,134023,79865],{"class":213},[203,134025,128970],{"class":262},[203,134027,51495],{"class":213},[203,134029,132063],{"class":262},[203,134031,129540],{"class":213},[203,134033,134034],{"class":205,"line":1269},[203,134035,132070],{"class":272},[203,134037,134038,134040,134042,134044,134046,134048],{"class":205,"line":1284},[203,134039,132075],{"class":2052},[203,134041,79865],{"class":213},[203,134043,128970],{"class":262},[203,134045,51495],{"class":213},[203,134047,54822],{"class":262},[203,134049,129540],{"class":213},[203,134051,134052],{"class":205,"line":1290},[203,134053,132090],{"class":272},[203,134055,134056,134058,134060,134062,134064,134066],{"class":205,"line":1304},[203,134057,132095],{"class":2052},[203,134059,79865],{"class":213},[203,134061,128970],{"class":262},[203,134063,51495],{"class":213},[203,134065,54889],{"class":262},[203,134067,129540],{"class":213},[203,134069,134070],{"class":205,"line":1310},[203,134071,132110],{"class":272},[203,134073,134074,134076,134078,134080,134082,134084],{"class":205,"line":1401},[203,134075,132115],{"class":2052},[203,134077,79865],{"class":213},[203,134079,128970],{"class":262},[203,134081,51495],{"class":213},[203,134083,86291],{"class":262},[203,134085,129540],{"class":213},[203,134087,134088],{"class":205,"line":1407},[203,134089,132130],{"class":272},[203,134091,134092,134094,134096,134098,134100,134102],{"class":205,"line":1419},[203,134093,132135],{"class":2052},[203,134095,79865],{"class":213},[203,134097,128970],{"class":262},[203,134099,51495],{"class":213},[203,134101,132144],{"class":262},[203,134103,129540],{"class":213},[25,134105],{"style":126466,"src":134106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134108,134109],{},"图片太大，盒子太小，此时需要修改图片的大小",[194,134111,134113],{"className":127357,"code":134112,"language":127359,"meta":27,"style":27},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[200,134114,134115],{"__ignoreMap":27},[203,134116,134117,134119,134121,134123,134125,134128,134130,134132,134135,134138,134140,134143],{"class":205,"line":206},[203,134118,1124],{"class":213},[203,134120,25],{"class":51358},[203,134122,55297],{"class":2052},[203,134124,259],{"class":213},[203,134126,134127],{"class":318},"\"images\u002Fpic.jpg\"",[203,134129,55305],{"class":2052},[203,134131,259],{"class":213},[203,134133,134134],{"class":318},"\"描述文字\"",[203,134136,134137],{"class":2052}," title",[203,134139,259],{"class":213},[203,134141,134142],{"class":318},"\"悬停提示\"",[203,134144,51365],{"class":213},[25,134146],{"style":126466,"src":134147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134149,134150],{},"制造遮罩层",[194,134152,134153],{"className":127357,"code":134112,"language":127359,"meta":27,"style":27},[200,134154,134155],{"__ignoreMap":27},[203,134156,134157,134159,134161,134163,134165,134167,134169,134171,134173,134175,134177,134179],{"class":205,"line":206},[203,134158,1124],{"class":213},[203,134160,25],{"class":51358},[203,134162,55297],{"class":2052},[203,134164,259],{"class":213},[203,134166,134127],{"class":318},[203,134168,55305],{"class":2052},[203,134170,259],{"class":213},[203,134172,134134],{"class":318},[203,134174,134137],{"class":2052},[203,134176,259],{"class":213},[203,134178,134142],{"class":318},[203,134180,51365],{"class":213},[19,134182,134183],{},"此时是这样的为标准流",[25,134185],{"style":126466,"src":134186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134188,134189],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134191,134192],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134194,134195],{},"让他在中间，用center(background-position)",[19,134197,134198],{},"将需要变的尽可能放到一个盒子中",[19,134200,134201],{},"放大盒子上内部盒子发生变化",[194,134203,134205],{"className":126610,"code":134204,"language":126612,"meta":27,"style":27},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[200,134206,134207,134213,134223,134227,134234,134244,134256,134268],{"__ignoreMap":27},[203,134208,134209,134211],{"class":205,"line":206},[203,134210,127677],{"class":2052},[203,134212,15662],{"class":213},[203,134214,134215,134217,134219,134221],{"class":205,"line":124},[203,134216,132416],{"class":262},[203,134218,51495],{"class":213},[203,134220,54822],{"class":262},[203,134222,1380],{"class":213},[203,134224,134225],{"class":205,"line":1269},[203,134226,1654],{"class":213},[203,134228,134229,134232],{"class":205,"line":1284},[203,134230,134231],{"class":2052},".child",[203,134233,15662],{"class":213},[203,134235,134236,134238,134240,134242],{"class":205,"line":1290},[203,134237,132416],{"class":262},[203,134239,51495],{"class":213},[203,134241,54889],{"class":262},[203,134243,1380],{"class":213},[203,134245,134246,134248,134250,134252,134254],{"class":205,"line":1304},[203,134247,132430],{"class":262},[203,134249,51495],{"class":213},[203,134251,870],{"class":262},[203,134253,542],{"class":209},[203,134255,1380],{"class":213},[203,134257,134258,134260,134262,134264,134266],{"class":205,"line":1310},[203,134259,132447],{"class":262},[203,134261,51495],{"class":213},[203,134263,870],{"class":262},[203,134265,542],{"class":209},[203,134267,1380],{"class":213},[203,134269,134270],{"class":205,"line":1401},[203,134271,1654],{"class":213},[19,134273,134274],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134276,134278],{"id":134277},"_122-精灵图","12.2 精灵图",[174,134280,134282],{"id":134281},"_1221-理解","12.2.1 理解",[157,134284,134285,134303],{},[160,134286,134287,134288,132516,134291,134294,134295,134298,134299,134302],{},"目的： ",[363,134289,134290],{},"为了有效地减少服务器接收和发送请求的次数",[363,134292,134293],{},"提高"," 页面的 ",[363,134296,134297],{},"加载速度"," ，出现了 ",[363,134300,134301],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[160,134304,134305,134306,134308,134309,134311,134312,134314,134315,134317,134318,134320,134321,134323],{},"使用精灵图核心：",[53774,134307],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53774,134310],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53774,134313],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53774,134316],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53774,134319],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53774,134322],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[174,134325,134327],{"id":134326},"_1222-扒图","12.2.2 扒图",[194,134329,134332],{"className":134330,"code":134331,"language":5277},[5275],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[200,134333,134331],{"__ignoreMap":27},[25,134335],{"style":126466,"src":134336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[25,134338],{"style":126466,"src":134339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[174,134341,134343],{"id":134342},"_1223-精灵图的实现","12.2.3 精灵图的实现",[25,134345],{"style":126466,"src":134346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134348,134349],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[25,134351],{"style":126466,"src":134352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[194,134354,134356],{"className":126610,"code":134355,"language":126612,"meta":27,"style":27},"\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",[200,134357,134358,134363,134370,134382,134394,134413,134430],{"__ignoreMap":27},[203,134359,134360],{"class":205,"line":206},[203,134361,134362],{"class":272},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[203,134364,134365,134368],{"class":205,"line":124},[203,134366,134367],{"class":2052},".icon",[203,134369,15662],{"class":213},[203,134371,134372,134374,134376,134378,134380],{"class":205,"line":1269},[203,134373,70626],{"class":262},[203,134375,51495],{"class":213},[203,134377,914],{"class":262},[203,134379,51550],{"class":209},[203,134381,1380],{"class":213},[203,134383,134384,134386,134388,134390,134392],{"class":205,"line":1284},[203,134385,70846],{"class":262},[203,134387,51495],{"class":213},[203,134389,914],{"class":262},[203,134391,51550],{"class":209},[203,134393,1380],{"class":213},[203,134395,134396,134398,134400,134402,134404,134407,134409,134411],{"class":205,"line":1290},[203,134397,70669],{"class":262},[203,134399,51495],{"class":213},[203,134401,61784],{"class":262},[203,134403,214],{"class":213},[203,134405,134406],{"class":5306},"sprites.png",[203,134408,13804],{"class":213},[203,134410,61794],{"class":262},[203,134412,1380],{"class":213},[203,134414,134415,134417,134419,134421,134423,134426,134428],{"class":205,"line":1304},[203,134416,128870],{"class":262},[203,134418,51495],{"class":213},[203,134420,51821],{"class":262},[203,134422,51550],{"class":209},[203,134424,134425],{"class":262}," -20",[203,134427,51550],{"class":209},[203,134429,1380],{"class":213},[203,134431,134432],{"class":205,"line":1310},[203,134433,1654],{"class":213},[25,134435],{"style":126466,"src":134436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134438,134439],{},"在前端中坐标轴的正方向是右和下",[14,134441,134443],{"id":134442},"_123-字体图标","12.3 字体图标",[174,134445,134447],{"id":134446},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134449,134450],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134452,134453],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134455,134456],{},"1.图片文件还是比较大的。",[19,134458,134459],{},"2.图片本身放大和缩小会失真。",[19,134461,134462],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134464,134465,134466,25798],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[363,134467,134468],{},"字体图标 iconfont",[19,134470,134471,134474,134475,28443],{},[363,134472,134473],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[363,134476,134477],{},"展示的是图标，本质属于字体",[174,134479,134481],{"id":134480},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1221,134483,134484,134489,134492,134495,134498],{},[160,134485,134486,134488],{},[363,134487,25934],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[160,134490,134491],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[160,134493,134494],{},"兼容性：几乎支持所有的浏览器，请放心使用",[160,134496,134497],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[160,134499,134500],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[174,134502,134504],{"id":134503},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1221,134506,134507],{},[160,134508,134509,134510],{},"icomoon字体库：",[452,134511,134514],{"href":134512,"rel":134513},"http:\u002F\u002Ficomoon.io\u002F",[23956],"http:\u002F\u002Ficomoon.io",[19,134516,134517],{},"进去之后点icomoon app",[25,134519],{"style":126466,"src":134520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,134522,134523],{},"可以对其编辑：",[25,134525],{"style":126466,"src":134526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,134528,134529],{},"生成字体：",[25,134531],{"style":126466,"src":134532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,134534,134535],{},"下载：",[25,134537],{"style":126466,"src":134538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1221,134540,134541],{},[160,134542,134543,134544],{},"阿里iconfont字体库： ",[452,134545,134546],{"href":134546,"rel":134547},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23956],[174,134549,134551],{"id":134550},"_1234-字体图标的引入","12.3.4 字体图标的引入",[157,134553,134554],{},[160,134555,134556,134557,134560],{},"把下载包里面的 ",[363,134558,134559],{},"fonts"," 文件夹放入页面根目录下",[25,134562],{"style":126466,"src":134563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[157,134565,134566],{"start":124},[160,134567,134568],{},"字体文件格式",[351,134570,134571,134580],{},[354,134572,134573],{},[357,134574,134575,134578],{},[360,134576,134577],{"align":23827},"格式",[360,134579,23831],{"align":23827},[398,134581,134582,134592,134602,134612],{},[357,134583,134584,134589],{},[403,134585,134586],{"align":23827},[363,134587,134588],{},".ttf",[403,134590,134591],{"align":23827},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[357,134593,134594,134599],{},[403,134595,134596],{"align":23827},[363,134597,134598],{},".woff",[403,134600,134601],{"align":23827},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[357,134603,134604,134609],{},[403,134605,134606],{"align":23827},[363,134607,134608],{},".eot",[403,134610,134611],{"align":23827},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[357,134613,134614,134619],{},[403,134615,134616],{"align":23827},[363,134617,134618],{},"svg",[403,134620,134621],{"align":23827},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[157,134623,134624],{"start":1269},[160,134625,134626],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[194,134628,134630],{"className":126610,"code":134629,"language":126612,"meta":27,"style":27},"\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",[200,134631,134632,134637,134644,134656,134672,134697,134718,134738,134758,134762,134768,134778,134789],{"__ignoreMap":27},[203,134633,134634],{"class":205,"line":206},[203,134635,134636],{"class":272},"\u002F* 引入字体图标 *\u002F\n",[203,134638,134639,134642],{"class":205,"line":124},[203,134640,134641],{"class":209},"@font-face",[203,134643,15662],{"class":213},[203,134645,134646,134649,134651,134654],{"class":205,"line":1269},[203,134647,134648],{"class":262},"  font-family",[203,134650,51495],{"class":213},[203,134652,134653],{"class":318},"'icomoon'",[203,134655,1380],{"class":213},[203,134657,134658,134661,134663,134665,134667,134670],{"class":205,"line":1284},[203,134659,134660],{"class":262},"  src",[203,134662,51495],{"class":213},[203,134664,61784],{"class":262},[203,134666,214],{"class":213},[203,134668,134669],{"class":318},"'fonts\u002Ficomoon.eot'",[203,134671,2808],{"class":213},[203,134673,134674,134676,134678,134680,134682,134685,134687,134690,134692,134695],{"class":205,"line":1290},[203,134675,134660],{"class":262},[203,134677,51495],{"class":213},[203,134679,61784],{"class":262},[203,134681,214],{"class":213},[203,134683,134684],{"class":318},"'fonts\u002Ficomoon.eot?#iefix'",[203,134686,13804],{"class":213},[203,134688,134689],{"class":262},"format",[203,134691,214],{"class":213},[203,134693,134694],{"class":318},"'embedded-opentype'",[203,134696,38105],{"class":213},[203,134698,134699,134702,134704,134707,134709,134711,134713,134716],{"class":205,"line":1304},[203,134700,134701],{"class":262},"       url",[203,134703,214],{"class":213},[203,134705,134706],{"class":318},"'fonts\u002Ficomoon.woff'",[203,134708,13804],{"class":213},[203,134710,134689],{"class":262},[203,134712,214],{"class":213},[203,134714,134715],{"class":318},"'woff'",[203,134717,38105],{"class":213},[203,134719,134720,134722,134724,134727,134729,134731,134733,134736],{"class":205,"line":1310},[203,134721,134701],{"class":262},[203,134723,214],{"class":213},[203,134725,134726],{"class":318},"'fonts\u002Ficomoon.ttf'",[203,134728,13804],{"class":213},[203,134730,134689],{"class":262},[203,134732,214],{"class":213},[203,134734,134735],{"class":318},"'truetype'",[203,134737,38105],{"class":213},[203,134739,134740,134742,134744,134747,134749,134751,134753,134756],{"class":205,"line":1401},[203,134741,134701],{"class":262},[203,134743,214],{"class":213},[203,134745,134746],{"class":318},"'fonts\u002Ficomoon.svg#icomoon'",[203,134748,13804],{"class":213},[203,134750,134689],{"class":262},[203,134752,214],{"class":213},[203,134754,134755],{"class":318},"'svg'",[203,134757,2808],{"class":213},[203,134759,134760],{"class":205,"line":1407},[203,134761,1654],{"class":213},[203,134763,134764,134766],{"class":205,"line":1419},[203,134765,134367],{"class":2052},[203,134767,15662],{"class":213},[203,134769,134770,134772,134774,134776],{"class":205,"line":1701},[203,134771,134648],{"class":262},[203,134773,51495],{"class":213},[203,134775,134653],{"class":318},[203,134777,1380],{"class":213},[203,134779,134780,134783,134785,134787],{"class":205,"line":1706},[203,134781,134782],{"class":262},"  font-style",[203,134784,51495],{"class":213},[203,134786,63899],{"class":262},[203,134788,1380],{"class":213},[203,134790,134791],{"class":205,"line":1712},[203,134792,1654],{"class":213},[19,134794,134795],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[25,134797],{"style":126466,"src":134798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[157,134800,134801],{"start":1284},[160,134802,134803],{},"添加字体",[25,134805],{"style":126466,"src":134806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,134808,134809],{},"复制：",[25,134811],{"style":126466,"src":134812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,134814,134815],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[157,134817,134818],{"start":1290},[160,134819,134820],{},"代码展示：",[194,134822,134823],{"className":126610,"code":134629,"language":126612,"meta":27,"style":27},[200,134824,134825,134829,134835,134845,134859,134881,134899,134917,134935,134939,134945,134955,134965],{"__ignoreMap":27},[203,134826,134827],{"class":205,"line":206},[203,134828,134636],{"class":272},[203,134830,134831,134833],{"class":205,"line":124},[203,134832,134641],{"class":209},[203,134834,15662],{"class":213},[203,134836,134837,134839,134841,134843],{"class":205,"line":1269},[203,134838,134648],{"class":262},[203,134840,51495],{"class":213},[203,134842,134653],{"class":318},[203,134844,1380],{"class":213},[203,134846,134847,134849,134851,134853,134855,134857],{"class":205,"line":1284},[203,134848,134660],{"class":262},[203,134850,51495],{"class":213},[203,134852,61784],{"class":262},[203,134854,214],{"class":213},[203,134856,134669],{"class":318},[203,134858,2808],{"class":213},[203,134860,134861,134863,134865,134867,134869,134871,134873,134875,134877,134879],{"class":205,"line":1290},[203,134862,134660],{"class":262},[203,134864,51495],{"class":213},[203,134866,61784],{"class":262},[203,134868,214],{"class":213},[203,134870,134684],{"class":318},[203,134872,13804],{"class":213},[203,134874,134689],{"class":262},[203,134876,214],{"class":213},[203,134878,134694],{"class":318},[203,134880,38105],{"class":213},[203,134882,134883,134885,134887,134889,134891,134893,134895,134897],{"class":205,"line":1304},[203,134884,134701],{"class":262},[203,134886,214],{"class":213},[203,134888,134706],{"class":318},[203,134890,13804],{"class":213},[203,134892,134689],{"class":262},[203,134894,214],{"class":213},[203,134896,134715],{"class":318},[203,134898,38105],{"class":213},[203,134900,134901,134903,134905,134907,134909,134911,134913,134915],{"class":205,"line":1310},[203,134902,134701],{"class":262},[203,134904,214],{"class":213},[203,134906,134726],{"class":318},[203,134908,13804],{"class":213},[203,134910,134689],{"class":262},[203,134912,214],{"class":213},[203,134914,134735],{"class":318},[203,134916,38105],{"class":213},[203,134918,134919,134921,134923,134925,134927,134929,134931,134933],{"class":205,"line":1401},[203,134920,134701],{"class":262},[203,134922,214],{"class":213},[203,134924,134746],{"class":318},[203,134926,13804],{"class":213},[203,134928,134689],{"class":262},[203,134930,214],{"class":213},[203,134932,134755],{"class":318},[203,134934,2808],{"class":213},[203,134936,134937],{"class":205,"line":1407},[203,134938,1654],{"class":213},[203,134940,134941,134943],{"class":205,"line":1419},[203,134942,134367],{"class":2052},[203,134944,15662],{"class":213},[203,134946,134947,134949,134951,134953],{"class":205,"line":1701},[203,134948,134648],{"class":262},[203,134950,51495],{"class":213},[203,134952,134653],{"class":318},[203,134954,1380],{"class":213},[203,134956,134957,134959,134961,134963],{"class":205,"line":1706},[203,134958,134782],{"class":262},[203,134960,51495],{"class":213},[203,134962,63899],{"class":262},[203,134964,1380],{"class":213},[203,134966,134967],{"class":205,"line":1712},[203,134968,1654],{"class":213},[25,134970],{"style":126466,"src":134971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,134973,134974],{},"更加细节展示：",[157,134976,134977],{},[160,134978,134979],{},"html 标签内添加小图标",[25,134981],{"style":126466,"src":134982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[157,134984,134985],{"start":124},[160,134986,134987],{},"给标签定义字体",[194,134989,134990],{"className":127357,"code":130714,"language":127359,"meta":27,"style":27},[200,134991,134992,134996,135010,135014],{"__ignoreMap":27},[203,134993,134994],{"class":205,"line":206},[203,134995,130721],{"class":272},[203,134997,134998,135000,135002,135004,135006,135008],{"class":205,"line":124},[203,134999,1124],{"class":213},[203,135001,51669],{"class":51358},[203,135003,53544],{"class":2052},[203,135005,259],{"class":213},[203,135007,130734],{"class":318},[203,135009,51365],{"class":213},[203,135011,135012],{"class":205,"line":1269},[203,135013,130741],{"class":213},[203,135015,135016,135018,135020],{"class":205,"line":1284},[203,135017,51843],{"class":213},[203,135019,51669],{"class":51358},[203,135021,51365],{"class":213},[19,135023,135024],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[25,135026],{"style":126466,"src":135027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[174,135029,135031],{"id":135030},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135033,135034],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135036,135037,135038,135041],{},"把压缩包里面的 ",[363,135039,135040],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135043,135044],{},"打开网站，点下方：",[25,135046],{"style":126466,"src":135047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[25,135049],{"style":126466,"src":135050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[25,135052],{"style":126466,"src":135053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135055,135056],{},"点yes重新加载",[19,135058,135059],{},"然后重复之前的操作就可以实现了",[19,135061,135062],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[174,135064,135066],{"id":135065},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[25,135068],{"style":126466,"src":135069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5216,135071,135072],{},"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":27,"searchDepth":124,"depth":124,"links":135074},[135075,135081,135086],{"id":133678,"depth":124,"text":133679,"children":135076},[135077,135078,135079,135080],{"id":133690,"depth":1269,"text":133691},{"id":133719,"depth":1269,"text":133720},{"id":133747,"depth":1269,"text":133748},{"id":133805,"depth":1269,"text":133806},{"id":134277,"depth":124,"text":134278,"children":135082},[135083,135084,135085],{"id":134281,"depth":1269,"text":134282},{"id":134326,"depth":1269,"text":134327},{"id":134342,"depth":1269,"text":134343},{"id":134442,"depth":124,"text":134443,"children":135087},[135088,135089,135090,135091,135092,135093],{"id":134446,"depth":1269,"text":134447},{"id":134480,"depth":1269,"text":134481},{"id":134503,"depth":1269,"text":134504},{"id":134550,"depth":1269,"text":134551},{"id":135030,"depth":1269,"text":135031},{"id":135065,"depth":1269,"text":135066},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133670,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135100,"title":135101,"body":135102,"description":23467,"extension":129,"meta":136329,"navigation":131,"path":136330,"seo":136331,"stem":136332,"__hash__":136333},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135103,"toc":136310},[135104,135107,135111,135114,135128,135196,135226,135229,135233,135237,135339,135386,135390,135393,135396,135430,135433,135436,135439,135442,135445,135448,135451,135453,135456,135459,135462,135465,135468,135471,135474,135502,135505,135509,135512,135519,135522,135525,135551,135554,135558,135561,135564,135571,135575,135578,135580,135612,135615,135618,135630,135636,135639,135642,135645,135647,135651,135654,135657,135660,135705,135709,135711,135714,135721,135763,135766,135770,135775,135789,135793,135796,135799,135802,135805,135808,135842,135845,135848,135902,135905,135908,135911,135914,135966,135969,135972,136021,136025,136027,136030,136033,136036,136039,136042,136100,136103,136109,136112,136115,136147,136150,136154,136158,136161,136193,136197,136200,136244,136248,136251,136254,136257,136260,136263,136266,136269,136271,136274,136276,136279,136282,136285,136288,136293,136296,136298,136301,136304,136307],[10,135105,135101],{"id":135106},"_13-界面样式与布局技巧",[14,135108,135110],{"id":135109},"_131-css三角","13.1 css三角",[19,135112,135113],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1221,135115,135116,135119,135122,135125],{},[160,135117,135118],{},"用css 边框可以模拟三角效果",[160,135120,135121],{},"宽度高度为0",[160,135123,135124],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[160,135126,135127],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[194,135129,135131],{"className":126610,"code":135130,"language":126612,"meta":27,"style":27},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[200,135132,135133,135138,135145,135155,135165,135181,135192],{"__ignoreMap":27},[203,135134,135135],{"class":205,"line":206},[203,135136,135137],{"class":272},"\u002F* CSS 实现三角形 *\u002F\n",[203,135139,135140,135143],{"class":205,"line":124},[203,135141,135142],{"class":2052},".triangle",[203,135144,15662],{"class":213},[203,135146,135147,135149,135151,135153],{"class":205,"line":1269},[203,135148,70626],{"class":262},[203,135150,51495],{"class":213},[203,135152,405],{"class":262},[203,135154,1380],{"class":213},[203,135156,135157,135159,135161,135163],{"class":205,"line":1284},[203,135158,70846],{"class":262},[203,135160,51495],{"class":213},[203,135162,405],{"class":262},[203,135164,1380],{"class":213},[203,135166,135167,135169,135171,135173,135175,135177,135179],{"class":205,"line":1290},[203,135168,70954],{"class":262},[203,135170,51495],{"class":213},[203,135172,660],{"class":262},[203,135174,51550],{"class":209},[203,135176,51579],{"class":262},[203,135178,64049],{"class":262},[203,135180,1380],{"class":213},[203,135182,135183,135186,135188,135190],{"class":205,"line":1304},[203,135184,135185],{"class":262},"  border-bottom-color",[203,135187,51495],{"class":213},[203,135189,62427],{"class":262},[203,135191,1380],{"class":213},[203,135193,135194],{"class":205,"line":1310},[203,135195,1654],{"class":213},[194,135197,135198],{"className":126610,"code":130767,"language":126612,"meta":27,"style":27},[200,135199,135200,135206,135222],{"__ignoreMap":27},[203,135201,135202,135204],{"class":205,"line":206},[203,135203,51669],{"class":51358},[203,135205,15662],{"class":213},[203,135207,135208,135210,135212,135214,135216,135218,135220],{"class":205,"line":124},[203,135209,70954],{"class":262},[203,135211,51495],{"class":213},[203,135213,431],{"class":262},[203,135215,51550],{"class":209},[203,135217,51579],{"class":262},[203,135219,130002],{"class":262},[203,135221,1380],{"class":213},[203,135223,135224],{"class":205,"line":1269},[203,135225,1654],{"class":213},[25,135227],{"style":126466,"src":135228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135230,135232],{"id":135231},"_132-css用户界面样式","13.2 css用户界面样式",[174,135234,135236],{"id":135235},"_1321-鼠标样式","13.2.1 鼠标样式",[194,135238,135240],{"className":126610,"code":135239,"language":126612,"meta":27,"style":27},"\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",[200,135241,135242,135247,135266,135284,135303,135320],{"__ignoreMap":27},[203,135243,135244],{"class":205,"line":206},[203,135245,135246],{"class":272},"\u002F* 鼠标样式 *\u002F\n",[203,135248,135249,135251,135253,135256,135258,135260,135263],{"class":205,"line":124},[203,135250,51669],{"class":51358},[203,135252,79865],{"class":213},[203,135254,135255],{"class":262},"cursor",[203,135257,51495],{"class":213},[203,135259,62088],{"class":262},[203,135261,135262],{"class":213},"; }   ",[203,135264,135265],{"class":272},"\u002F* 手型 *\u002F\n",[203,135267,135268,135270,135272,135274,135276,135279,135281],{"class":205,"line":1269},[203,135269,51669],{"class":51358},[203,135271,79865],{"class":213},[203,135273,135255],{"class":262},[203,135275,51495],{"class":213},[203,135277,135278],{"class":262},"default",[203,135280,135262],{"class":213},[203,135282,135283],{"class":272},"\u002F* 默认 *\u002F\n",[203,135285,135286,135288,135290,135292,135294,135297,135300],{"class":205,"line":1284},[203,135287,51669],{"class":51358},[203,135289,79865],{"class":213},[203,135291,135255],{"class":262},[203,135293,51495],{"class":213},[203,135295,135296],{"class":262},"move",[203,135298,135299],{"class":213},"; }      ",[203,135301,135302],{"class":272},"\u002F* 移动 *\u002F\n",[203,135304,135305,135307,135309,135311,135313,135315,135317],{"class":205,"line":1290},[203,135306,51669],{"class":51358},[203,135308,79865],{"class":213},[203,135310,135255],{"class":262},[203,135312,51495],{"class":213},[203,135314,5277],{"class":262},[203,135316,135299],{"class":213},[203,135318,135319],{"class":272},"\u002F* 文本 *\u002F\n",[203,135321,135322,135324,135326,135328,135330,135333,135336],{"class":205,"line":1304},[203,135323,51669],{"class":51358},[203,135325,79865],{"class":213},[203,135327,135255],{"class":262},[203,135329,51495],{"class":213},[203,135331,135332],{"class":262},"not-allowed",[203,135334,135335],{"class":213},"; } ",[203,135337,135338],{"class":272},"\u002F* 禁止 *\u002F\n",[351,135340,135341,135349],{},[354,135342,135343],{},[357,135344,135345,135347],{},[360,135346,127074],{"align":23827},[360,135348,27547],{"align":23827},[398,135350,135351,135358,135365,135372,135379],{},[357,135352,135353,135355],{},[403,135354,135278],{"align":23827},[403,135356,135357],{"align":23827},"小白 默认",[357,135359,135360,135362],{},[403,135361,62088],{"align":23827},[403,135363,135364],{"align":23827},"小手",[357,135366,135367,135369],{},[403,135368,135296],{"align":23827},[403,135370,135371],{"align":23827},"移动",[357,135373,135374,135376],{},[403,135375,5277],{"align":23827},[403,135377,135378],{"align":23827},"文本",[357,135380,135381,135383],{},[403,135382,135332],{"align":23827},[403,135384,135385],{"align":23827},"禁止",[174,135387,135389],{"id":135388},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135391,135392],{},"去除表单轮廓线",[19,135394,135395],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[194,135397,135398],{"className":126610,"code":129974,"language":126612,"meta":27,"style":27},[200,135399,135400,135404,135410,135426],{"__ignoreMap":27},[203,135401,135402],{"class":205,"line":206},[203,135403,129981],{"class":272},[203,135405,135406,135408],{"class":205,"line":124},[203,135407,51669],{"class":51358},[203,135409,15662],{"class":213},[203,135411,135412,135414,135416,135418,135420,135422,135424],{"class":205,"line":1269},[203,135413,70954],{"class":262},[203,135415,51495],{"class":213},[203,135417,431],{"class":262},[203,135419,51550],{"class":209},[203,135421,51579],{"class":262},[203,135423,130002],{"class":262},[203,135425,1380],{"class":213},[203,135427,135428],{"class":205,"line":1284},[203,135429,1654],{"class":213},[19,135431,135432],{},"文本域：",[25,135434],{"style":126466,"src":135435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135437,135438],{},"此时会有一个空白区域",[25,135440],{"style":126466,"src":135441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135443,135444],{},"写在同一行就不会出现这个问题",[25,135446],{"style":126466,"src":135447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135449,135450],{},"文本域是行内块元素，一定记住！！！",[19,135452,98291],{},[25,135454],{"style":126466,"src":135455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135457,135458],{},"文本域尽量放在一行",[19,135460,135461],{},"知识回顾：cols是列，rols是行",[25,135463],{"style":126466,"src":135464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135466,135467],{},"它可以进行拖动，显然这是我们不愿意看到的",[25,135469],{"style":126466,"src":135470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135472,135473],{},"使用resize进行解决",[194,135475,135477],{"className":126610,"code":135476,"language":126612,"meta":27,"style":27},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[200,135478,135479,135485,135498],{"__ignoreMap":27},[203,135480,135481,135483],{"class":205,"line":206},[203,135482,53879],{"class":51358},[203,135484,15662],{"class":213},[203,135486,135487,135489,135491,135493,135495],{"class":205,"line":124},[203,135488,70856],{"class":262},[203,135490,51495],{"class":213},[203,135492,54795],{"class":262},[203,135494,130473],{"class":213},[203,135496,135497],{"class":272},"\u002F* 取消表单轮廓线 *\u002F\n",[203,135499,135500],{"class":205,"line":1269},[203,135501,1654],{"class":213},[19,135503,135504],{},"此时就无法通过右下方实现拖动了",[174,135506,135508],{"id":135507},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135510,135511],{},"实现一个盒子中的文字和图片对齐",[19,135513,135514,135515,135518],{},"用于设置一个元素的 ",[363,135516,135517],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135520,135521],{},"图片和文字默认是基线对齐",[25,135523],{"style":126466,"src":135524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[194,135526,135527],{"className":126610,"code":135476,"language":126612,"meta":27,"style":27},[200,135528,135529,135535,135547],{"__ignoreMap":27},[203,135530,135531,135533],{"class":205,"line":206},[203,135532,53879],{"class":51358},[203,135534,15662],{"class":213},[203,135536,135537,135539,135541,135543,135545],{"class":205,"line":124},[203,135538,70856],{"class":262},[203,135540,51495],{"class":213},[203,135542,54795],{"class":262},[203,135544,130473],{"class":213},[203,135546,135497],{"class":272},[203,135548,135549],{"class":205,"line":1269},[203,135550,1654],{"class":213},[25,135552],{"style":126466,"src":135553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22088,135555,135557],{"id":135556},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,135559,135560],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[25,135562],{"style":126466,"src":135563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,135565,135566,135567,135570],{},"此时可以给图片、表单这些行内块元素的 ",[363,135568,135569],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22088,135572,135574],{"id":135573},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,135576,135577],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,135579,14723],{},[194,135581,135583],{"className":126610,"code":135582,"language":126612,"meta":27,"style":27},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[200,135584,135585,135590,135596,135608],{"__ignoreMap":27},[203,135586,135587],{"class":205,"line":206},[203,135588,135589],{"class":272},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[203,135591,135592,135594],{"class":205,"line":124},[203,135593,25],{"class":51358},[203,135595,15662],{"class":213},[203,135597,135598,135601,135603,135606],{"class":205,"line":1269},[203,135599,135600],{"class":262},"  vertical-align",[203,135602,51495],{"class":213},[203,135604,135605],{"class":262},"middle",[203,135607,1380],{"class":213},[203,135609,135610],{"class":205,"line":1284},[203,135611,1654],{"class":213},[25,135613],{"style":126466,"src":135614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,135616,135617],{},"主要解决方法有两种：",[157,135619,135620],{},[160,135621,135622,135625,135626,135629],{},[363,135623,135624],{},"给图片"," 添加 ",[363,135627,135628],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,135631,135632,135633],{},"2.把图片转换为块级元素 ",[363,135634,135635],{},"display: block",[19,135637,135638],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,135640,135641],{},"img {",[19,135643,135644],{},"vertical-align:middle;",[19,135646,1160],{},[174,135648,135650],{"id":135649},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,135652,135653],{},"效果：",[25,135655],{"style":126466,"src":135656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,135658,135659],{},"单行文本溢出显示省略号--必须满足三个条件：",[194,135661,135663],{"className":126610,"code":135662,"language":126612,"meta":27,"style":27},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[200,135664,135665,135670,135676,135686,135691,135701],{"__ignoreMap":27},[203,135666,135667],{"class":205,"line":206},[203,135668,135669],{"class":272},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[203,135671,135672,135674],{"class":205,"line":124},[203,135673,25],{"class":51358},[203,135675,15662],{"class":213},[203,135677,135678,135680,135682,135684],{"class":205,"line":1269},[203,135679,135600],{"class":262},[203,135681,51495],{"class":213},[203,135683,135605],{"class":262},[203,135685,1380],{"class":213},[203,135687,135688],{"class":205,"line":1284},[203,135689,135690],{"class":272},"  \u002F* 或 *\u002F\n",[203,135692,135693,135695,135697,135699],{"class":205,"line":1290},[203,135694,128226],{"class":262},[203,135696,51495],{"class":213},[203,135698,60927],{"class":262},[203,135700,1380],{"class":213},[203,135702,135703],{"class":205,"line":1304},[203,135704,1654],{"class":213},[174,135706,135708],{"id":135707},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,135710,135653],{},[25,135712],{"style":126466,"src":135713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,135715,135716,135717,135720],{},"多行文本溢出显示省略号， ",[363,135718,135719],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[194,135722,135723],{"className":126610,"code":135662,"language":126612,"meta":27,"style":27},[200,135724,135725,135729,135735,135745,135749,135759],{"__ignoreMap":27},[203,135726,135727],{"class":205,"line":206},[203,135728,135669],{"class":272},[203,135730,135731,135733],{"class":205,"line":124},[203,135732,25],{"class":51358},[203,135734,15662],{"class":213},[203,135736,135737,135739,135741,135743],{"class":205,"line":1269},[203,135738,135600],{"class":262},[203,135740,51495],{"class":213},[203,135742,135605],{"class":262},[203,135744,1380],{"class":213},[203,135746,135747],{"class":205,"line":1284},[203,135748,135690],{"class":272},[203,135750,135751,135753,135755,135757],{"class":205,"line":1290},[203,135752,128226],{"class":262},[203,135754,51495],{"class":213},[203,135756,60927],{"class":262},[203,135758,1380],{"class":213},[203,135760,135761],{"class":205,"line":1304},[203,135762,1654],{"class":213},[19,135764,135765],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,135767,135769],{"id":135768},"_133-常见布局技巧","13.3 常见布局技巧",[19,135771,135772],{},[363,135773,135774],{},"巧妙利用一个技术更快更好的布局：",[157,135776,135777,135780,135783,135786],{},[160,135778,135779],{},"margin负值的运用",[160,135781,135782],{},"文字围绕浮动元素",[160,135784,135785],{},"行内块的巧妙运用",[160,135787,135788],{},"CSS三角强化",[174,135790,135792],{"id":135791},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,135794,135795],{},"应用场景：",[25,135797],{"style":126466,"src":135798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[25,135800],{"style":126466,"src":135801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,135803,135804],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,135806,135807],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[194,135809,135810],{"className":126610,"code":129974,"language":126612,"meta":27,"style":27},[200,135811,135812,135816,135822,135838],{"__ignoreMap":27},[203,135813,135814],{"class":205,"line":206},[203,135815,129981],{"class":272},[203,135817,135818,135820],{"class":205,"line":124},[203,135819,51669],{"class":51358},[203,135821,15662],{"class":213},[203,135823,135824,135826,135828,135830,135832,135834,135836],{"class":205,"line":1269},[203,135825,70954],{"class":262},[203,135827,51495],{"class":213},[203,135829,431],{"class":262},[203,135831,51550],{"class":209},[203,135833,51579],{"class":262},[203,135835,130002],{"class":262},[203,135837,1380],{"class":213},[203,135839,135840],{"class":205,"line":1284},[203,135841,1654],{"class":213},[25,135843],{"style":126466,"src":135844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,135846,135847],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[194,135849,135851],{"className":126610,"code":135850,"language":126612,"meta":27,"style":27},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[200,135852,135853,135858,135864,135874,135886,135898],{"__ignoreMap":27},[203,135854,135855],{"class":205,"line":206},[203,135856,135857],{"class":272},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[203,135859,135860,135862],{"class":205,"line":124},[203,135861,130458],{"class":2052},[203,135863,15662],{"class":213},[203,135865,135866,135868,135870,135872],{"class":205,"line":1269},[203,135867,132416],{"class":262},[203,135869,51495],{"class":213},[203,135871,54822],{"class":262},[203,135873,1380],{"class":213},[203,135875,135876,135878,135880,135882,135884],{"class":205,"line":1284},[203,135877,132430],{"class":262},[203,135879,51495],{"class":213},[203,135881,660],{"class":262},[203,135883,51550],{"class":209},[203,135885,1380],{"class":213},[203,135887,135888,135890,135892,135894,135896],{"class":205,"line":1290},[203,135889,132447],{"class":262},[203,135891,51495],{"class":213},[203,135893,914],{"class":262},[203,135895,51550],{"class":209},[203,135897,1380],{"class":213},[203,135899,135900],{"class":205,"line":1304},[203,135901,1654],{"class":213},[19,135903,135904],{},"加上上述代码会发现：",[25,135906],{"style":126466,"src":135907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,135909,135910],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,135912,135913],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[194,135915,135916],{"className":126610,"code":135850,"language":126612,"meta":27,"style":27},[200,135917,135918,135922,135928,135938,135950,135962],{"__ignoreMap":27},[203,135919,135920],{"class":205,"line":206},[203,135921,135857],{"class":272},[203,135923,135924,135926],{"class":205,"line":124},[203,135925,130458],{"class":2052},[203,135927,15662],{"class":213},[203,135929,135930,135932,135934,135936],{"class":205,"line":1269},[203,135931,132416],{"class":262},[203,135933,51495],{"class":213},[203,135935,54822],{"class":262},[203,135937,1380],{"class":213},[203,135939,135940,135942,135944,135946,135948],{"class":205,"line":1284},[203,135941,132430],{"class":262},[203,135943,51495],{"class":213},[203,135945,660],{"class":262},[203,135947,51550],{"class":209},[203,135949,1380],{"class":213},[203,135951,135952,135954,135956,135958,135960],{"class":205,"line":1290},[203,135953,132447],{"class":262},[203,135955,51495],{"class":213},[203,135957,914],{"class":262},[203,135959,51550],{"class":209},[203,135961,1380],{"class":213},[203,135963,135964],{"class":205,"line":1304},[203,135965,1654],{"class":213},[19,135967,135968],{},"解决方式2：",[19,135970,135971],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[194,135973,135975],{"className":126610,"code":135974,"language":126612,"meta":27,"style":27},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[200,135976,135977,135983,135993,136005,136017],{"__ignoreMap":27},[203,135978,135979,135981],{"class":205,"line":206},[203,135980,51669],{"class":51358},[203,135982,15662],{"class":213},[203,135984,135985,135987,135989,135991],{"class":205,"line":124},[203,135986,132416],{"class":262},[203,135988,51495],{"class":213},[203,135990,54822],{"class":262},[203,135992,1380],{"class":213},[203,135994,135995,135997,135999,136001,136003],{"class":205,"line":1269},[203,135996,132430],{"class":262},[203,135998,51495],{"class":213},[203,136000,660],{"class":262},[203,136002,51550],{"class":209},[203,136004,1380],{"class":213},[203,136006,136007,136009,136011,136013,136015],{"class":205,"line":1284},[203,136008,132447],{"class":262},[203,136010,51495],{"class":213},[203,136012,914],{"class":262},[203,136014,51550],{"class":209},[203,136016,1380],{"class":213},[203,136018,136019],{"class":205,"line":1290},[203,136020,1654],{"class":213},[174,136022,136024],{"id":136023},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136026,135795],{},[25,136028],{"style":126466,"src":136029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136031,136032],{},"实现结构图：",[25,136034],{"style":126466,"src":136035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136037,136038],{},"巧妙运用浮动元素不会压住文字的特性",[19,136040,136041],{},"代码显示：",[194,136043,136045],{"className":126610,"code":136044,"language":126612,"meta":27,"style":27},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[200,136046,136047,136053,136063,136067,136072,136076,136082,136096],{"__ignoreMap":27},[203,136048,136049,136051],{"class":205,"line":206},[203,136050,130458],{"class":2052},[203,136052,15662],{"class":213},[203,136054,136055,136057,136059,136061],{"class":205,"line":124},[203,136056,131090],{"class":262},[203,136058,51495],{"class":213},[203,136060,23827],{"class":262},[203,136062,1380],{"class":213},[203,136064,136065],{"class":205,"line":1269},[203,136066,1654],{"class":213},[203,136068,136069],{"class":205,"line":1284},[203,136070,136071],{"class":213},"```Css\n",[203,136073,136074],{"class":205,"line":1290},[203,136075,130453],{"class":272},[203,136077,136078,136080],{"class":205,"line":1304},[203,136079,130458],{"class":2052},[203,136081,15662],{"class":213},[203,136083,136084,136086,136088,136090,136092,136094],{"class":205,"line":1310},[203,136085,70528],{"class":262},[203,136087,51495],{"class":213},[203,136089,405],{"class":262},[203,136091,51614],{"class":262},[203,136093,130473],{"class":213},[203,136095,130476],{"class":272},[203,136097,136098],{"class":205,"line":1401},[203,136099,1654],{"class":213},[19,136101,136102],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[194,136104,136107],{"className":136105,"code":136106,"language":5277},[5275],"\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",[200,136108,136106],{"__ignoreMap":27},[25,136110],{"style":126466,"src":136111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136113,136114],{},"最终展示结果：",[194,136116,136117],{"className":126610,"code":130446,"language":126612,"meta":27,"style":27},[200,136118,136119,136123,136129,136143],{"__ignoreMap":27},[203,136120,136121],{"class":205,"line":206},[203,136122,130453],{"class":272},[203,136124,136125,136127],{"class":205,"line":124},[203,136126,130458],{"class":2052},[203,136128,15662],{"class":213},[203,136130,136131,136133,136135,136137,136139,136141],{"class":205,"line":1269},[203,136132,70528],{"class":262},[203,136134,51495],{"class":213},[203,136136,405],{"class":262},[203,136138,51614],{"class":262},[203,136140,130473],{"class":213},[203,136142,130476],{"class":272},[203,136144,136145],{"class":205,"line":1284},[203,136146,1654],{"class":213},[25,136148],{"style":126466,"src":136149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136151,136153],{"id":136152},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[174,136155,136157],{"id":136156},"_1341-原理","13.4.1 原理",[25,136159],{"style":126466,"src":136160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[194,136162,136163],{"className":126610,"code":130446,"language":126612,"meta":27,"style":27},[200,136164,136165,136169,136175,136189],{"__ignoreMap":27},[203,136166,136167],{"class":205,"line":206},[203,136168,130453],{"class":272},[203,136170,136171,136173],{"class":205,"line":124},[203,136172,130458],{"class":2052},[203,136174,15662],{"class":213},[203,136176,136177,136179,136181,136183,136185,136187],{"class":205,"line":1269},[203,136178,70528],{"class":262},[203,136180,51495],{"class":213},[203,136182,405],{"class":262},[203,136184,51614],{"class":262},[203,136186,130473],{"class":213},[203,136188,130476],{"class":272},[203,136190,136191],{"class":205,"line":1284},[203,136192,1654],{"class":213},[174,136194,136196],{"id":136195},"_1342-实例","13.4.2 实例",[25,136198],{"style":126466,"src":136199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[194,136201,136202],{"className":126610,"code":131076,"language":126612,"meta":27,"style":27},[200,136203,136204,136210,136220,136224,136230,136240],{"__ignoreMap":27},[203,136205,136206,136208],{"class":205,"line":206},[203,136207,131083],{"class":2052},[203,136209,15662],{"class":213},[203,136211,136212,136214,136216,136218],{"class":205,"line":124},[203,136213,131090],{"class":262},[203,136215,51495],{"class":213},[203,136217,23827],{"class":262},[203,136219,1380],{"class":213},[203,136221,136222],{"class":205,"line":1269},[203,136223,1654],{"class":213},[203,136225,136226,136228],{"class":205,"line":1284},[203,136227,131105],{"class":2052},[203,136229,15662],{"class":213},[203,136231,136232,136234,136236,136238],{"class":205,"line":1290},[203,136233,131090],{"class":262},[203,136235,51495],{"class":213},[203,136237,72580],{"class":262},[203,136239,1380],{"class":213},[203,136241,136242],{"class":205,"line":1304},[203,136243,1654],{"class":213},[14,136245,136247],{"id":136246},"_135-css的初始化","13.5 css的初始化",[19,136249,136250],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136252,136253],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136255,136256],{},"每个网页都必须首先进行 CSS初始化。",[19,136258,136259],{},"这里我们以 京东CSS初始化代码为例。",[19,136261,136262],{},"在网页右键查看网页源代码",[19,136264,136265],{},"找到css的link引入语句",[19,136267,136268],{},"然后ctrl+f 输入body",[19,136270,77284],{},[25,136272],{"style":126466,"src":136273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136275,77307],{},[25,136277],{"style":126466,"src":136278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136280,136281],{},"③打开了网页上传压缩的代码",[25,136283],{"style":126466,"src":136284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136286,136287],{},"④从body前可以查看这个网页的初始化代码",[19,136289,136290],{},[363,136291,136292],{},"Unicode编码字体：",[19,136294,136295],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136297,83265],{},[19,136299,136300],{},"黑体 \\9ED1\\4F53",[19,136302,136303],{},"宋体 \\5B8B\\4F53",[19,136305,136306],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5216,136308,136309],{},"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":27,"searchDepth":124,"depth":124,"links":136311},[136312,136313,136320,136324,136328],{"id":135109,"depth":124,"text":135110},{"id":135231,"depth":124,"text":135232,"children":136314},[136315,136316,136317,136318,136319],{"id":135235,"depth":1269,"text":135236},{"id":135388,"depth":1269,"text":135389},{"id":135507,"depth":1269,"text":135508},{"id":135649,"depth":1269,"text":135650},{"id":135707,"depth":1269,"text":135708},{"id":135768,"depth":124,"text":135769,"children":136321},[136322,136323],{"id":135791,"depth":1269,"text":135792},{"id":136023,"depth":1269,"text":136024},{"id":136152,"depth":124,"text":136153,"children":136325},[136326,136327],{"id":136156,"depth":1269,"text":136157},{"id":136195,"depth":1269,"text":136196},{"id":136246,"depth":124,"text":136247},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135101,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136335,"title":136336,"body":136337,"description":23467,"extension":129,"meta":138023,"navigation":131,"path":138024,"seo":138025,"stem":138026,"__hash__":138027},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136338,"toc":138012},[136339,136342,136346,136350,136353,136360,136363,136366,136404,136407,136409,136423,136427,136436,136440,136445,136448,136451,136454,136489,136494,136497,136527,136530,136535,136538,136541,136571,136574,136628,136631,136635,136640,136652,136655,136659,136689,136692,136697,136700,136730,136733,136737,136754,136758,136762,136765,136798,136801,136805,136808,136811,136814,136817,136820,136931,136934,136937,136940,137042,137045,137049,137053,137057,137060,137100,137103,137105,137121,137125,137128,137133,137214,137217,137220,137346,137351,137354,137362,137365,137370,137455,137458,137462,137465,137468,137472,137492,137497,137581,137584,137589,137592,137595,137673,137676,137679,137682,137685,137688,137693,137696,137699,137771,137774,137779,137782,137879,137882,137888,137891,137894,137897,137900,137903,137906,137909,137912,137916,137921,137924,137957,137962,137965,138006,138009],[10,136340,136336],{"id":136341},"_14-html5与css3新特性",[14,136343,136345],{"id":136344},"_141-html5的新特性","14.1 HTML5的新特性",[174,136347,136349],{"id":136348},"_1411-基本标签","14.1.1 基本标签",[19,136351,136352],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136354,136355,136356,136359],{},"这些新特性都有兼容性问题，基本是 ",[363,136357,136358],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136361,136362],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136364,136365],{},"现在使用的是新特性：",[1221,136367,136368,136374,136380,136386,136392,136398],{},[160,136369,136370,136373],{},[200,136371,136372],{},"\u003Cheader>"," 头部标签",[160,136375,136376,136379],{},[200,136377,136378],{},"\u003Cnav>"," 导航标签",[160,136381,136382,136385],{},[200,136383,136384],{},"\u003Carticle>"," 内容标签",[160,136387,136388,136391],{},[200,136389,136390],{},"\u003Csection>"," 定义文档某个区域",[160,136393,136394,136397],{},[200,136395,136396],{},"\u003Caside>"," 侧边栏标签",[160,136399,136400,136403],{},[200,136401,136402],{},"\u003Cfooter>"," 尾部标签",[25,136405],{"style":126466,"src":136406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136408,243],{},[1221,136410,136411,136414,136417,136420],{},[160,136412,136413],{},"这种语义化标准主要是针对搜索引擎的",[160,136415,136416],{},"这些标签页面中可以经常使用",[160,136418,136419],{},"在IE9中，需要把这些元素转换为块级元素",[160,136421,136422],{},"移动端更喜欢使用这些标签",[174,136424,136426],{"id":136425},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136428,136429,136430,136432,136433,136435],{},"音频 ",[363,136431,28232],{}," 和视频 ",[363,136434,28241],{}," 两个标签",[22088,136437,136439],{"id":136438},"_14121-视频标签-video","14.1.2.1 视频标签- video",[157,136441,136442],{},[160,136443,136444],{},"支持格式：",[25,136446],{"style":126466,"src":136447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136449,136450],{},"尽量使用MP4，兼容性好",[19,136452,136453],{},"用MP4就可以",[194,136455,136457],{"className":127357,"code":136456,"language":127359,"meta":27,"style":27},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[200,136458,136459],{"__ignoreMap":27},[203,136460,136461,136463,136465,136467,136469,136472,136474,136477,136480,136483,136485,136487],{"class":205,"line":206},[203,136462,1124],{"class":213},[203,136464,28241],{"class":51358},[203,136466,55297],{"class":2052},[203,136468,259],{"class":213},[203,136470,136471],{"class":318},"\"movie.mp4\"",[203,136473,92481],{"class":2052},[203,136475,136476],{"class":2052}," autoplay",[203,136478,136479],{"class":2052}," muted",[203,136481,136482],{"class":2052}," loop",[203,136484,55372],{"class":213},[203,136486,28241],{"class":51358},[203,136488,51365],{"class":213},[157,136490,136491],{"start":124},[160,136492,136493],{},"兼容写法",[19,136495,136496],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[194,136498,136499],{"className":127357,"code":136456,"language":127359,"meta":27,"style":27},[200,136500,136501],{"__ignoreMap":27},[203,136502,136503,136505,136507,136509,136511,136513,136515,136517,136519,136521,136523,136525],{"class":205,"line":206},[203,136504,1124],{"class":213},[203,136506,28241],{"class":51358},[203,136508,55297],{"class":2052},[203,136510,259],{"class":213},[203,136512,136471],{"class":318},[203,136514,92481],{"class":2052},[203,136516,136476],{"class":2052},[203,136518,136479],{"class":2052},[203,136520,136482],{"class":2052},[203,136522,55372],{"class":213},[203,136524,28241],{"class":51358},[203,136526,51365],{"class":213},[19,136528,136529],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[157,136531,136532],{"start":1269},[160,136533,136534],{},"video常用属性",[25,136536],{"style":126466,"src":136537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,136539,136540],{},"poster属性后面是跟的等待加载图片的地址",[194,136542,136543],{"className":127357,"code":134112,"language":127359,"meta":27,"style":27},[200,136544,136545],{"__ignoreMap":27},[203,136546,136547,136549,136551,136553,136555,136557,136559,136561,136563,136565,136567,136569],{"class":205,"line":206},[203,136548,1124],{"class":213},[203,136550,25],{"class":51358},[203,136552,55297],{"class":2052},[203,136554,259],{"class":213},[203,136556,134127],{"class":318},[203,136558,55305],{"class":2052},[203,136560,259],{"class":213},[203,136562,134134],{"class":318},[203,136564,134137],{"class":2052},[203,136566,259],{"class":213},[203,136568,134142],{"class":318},[203,136570,51365],{"class":213},[19,136572,136573],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[194,136575,136577],{"className":126610,"code":136576,"language":126612,"meta":27,"style":27},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[200,136578,136579,136584,136590,136614,136619,136624],{"__ignoreMap":27},[203,136580,136581],{"class":205,"line":206},[203,136582,136583],{"class":272},"\u002F* 2D 位移 *\u002F\n",[203,136585,136586,136588],{"class":205,"line":124},[203,136587,51669],{"class":51358},[203,136589,15662],{"class":213},[203,136591,136592,136595,136597,136600,136602,136604,136606,136608,136610,136612],{"class":205,"line":1269},[203,136593,136594],{"class":262},"  transform",[203,136596,51495],{"class":213},[203,136598,136599],{"class":262},"translate",[203,136601,214],{"class":213},[203,136603,525],{"class":262},[203,136605,51550],{"class":209},[203,136607,12525],{"class":213},[203,136609,870],{"class":262},[203,136611,51550],{"class":209},[203,136613,2808],{"class":213},[203,136615,136616],{"class":205,"line":1284},[203,136617,136618],{"class":272},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[203,136620,136621],{"class":205,"line":1290},[203,136622,136623],{"class":272},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[203,136625,136626],{"class":205,"line":1304},[203,136627,1654],{"class":213},[19,136629,136630],{},"muted:自动静音属性",[22088,136632,136634],{"id":136633},"_14122-音频标签audio","14.1.2.2 音频标签audio",[157,136636,136637],{},[160,136638,136639],{},"基本使用",[19,136641,136642,136643,136648,136649],{},"当前 ",[363,136644,136645],{},[200,136646,136647],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[363,136650,136651],{},"mp3格式",[25,136653],{"style":126466,"src":136654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[157,136656,136657],{"start":124},[160,136658,136493],{},[194,136660,136661],{"className":127357,"code":136456,"language":127359,"meta":27,"style":27},[200,136662,136663],{"__ignoreMap":27},[203,136664,136665,136667,136669,136671,136673,136675,136677,136679,136681,136683,136685,136687],{"class":205,"line":206},[203,136666,1124],{"class":213},[203,136668,28241],{"class":51358},[203,136670,55297],{"class":2052},[203,136672,259],{"class":213},[203,136674,136471],{"class":318},[203,136676,92481],{"class":2052},[203,136678,136476],{"class":2052},[203,136680,136479],{"class":2052},[203,136682,136482],{"class":2052},[203,136684,55372],{"class":213},[203,136686,28241],{"class":51358},[203,136688,51365],{"class":213},[19,136690,136691],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[157,136693,136694],{"start":1269},[160,136695,136696],{},"常用属性",[25,136698],{"style":126466,"src":136699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[194,136701,136702],{"className":127357,"code":136456,"language":127359,"meta":27,"style":27},[200,136703,136704],{"__ignoreMap":27},[203,136705,136706,136708,136710,136712,136714,136716,136718,136720,136722,136724,136726,136728],{"class":205,"line":206},[203,136707,1124],{"class":213},[203,136709,28241],{"class":51358},[203,136711,55297],{"class":2052},[203,136713,259],{"class":213},[203,136715,136471],{"class":318},[203,136717,92481],{"class":2052},[203,136719,136476],{"class":2052},[203,136721,136479],{"class":2052},[203,136723,136482],{"class":2052},[203,136725,55372],{"class":213},[203,136727,28241],{"class":51358},[203,136729,51365],{"class":213},[19,136731,136732],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22088,136734,136736],{"id":136735},"_14123-总结","14.1.2.3 总结",[1221,136738,136739,136742,136745,136748,136751],{},[160,136740,136741],{},"音频标签和视频标签使用方式基本一致",[160,136743,136744],{},"浏览器支持情况不同",[160,136746,136747],{},"谷歌浏览器把音频和视频自动播放禁止了",[160,136749,136750],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[160,136752,136753],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[174,136755,136757],{"id":136756},"_1413-表单元素","14.1.3 表单元素",[22088,136759,136761],{"id":136760},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[25,136763],{"style":126466,"src":136764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[194,136766,136768],{"className":127357,"code":136767,"language":127359,"meta":27,"style":27},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[200,136769,136770],{"__ignoreMap":27},[203,136771,136772,136774,136776,136778,136780,136782,136784,136786,136789,136791,136793,136796],{"class":205,"line":206},[203,136773,1124],{"class":213},[203,136775,53879],{"class":51358},[203,136777,53882],{"class":2052},[203,136779,259],{"class":213},[203,136781,62757],{"class":318},[203,136783,15010],{"class":2052},[203,136785,259],{"class":213},[203,136787,136788],{"class":318},"\"username\"",[203,136790,61078],{"class":2052},[203,136792,259],{"class":213},[203,136794,136795],{"class":318},"\"请输入用户名\"",[203,136797,51365],{"class":213},[25,136799],{"style":126466,"src":136800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22088,136802,136804],{"id":136803},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[25,136806],{"style":126466,"src":136807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,136809,136810],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,136812,136813],{},"快捷操作：",[25,136815],{"style":126466,"src":136816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,136818,136819],{},"例子1：",[194,136821,136823],{"className":127357,"code":136822,"language":127359,"meta":27,"style":27},"\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",[200,136824,136825,136848,136875,136904,136923],{"__ignoreMap":27},[203,136826,136827,136829,136831,136833,136835,136838,136841,136843,136846],{"class":205,"line":206},[203,136828,1124],{"class":213},[203,136830,66683],{"class":51358},[203,136832,66686],{"class":2052},[203,136834,259],{"class":213},[203,136836,136837],{"class":318},"\"\u002Fsubmit\"",[203,136839,136840],{"class":2052}," method",[203,136842,259],{"class":213},[203,136844,136845],{"class":318},"\"post\"",[203,136847,51365],{"class":213},[203,136849,136850,136852,136854,136856,136858,136860,136862,136864,136866,136868,136870,136873],{"class":205,"line":124},[203,136851,52202],{"class":213},[203,136853,53879],{"class":51358},[203,136855,53882],{"class":2052},[203,136857,259],{"class":213},[203,136859,62757],{"class":318},[203,136861,15010],{"class":2052},[203,136863,259],{"class":213},[203,136865,136788],{"class":318},[203,136867,61078],{"class":2052},[203,136869,259],{"class":213},[203,136871,136872],{"class":318},"\"用户名\"",[203,136874,51365],{"class":213},[203,136876,136877,136879,136881,136883,136885,136888,136890,136892,136895,136897,136899,136902],{"class":205,"line":1269},[203,136878,52202],{"class":213},[203,136880,53879],{"class":51358},[203,136882,53882],{"class":2052},[203,136884,259],{"class":213},[203,136886,136887],{"class":318},"\"password\"",[203,136889,15010],{"class":2052},[203,136891,259],{"class":213},[203,136893,136894],{"class":318},"\"pwd\"",[203,136896,61078],{"class":2052},[203,136898,259],{"class":213},[203,136900,136901],{"class":318},"\"密码\"",[203,136903,51365],{"class":213},[203,136905,136906,136908,136910,136912,136914,136916,136919,136921],{"class":205,"line":1284},[203,136907,52202],{"class":213},[203,136909,53945],{"class":51358},[203,136911,53882],{"class":2052},[203,136913,259],{"class":213},[203,136915,66706],{"class":318},[203,136917,136918],{"class":213},">提交\u003C\u002F",[203,136920,53945],{"class":51358},[203,136922,51365],{"class":213},[203,136924,136925,136927,136929],{"class":205,"line":1290},[203,136926,51843],{"class":213},[203,136928,66683],{"class":51358},[203,136930,51365],{"class":213},[25,136932],{"style":126466,"src":136933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,136935,136936],{},"value是表单域的内容",[19,136938,136939],{},"例子2：",[194,136941,136942],{"className":127357,"code":136822,"language":127359,"meta":27,"style":27},[200,136943,136944,136964,136990,137016,137034],{"__ignoreMap":27},[203,136945,136946,136948,136950,136952,136954,136956,136958,136960,136962],{"class":205,"line":206},[203,136947,1124],{"class":213},[203,136949,66683],{"class":51358},[203,136951,66686],{"class":2052},[203,136953,259],{"class":213},[203,136955,136837],{"class":318},[203,136957,136840],{"class":2052},[203,136959,259],{"class":213},[203,136961,136845],{"class":318},[203,136963,51365],{"class":213},[203,136965,136966,136968,136970,136972,136974,136976,136978,136980,136982,136984,136986,136988],{"class":205,"line":124},[203,136967,52202],{"class":213},[203,136969,53879],{"class":51358},[203,136971,53882],{"class":2052},[203,136973,259],{"class":213},[203,136975,62757],{"class":318},[203,136977,15010],{"class":2052},[203,136979,259],{"class":213},[203,136981,136788],{"class":318},[203,136983,61078],{"class":2052},[203,136985,259],{"class":213},[203,136987,136872],{"class":318},[203,136989,51365],{"class":213},[203,136991,136992,136994,136996,136998,137000,137002,137004,137006,137008,137010,137012,137014],{"class":205,"line":1269},[203,136993,52202],{"class":213},[203,136995,53879],{"class":51358},[203,136997,53882],{"class":2052},[203,136999,259],{"class":213},[203,137001,136887],{"class":318},[203,137003,15010],{"class":2052},[203,137005,259],{"class":213},[203,137007,136894],{"class":318},[203,137009,61078],{"class":2052},[203,137011,259],{"class":213},[203,137013,136901],{"class":318},[203,137015,51365],{"class":213},[203,137017,137018,137020,137022,137024,137026,137028,137030,137032],{"class":205,"line":1284},[203,137019,52202],{"class":213},[203,137021,53945],{"class":51358},[203,137023,53882],{"class":2052},[203,137025,259],{"class":213},[203,137027,66706],{"class":318},[203,137029,136918],{"class":213},[203,137031,53945],{"class":51358},[203,137033,51365],{"class":213},[203,137035,137036,137038,137040],{"class":205,"line":1290},[203,137037,51843],{"class":213},[203,137039,66683],{"class":51358},[203,137041,51365],{"class":213},[25,137043],{"style":126466,"src":137044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137046,137048],{"id":137047},"_142-css新特性","14.2 CSS新特性",[174,137050,137052],{"id":137051},"_1421-新增选择器","14.2.1 新增选择器",[22088,137054,137056],{"id":137055},"_14211-属性选择器","14.2.1.1 属性选择器",[25,137058],{"style":126466,"src":137059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[194,137061,137063],{"className":126610,"code":137062,"language":126612,"meta":27,"style":27},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[200,137064,137065,137080,137096],{"__ignoreMap":27},[203,137066,137067,137069,137071,137073,137075,137077],{"class":205,"line":206},[203,137068,53879],{"class":51358},[203,137070,1104],{"class":213},[203,137072,103165],{"class":2052},[203,137074,259],{"class":209},[203,137076,62757],{"class":318},[203,137078,137079],{"class":213},"] {\n",[203,137081,137082,137084,137086,137088,137090,137092,137094],{"class":205,"line":124},[203,137083,70954],{"class":262},[203,137085,51495],{"class":213},[203,137087,431],{"class":262},[203,137089,51550],{"class":209},[203,137091,51579],{"class":262},[203,137093,130190],{"class":262},[203,137095,1380],{"class":213},[203,137097,137098],{"class":205,"line":1269},[203,137099,1654],{"class":213},[25,137101],{"style":126466,"src":137102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137104,243],{},[1221,137106,137107,137110,137113,137116],{},[160,137108,137109],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[160,137111,137112],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[160,137114,137115],{},"属性选择器也可以选择出来自定义的属性",[160,137117,137118,137120],{},[363,137119,9115],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22088,137122,137124],{"id":137123},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[25,137126],{"style":126466,"src":137127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[157,137129,137130],{},[160,137131,137132],{},"fist-child",[194,137134,137136],{"className":126610,"code":137135,"language":126612,"meta":27,"style":27},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[200,137137,137138,137143,137158,137178,137196],{"__ignoreMap":27},[203,137139,137140],{"class":205,"line":206},[203,137141,137142],{"class":272},"\u002F* 属性选择器 *\u002F\n",[203,137144,137145,137147,137149,137151,137153,137155],{"class":205,"line":124},[203,137146,53879],{"class":51358},[203,137148,1104],{"class":213},[203,137150,103165],{"class":2052},[203,137152,259],{"class":209},[203,137154,62757],{"class":318},[203,137156,137157],{"class":213},"] { }\n",[203,137159,137160,137162,137164,137166,137169,137172,137175],{"class":205,"line":1269},[203,137161,53879],{"class":51358},[203,137163,1104],{"class":213},[203,137165,14784],{"class":2052},[203,137167,137168],{"class":209},"^=",[203,137170,137171],{"class":318},"\"icon\"",[203,137173,137174],{"class":213},"] { }  ",[203,137176,137177],{"class":272},"\u002F* 以 icon 开头 *\u002F\n",[203,137179,137180,137182,137184,137186,137189,137191,137193],{"class":205,"line":1284},[203,137181,53879],{"class":51358},[203,137183,1104],{"class":213},[203,137185,14784],{"class":2052},[203,137187,137188],{"class":209},"$=",[203,137190,137171],{"class":318},[203,137192,137174],{"class":213},[203,137194,137195],{"class":272},"\u002F* 以 icon 结尾 *\u002F\n",[203,137197,137198,137200,137202,137204,137207,137209,137211],{"class":205,"line":1290},[203,137199,53879],{"class":51358},[203,137201,1104],{"class":213},[203,137203,14784],{"class":2052},[203,137205,137206],{"class":209},"*=",[203,137208,137171],{"class":318},[203,137210,137174],{"class":213},[203,137212,137213],{"class":272},"\u002F* 包含 icon *\u002F\n",[19,137215,137216],{},"ul的第一个儿子文本为红色",[19,137218,137219],{},"一定要在冒号前加空格，不然就是选中所有的了",[194,137221,137223],{"className":126610,"code":137222,"language":126612,"meta":27,"style":27},".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",[200,137224,137225,137231,137241,137245,137249,137254,137267,137280,137296,137313,137330],{"__ignoreMap":27},[203,137226,137227,137229],{"class":205,"line":206},[203,137228,126901],{"class":2052},[203,137230,15662],{"class":213},[203,137232,137233,137235,137237,137239],{"class":205,"line":124},[203,137234,70963],{"class":262},[203,137236,51495],{"class":213},[203,137238,57479],{"class":262},[203,137240,1380],{"class":213},[203,137242,137243],{"class":205,"line":1269},[203,137244,1654],{"class":213},[203,137246,137247],{"class":205,"line":1284},[203,137248,136071],{"class":213},[203,137250,137251],{"class":205,"line":1290},[203,137252,137253],{"class":272},"\u002F* 结构伪类选择器 *\u002F\n",[203,137255,137256,137258,137261,137264],{"class":205,"line":1304},[203,137257,160],{"class":51358},[203,137259,137260],{"class":2052},":first-child",[203,137262,137263],{"class":213}," { }           ",[203,137265,137266],{"class":272},"\u002F* 第一个 *\u002F\n",[203,137268,137269,137271,137274,137277],{"class":205,"line":1310},[203,137270,160],{"class":51358},[203,137272,137273],{"class":2052},":last-child",[203,137275,137276],{"class":213}," { }            ",[203,137278,137279],{"class":272},"\u002F* 最后一个 *\u002F\n",[203,137281,137282,137284,137286,137288,137290,137293],{"class":205,"line":1401},[203,137283,160],{"class":51358},[203,137285,129524],{"class":2052},[203,137287,214],{"class":213},[203,137289,291],{"class":262},[203,137291,137292],{"class":213},") { }          ",[203,137294,137295],{"class":272},"\u002F* 第2个 *\u002F\n",[203,137297,137298,137300,137302,137304,137307,137310],{"class":205,"line":1407},[203,137299,160],{"class":51358},[203,137301,129524],{"class":2052},[203,137303,214],{"class":213},[203,137305,137306],{"class":262},"2n",[203,137308,137309],{"class":213},") { }         ",[203,137311,137312],{"class":272},"\u002F* 偶数 *\u002F\n",[203,137314,137315,137317,137319,137321,137324,137327],{"class":205,"line":1419},[203,137316,160],{"class":51358},[203,137318,129524],{"class":2052},[203,137320,214],{"class":213},[203,137322,137323],{"class":262},"2n+1",[203,137325,137326],{"class":213},") { }       ",[203,137328,137329],{"class":272},"\u002F* 奇数 *\u002F\n",[203,137331,137332,137334,137336,137338,137341,137343],{"class":205,"line":1701},[203,137333,160],{"class":51358},[203,137335,129524],{"class":2052},[203,137337,214],{"class":213},[203,137339,137340],{"class":262},"-n+3",[203,137342,137326],{"class":213},[203,137344,137345],{"class":272},"\u002F* 前3个 *\u002F\n",[51669,137347,137350],{"className":137348},[137349],"example","\n  示例内容\n",[19,137352,137353],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1221,137355,137356],{},[160,137357,137358,137361],{},[200,137359,137360],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137363,137364],{},"也就是说它选择的是熊大",[157,137366,137367],{"start":1304},[160,137368,137369],{},"权重",[194,137371,137373],{"className":126610,"code":137372,"language":126612,"meta":27,"style":27},"\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",[200,137374,137375,137379,137389,137399,137413,137427,137441],{"__ignoreMap":27},[203,137376,137377],{"class":205,"line":206},[203,137378,137253],{"class":272},[203,137380,137381,137383,137385,137387],{"class":205,"line":124},[203,137382,160],{"class":51358},[203,137384,137260],{"class":2052},[203,137386,137263],{"class":213},[203,137388,137266],{"class":272},[203,137390,137391,137393,137395,137397],{"class":205,"line":1269},[203,137392,160],{"class":51358},[203,137394,137273],{"class":2052},[203,137396,137276],{"class":213},[203,137398,137279],{"class":272},[203,137400,137401,137403,137405,137407,137409,137411],{"class":205,"line":1284},[203,137402,160],{"class":51358},[203,137404,129524],{"class":2052},[203,137406,214],{"class":213},[203,137408,291],{"class":262},[203,137410,137292],{"class":213},[203,137412,137295],{"class":272},[203,137414,137415,137417,137419,137421,137423,137425],{"class":205,"line":1290},[203,137416,160],{"class":51358},[203,137418,129524],{"class":2052},[203,137420,214],{"class":213},[203,137422,137306],{"class":262},[203,137424,137309],{"class":213},[203,137426,137312],{"class":272},[203,137428,137429,137431,137433,137435,137437,137439],{"class":205,"line":1304},[203,137430,160],{"class":51358},[203,137432,129524],{"class":2052},[203,137434,214],{"class":213},[203,137436,137323],{"class":262},[203,137438,137326],{"class":213},[203,137440,137329],{"class":272},[203,137442,137443,137445,137447,137449,137451,137453],{"class":205,"line":1310},[203,137444,160],{"class":51358},[203,137446,129524],{"class":2052},[203,137448,214],{"class":213},[203,137450,137340],{"class":262},[203,137452,137326],{"class":213},[203,137454,137345],{"class":272},[19,137456,137457],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22088,137459,137461],{"id":137460},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137463,137464],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[25,137466],{"style":126466,"src":137467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[157,137469,137470],{},[160,137471,243],{},[1221,137473,137474,137477,137480,137483,137486,137489],{},[160,137475,137476],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[160,137478,137479],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[160,137481,137482],{},"语法： element::before {}",[160,137484,137485],{},"before 和 after 必须有 content 属性",[160,137487,137488],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[160,137490,137491],{},"伪元素选择器和标签选择器一样，权重为 1",[157,137493,137494],{"start":124},[160,137495,137496],{},"实例",[194,137498,137499],{"className":126610,"code":137372,"language":126612,"meta":27,"style":27},[200,137500,137501,137505,137515,137525,137539,137553,137567],{"__ignoreMap":27},[203,137502,137503],{"class":205,"line":206},[203,137504,137253],{"class":272},[203,137506,137507,137509,137511,137513],{"class":205,"line":124},[203,137508,160],{"class":51358},[203,137510,137260],{"class":2052},[203,137512,137263],{"class":213},[203,137514,137266],{"class":272},[203,137516,137517,137519,137521,137523],{"class":205,"line":1269},[203,137518,160],{"class":51358},[203,137520,137273],{"class":2052},[203,137522,137276],{"class":213},[203,137524,137279],{"class":272},[203,137526,137527,137529,137531,137533,137535,137537],{"class":205,"line":1284},[203,137528,160],{"class":51358},[203,137530,129524],{"class":2052},[203,137532,214],{"class":213},[203,137534,291],{"class":262},[203,137536,137292],{"class":213},[203,137538,137295],{"class":272},[203,137540,137541,137543,137545,137547,137549,137551],{"class":205,"line":1290},[203,137542,160],{"class":51358},[203,137544,129524],{"class":2052},[203,137546,214],{"class":213},[203,137548,137306],{"class":262},[203,137550,137309],{"class":213},[203,137552,137312],{"class":272},[203,137554,137555,137557,137559,137561,137563,137565],{"class":205,"line":1304},[203,137556,160],{"class":51358},[203,137558,129524],{"class":2052},[203,137560,214],{"class":213},[203,137562,137323],{"class":262},[203,137564,137326],{"class":213},[203,137566,137329],{"class":272},[203,137568,137569,137571,137573,137575,137577,137579],{"class":205,"line":1310},[203,137570,160],{"class":51358},[203,137572,129524],{"class":2052},[203,137574,214],{"class":213},[203,137576,137340],{"class":262},[203,137578,137326],{"class":213},[203,137580,137345],{"class":272},[25,137582],{"style":126466,"src":137583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[157,137585,137586],{"start":1269},[160,137587,137588],{},"使用场景1",[25,137590],{"style":126466,"src":137591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,137593,137594],{},"不需要再加盒子来整红色那部分了",[194,137596,137598],{"className":126610,"code":137597,"language":126612,"meta":27,"style":27},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[200,137599,137600,137605,137614,137625,137635,137639,137648,137659,137669],{"__ignoreMap":27},[203,137601,137602],{"class":205,"line":206},[203,137603,137604],{"class":272},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[203,137606,137607,137609,137612],{"class":205,"line":124},[203,137608,51669],{"class":51358},[203,137610,137611],{"class":2052},"::before",[203,137613,15662],{"class":213},[203,137615,137616,137619,137621,137623],{"class":205,"line":1269},[203,137617,137618],{"class":262},"  content",[203,137620,51495],{"class":213},[203,137622,7742],{"class":318},[203,137624,1380],{"class":213},[203,137626,137627,137629,137631,137633],{"class":205,"line":1284},[203,137628,128226],{"class":262},[203,137630,51495],{"class":213},[203,137632,60927],{"class":262},[203,137634,1380],{"class":213},[203,137636,137637],{"class":205,"line":1290},[203,137638,1654],{"class":213},[203,137640,137641,137643,137646],{"class":205,"line":1304},[203,137642,51669],{"class":51358},[203,137644,137645],{"class":2052},"::after",[203,137647,15662],{"class":213},[203,137649,137650,137652,137654,137657],{"class":205,"line":1310},[203,137651,137618],{"class":262},[203,137653,51495],{"class":213},[203,137655,137656],{"class":318},"\"→\"",[203,137658,1380],{"class":213},[203,137660,137661,137663,137665,137667],{"class":205,"line":1401},[203,137662,70963],{"class":262},[203,137664,51495],{"class":213},[203,137666,62128],{"class":262},[203,137668,1380],{"class":213},[203,137670,137671],{"class":205,"line":1407},[203,137672,1654],{"class":213},[25,137674],{"style":126466,"src":137675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,137677,137678],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[25,137680],{"style":126466,"src":137681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,137683,137684],{},"但是在引用时需要先转义一下",[19,137686,137687],{},"content='\\e930'",[157,137689,137690],{"start":1284},[160,137691,137692],{},"使用场景2",[19,137694,137695],{},"仿土豆效果",[19,137697,137698],{},"通过使用伪元素选择器可以减少body中盒子的数量",[194,137700,137701],{"className":126610,"code":137597,"language":126612,"meta":27,"style":27},[200,137702,137703,137707,137715,137725,137735,137739,137747,137757,137767],{"__ignoreMap":27},[203,137704,137705],{"class":205,"line":206},[203,137706,137604],{"class":272},[203,137708,137709,137711,137713],{"class":205,"line":124},[203,137710,51669],{"class":51358},[203,137712,137611],{"class":2052},[203,137714,15662],{"class":213},[203,137716,137717,137719,137721,137723],{"class":205,"line":1269},[203,137718,137618],{"class":262},[203,137720,51495],{"class":213},[203,137722,7742],{"class":318},[203,137724,1380],{"class":213},[203,137726,137727,137729,137731,137733],{"class":205,"line":1284},[203,137728,128226],{"class":262},[203,137730,51495],{"class":213},[203,137732,60927],{"class":262},[203,137734,1380],{"class":213},[203,137736,137737],{"class":205,"line":1290},[203,137738,1654],{"class":213},[203,137740,137741,137743,137745],{"class":205,"line":1304},[203,137742,51669],{"class":51358},[203,137744,137645],{"class":2052},[203,137746,15662],{"class":213},[203,137748,137749,137751,137753,137755],{"class":205,"line":1310},[203,137750,137618],{"class":262},[203,137752,51495],{"class":213},[203,137754,137656],{"class":318},[203,137756,1380],{"class":213},[203,137758,137759,137761,137763,137765],{"class":205,"line":1401},[203,137760,70963],{"class":262},[203,137762,51495],{"class":213},[203,137764,62128],{"class":262},[203,137766,1380],{"class":213},[203,137768,137769],{"class":205,"line":1407},[203,137770,1654],{"class":213},[25,137772],{"style":126466,"src":137773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[157,137775,137776],{"start":1290},[160,137777,137778],{},"使用场景3",[19,137780,137781],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[194,137783,137785],{"className":126610,"code":137784,"language":126612,"meta":27,"style":27},".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",[200,137786,137787,137793,137803,137807,137811,137815,137823,137833,137843,137847,137855,137865,137875],{"__ignoreMap":27},[203,137788,137789,137791],{"class":205,"line":206},[203,137790,130458],{"class":2052},[203,137792,15662],{"class":213},[203,137794,137795,137797,137799,137801],{"class":205,"line":124},[203,137796,131090],{"class":262},[203,137798,51495],{"class":213},[203,137800,23827],{"class":262},[203,137802,1380],{"class":213},[203,137804,137805],{"class":205,"line":1269},[203,137806,1654],{"class":213},[203,137808,137809],{"class":205,"line":1284},[203,137810,136071],{"class":213},[203,137812,137813],{"class":205,"line":1290},[203,137814,137604],{"class":272},[203,137816,137817,137819,137821],{"class":205,"line":1304},[203,137818,51669],{"class":51358},[203,137820,137611],{"class":2052},[203,137822,15662],{"class":213},[203,137824,137825,137827,137829,137831],{"class":205,"line":1310},[203,137826,137618],{"class":262},[203,137828,51495],{"class":213},[203,137830,7742],{"class":318},[203,137832,1380],{"class":213},[203,137834,137835,137837,137839,137841],{"class":205,"line":1401},[203,137836,128226],{"class":262},[203,137838,51495],{"class":213},[203,137840,60927],{"class":262},[203,137842,1380],{"class":213},[203,137844,137845],{"class":205,"line":1407},[203,137846,1654],{"class":213},[203,137848,137849,137851,137853],{"class":205,"line":1419},[203,137850,51669],{"class":51358},[203,137852,137645],{"class":2052},[203,137854,15662],{"class":213},[203,137856,137857,137859,137861,137863],{"class":205,"line":1701},[203,137858,137618],{"class":262},[203,137860,51495],{"class":213},[203,137862,137656],{"class":318},[203,137864,1380],{"class":213},[203,137866,137867,137869,137871,137873],{"class":205,"line":1706},[203,137868,70963],{"class":262},[203,137870,51495],{"class":213},[203,137872,62128],{"class":262},[203,137874,1380],{"class":213},[203,137876,137877],{"class":205,"line":1712},[203,137878,1654],{"class":213},[19,137880,137881],{},"div {\nmargin: 0 auto;\n}",[194,137883,137886],{"className":137884,"code":137885,"language":5277},[5275],"\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",[200,137887,137885],{"__ignoreMap":27},[19,137889,137890],{},"如果想让多个元素都发生变化",[19,137892,137893],{},"不能如下操作：",[19,137895,137896],{},"transition: width 2s ease 0.5s;",[19,137898,137899],{},"transition: height 2s ease 0.5s;不对！！！",[19,137901,137902],{},"上方会样式冲突，导致不显示任何过渡效果",[19,137904,137905],{},"使用如下：加逗号隔开",[19,137907,137908],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,137910,137911],{},"transition all 2s ease;",[174,137913,137915],{"id":137914},"_1426-过渡练习","14.2.6 过渡练习",[157,137917,137918],{},[160,137919,137920],{},"进度条",[25,137922],{"style":126466,"src":137923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[194,137925,137927],{"className":126610,"code":137926,"language":126612,"meta":27,"style":27},"div {\n  transition: all 0.3s ease;\n}\n",[200,137928,137929,137935,137953],{"__ignoreMap":27},[203,137930,137931,137933],{"class":205,"line":206},[203,137932,51669],{"class":51358},[203,137934,15662],{"class":213},[203,137936,137937,137940,137942,137944,137947,137949,137951],{"class":205,"line":124},[203,137938,137939],{"class":262},"  transition",[203,137941,51495],{"class":213},[203,137943,28179],{"class":262},[203,137945,137946],{"class":262}," 0.3",[203,137948,909],{"class":209},[203,137950,78738],{"class":262},[203,137952,1380],{"class":213},[203,137954,137955],{"class":205,"line":1269},[203,137956,1654],{"class":213},[157,137958,137959],{"start":124},[160,137960,137961],{},"小米logo",[19,137963,137964],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[194,137966,137968],{"className":126610,"code":137967,"language":126612,"meta":27,"style":27},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[200,137969,137970,137975,137981,137997,138002],{"__ignoreMap":27},[203,137971,137972],{"class":205,"line":206},[203,137973,137974],{"class":272},"\u002F* CSS3 过渡 *\u002F\n",[203,137976,137977,137979],{"class":205,"line":124},[203,137978,51669],{"class":51358},[203,137980,15662],{"class":213},[203,137982,137983,137985,137987,137989,137991,137993,137995],{"class":205,"line":1269},[203,137984,137939],{"class":262},[203,137986,51495],{"class":213},[203,137988,28179],{"class":262},[203,137990,137946],{"class":262},[203,137992,909],{"class":209},[203,137994,78738],{"class":262},[203,137996,1380],{"class":213},[203,137998,137999],{"class":205,"line":1284},[203,138000,138001],{"class":272},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[203,138003,138004],{"class":205,"line":1290},[203,138005,1654],{"class":213},[19,138007,138008],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5216,138010,138011],{},"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":27,"searchDepth":124,"depth":124,"links":138013},[138014,138019],{"id":136344,"depth":124,"text":136345,"children":138015},[138016,138017,138018],{"id":136348,"depth":1269,"text":136349},{"id":136425,"depth":1269,"text":136426},{"id":136756,"depth":1269,"text":136757},{"id":137047,"depth":124,"text":137048,"children":138020},[138021,138022],{"id":137051,"depth":1269,"text":137052},{"id":137914,"depth":1269,"text":137915},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136336,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138029,"title":138030,"body":138031,"description":23467,"extension":129,"meta":139775,"navigation":131,"path":139776,"seo":139777,"stem":139778,"__hash__":139779},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138032,"toc":139756},[138033,138036,138040,138043,138049,138055,138059,138061,138064,138067,138070,138073,138076,138079,138082,138086,138090,138093,138096,138099,138103,138106,138109,138114,138117,138120,138123,138127,138130,138139,138142,138145,138149,138152,138155,138160,138167,138181,138189,138196,138201,138204,138207,138210,138217,138221,138227,138233,138236,138239,138244,138250,138252,138260,138265,138268,138274,138276,138281,138286,138289,138291,138296,138299,138304,138309,138343,138347,138351,138354,138358,138361,138447,138450,138487,138490,138526,138530,138535,138548,138602,138604,138632,138634,138662,138668,138682,138684,138728,138730,138774,138777,138784,138795,138797,138824,138826,138852,138859,138875,138877,138971,138973,139067,139074,139077,139082,139088,139162,139165,139167,139203,139205,139241,139244,139251,139270,139273,139276,139278,139303,139305,139329,139332,139335,139365,139369,139372,139435,139437,139503,139505,139569,139572,139604,139606,139632,139634,139660,139663,139694,139696,139722,139724,139750,139753],[10,138034,138030],{"id":138035},"_15-品优购项目上篇-搭建与公共模块",[14,138037,138039],{"id":138038},"_151-项目规划","15.1 项目规划",[25,138041],{"style":126466,"src":138042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138044,138045,138048],{},[363,138046,138047],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138050,138051,138054],{},[363,138052,138053],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138056,138058],{"id":138057},"_152-项目介绍","15.2 项目介绍",[19,138060,138047],{},[25,138062],{"style":126466,"src":138063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138065,138066],{},"主页：",[25,138068],{"style":126466,"src":138069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138071,138072],{},"列表页：",[25,138074],{"style":126466,"src":138075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138077,138078],{},"注册页：",[25,138080],{"style":126466,"src":138081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138083,138085],{"id":138084},"_153-项目搭建工作","15.3 项目搭建工作",[174,138087,138089],{"id":138088},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[25,138091],{"style":126466,"src":138092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138094,138095],{},"经常更换的图片要放到upload文件夹中",[19,138097,138098],{},"不经常换的放到images文件夹中",[174,138100,138102],{"id":138101},"_1532-创建文件如下","15.3.2 创建文件如下",[25,138104],{"style":126466,"src":138105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[25,138107],{"style":126466,"src":138108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138110,138111],{},[363,138112,138113],{},"初始化样式：",[19,138115,138116],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138118,138119],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138121,138122],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[174,138124,138126],{"id":138125},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138128,138129],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138131,138132,138133,138138],{},"这里最典型的应用就是 ",[363,138134,138135],{},[200,138136,138137],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[25,138140],{"style":126466,"src":138141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138143,138144],{},"通过link方法来引入",[174,138146,138148],{"id":138147},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[25,138150],{"style":126466,"src":138151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138153,138154],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[157,138156,138157],{},[160,138158,138159],{},"制作favicon图标",[19,138161,138162,138163,138166],{},"①把品优购图标切成 ",[200,138164,138165],{},"png"," 图片",[19,138168,138169,138170,138172,138173,138176,138177],{},"②把 ",[200,138171,138165],{}," 图片转换为 ",[200,138174,138175],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[452,138178,138179],{"href":138179,"rel":138180},"http:\u002F\u002Fwww.bitbug.net\u002F",[23956],[157,138182,138183,138186],{"start":124},[160,138184,138185],{},"favicon图标放到网站根目录下",[160,138187,138188],{},"HTML页面引入favicon",[19,138190,138191,138192,138195],{},"在html 页面里面的 ",[200,138193,138194],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138197,138198],{},[200,138199,138200],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138202,138203],{},"复制这行代码或者在生成这个的网站进行复制",[25,138205],{"style":126466,"src":138206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138208,138209],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138211,138212,138213],{},"例如:",[452,138214,138215],{"href":138215,"rel":138216},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23956],[174,138218,138220],{"id":138219},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138222,138223,138226],{},[363,138224,138225],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138228,138229,138232],{},[363,138230,138231],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138234,138235],{},"页面必须有三个标签用来符合 SEO 优化",[25,138237],{"style":126466,"src":138238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[157,138240,138241],{},[160,138242,138243],{},"title网站标题",[19,138245,138246,138249],{},[363,138247,138248],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138251,68848],{},[1221,138253,138254,138257],{},[160,138255,138256],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[160,138258,138259],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[157,138261,138262],{"start":124},[160,138263,138264],{},"description网站描述",[19,138266,138267],{},"简要说明我们网站主要是做什么的",[19,138269,138270,138273],{},[363,138271,138272],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138275,68848],{},[19,138277,138278],{},[200,138279,138280],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[157,138282,138283],{"start":1269},[160,138284,138285],{},"keywords关键词",[19,138287,138288],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138290,68848],{},[19,138292,138293],{},[200,138294,138295],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138297,138298],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138300,138301],{},[363,138302,138303],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[157,138305,138306],{"start":1284},[160,138307,138308],{},"代码总结",[194,138310,138311],{"className":127357,"code":130714,"language":127359,"meta":27,"style":27},[200,138312,138313,138317,138331,138335],{"__ignoreMap":27},[203,138314,138315],{"class":205,"line":206},[203,138316,130721],{"class":272},[203,138318,138319,138321,138323,138325,138327,138329],{"class":205,"line":124},[203,138320,1124],{"class":213},[203,138322,51669],{"class":51358},[203,138324,53544],{"class":2052},[203,138326,259],{"class":213},[203,138328,130734],{"class":318},[203,138330,51365],{"class":213},[203,138332,138333],{"class":205,"line":1269},[203,138334,130741],{"class":213},[203,138336,138337,138339,138341],{"class":205,"line":1284},[203,138338,51843],{"class":213},[203,138340,51669],{"class":51358},[203,138342,51365],{"class":213},[14,138344,138346],{"id":138345},"_154-项目公共部分制作","15.4 项目公共部分制作",[174,138348,138350],{"id":138349},"_1541-常用模块类命名","15.4.1 常用模块类命名",[25,138352],{"style":126466,"src":138353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[174,138355,138357],{"id":138356},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138359,138360],{},"布局思路：",[1221,138362,138363,138366,138369,138391,138424],{},[160,138364,138365],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[160,138367,138368],{},"里面包含版心的盒子",[160,138370,138371,138372],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1221,138373,138374,138382,138388],{},[160,138375,138376,138377,21590,138379,138381],{},"1 号盒子 里面包含一个",[200,138378,1221],{},[200,138380,1221],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[160,138383,138384,138385,138387],{},"里面的内容是水平排列，所以需要给",[200,138386,160],{},"设置浮动",[160,138389,138390],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[160,138392,138393,138394],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1221,138395,138396,138410,138415],{},[160,138397,138398,138399,21590,138401,138403,138404,138406,138407,138409],{},"2 号盒子 里面包含一个",[200,138400,1221],{},[200,138402,1221],{},"包裹",[200,138405,160],{},"，中间的",[200,138408,1135],{},"可以用样式去设置，也可以用字符 |",[160,138411,138412,138413,138387],{},"里面内容水平排列，给",[200,138414,160],{},[160,138416,138417,138418,138420,138421,138423],{},"找到里面所有偶数的 ",[200,138419,160],{}," 设置样式（偶数的 ",[200,138422,160],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[160,138425,138426,138427],{},"需要用到字体图标",[1221,138428,138429,138435,138438,138441,138444],{},[160,138430,138431,138432],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[200,138433,138434],{},"arrow-icon",[160,138436,138437],{},"先要引入字体图片的资源",[160,138439,138440],{},"在样式里面利用 font-face 来进行声明",[160,138442,138443],{},"在伪元素的 content属性设置 图标的编码",[160,138445,138446],{},"给伪元素设置font-family属性",[19,138448,138449],{},"结构实例代码：",[194,138451,138453],{"className":126610,"code":138452,"language":126612,"meta":27,"style":27},"div::before {\n  content: \"\";\n  display: block;\n}\n",[200,138454,138455,138463,138473,138483],{"__ignoreMap":27},[203,138456,138457,138459,138461],{"class":205,"line":206},[203,138458,51669],{"class":51358},[203,138460,137611],{"class":2052},[203,138462,15662],{"class":213},[203,138464,138465,138467,138469,138471],{"class":205,"line":124},[203,138466,137618],{"class":262},[203,138468,51495],{"class":213},[203,138470,7742],{"class":318},[203,138472,1380],{"class":213},[203,138474,138475,138477,138479,138481],{"class":205,"line":1269},[203,138476,128226],{"class":262},[203,138478,51495],{"class":213},[203,138480,60927],{"class":262},[203,138482,1380],{"class":213},[203,138484,138485],{"class":205,"line":1284},[203,138486,1654],{"class":213},[19,138488,138489],{},"样式实例代码：",[194,138491,138492],{"className":126610,"code":138452,"language":126612,"meta":27,"style":27},[200,138493,138494,138502,138512,138522],{"__ignoreMap":27},[203,138495,138496,138498,138500],{"class":205,"line":206},[203,138497,51669],{"class":51358},[203,138499,137611],{"class":2052},[203,138501,15662],{"class":213},[203,138503,138504,138506,138508,138510],{"class":205,"line":124},[203,138505,137618],{"class":262},[203,138507,51495],{"class":213},[203,138509,7742],{"class":318},[203,138511,1380],{"class":213},[203,138513,138514,138516,138518,138520],{"class":205,"line":1269},[203,138515,128226],{"class":262},[203,138517,51495],{"class":213},[203,138519,60927],{"class":262},[203,138521,1380],{"class":213},[203,138523,138524],{"class":205,"line":1284},[203,138525,1654],{"class":213},[174,138527,138529],{"id":138528},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1221,138531,138532],{},[160,138533,138534],{},"header 盒子必须要有高度",[19,138536,138537,138538,138540,138541],{},"1 号盒子是 ",[200,138539,131622],{}," 标志定位，在正常开发过程中， ",[363,138542,138543,138544,138547],{},"logo的布局其实是有讲究的，需要进行 ",[200,138545,138546],{},"logoSEO","的优化 （★★★）",[1221,138549,138550,138558,138566,138593],{},[160,138551,138552,138554,138555,138557],{},[200,138553,131622],{}," 里面首先放一个 ",[200,138556,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[160,138559,138560,138562,138563,138565],{},[200,138561,10],{}," 里面再放一个链接，可以返回首页的，把 ",[200,138564,131622],{}," 的背景图片给链接即可",[160,138567,138568,138569],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1221,138570,138571,138586],{},[160,138572,138573,138574,138577,138578,138581,138582,138585],{},"方法1：",[200,138575,138576],{},"text-indent"," 移到盒子外面（",[200,138579,138580],{},"text-indent: -9999px",") ，然后 ",[200,138583,138584],{},"overflow:hidden"," ，淘宝的做法",[160,138587,138588,138589,138592],{},"方法2：直接给 ",[200,138590,138591],{},"font-size: 0;"," 就看不到文字了，京东的做法",[160,138594,138595,138596,138598,138599,138601],{},"最后给链接一个 ",[200,138597,51465],{}," 属性，这样鼠标放到 ",[200,138600,131622],{}," 上就可以看到提示文字了",[19,138603,138449],{},[194,138605,138606],{"className":127357,"code":131843,"language":127359,"meta":27,"style":27},[200,138607,138608],{"__ignoreMap":27},[203,138609,138610,138612,138614,138616,138618,138620,138622,138624,138626,138628,138630],{"class":205,"line":206},[203,138611,1124],{"class":213},[203,138613,452],{"class":51358},[203,138615,61115],{"class":2052},[203,138617,259],{"class":213},[203,138619,131858],{"class":318},[203,138621,131861],{"class":2052},[203,138623,259],{"class":213},[203,138625,131866],{"class":318},[203,138627,131869],{"class":213},[203,138629,452],{"class":51358},[203,138631,51365],{"class":213},[19,138633,138489],{},[194,138635,138636],{"className":127357,"code":131843,"language":127359,"meta":27,"style":27},[200,138637,138638],{"__ignoreMap":27},[203,138639,138640,138642,138644,138646,138648,138650,138652,138654,138656,138658,138660],{"class":205,"line":206},[203,138641,1124],{"class":213},[203,138643,452],{"class":51358},[203,138645,61115],{"class":2052},[203,138647,259],{"class":213},[203,138649,131858],{"class":318},[203,138651,131861],{"class":2052},[203,138653,259],{"class":213},[203,138655,131866],{"class":318},[203,138657,131869],{"class":213},[203,138659,452],{"class":51358},[203,138661,51365],{"class":213},[19,138663,138664,138665,138667],{},"2 号盒子是 ",[200,138666,131635],{}," 搜索模块定位",[1221,138669,138670,138673,138676,138679],{},[160,138671,138672],{},"search盒子利用定位的方式放在对应的位置",[160,138674,138675],{},"search盒子设置绝对定位，header盒子设置相对定位",[160,138677,138678],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[160,138680,138681],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,138683,138449],{},[194,138685,138686],{"className":126610,"code":131930,"language":126612,"meta":27,"style":27},[200,138687,138688,138710,138714,138724],{"__ignoreMap":27},[203,138689,138690,138692,138694,138696,138698,138700,138702,138704,138706,138708],{"class":205,"line":206},[203,138691,51669],{"class":51358},[203,138693,12525],{"class":213},[203,138695,19],{"class":51358},[203,138697,12525],{"class":213},[203,138699,10],{"class":51358},[203,138701,12525],{"class":213},[203,138703,1221],{"class":51358},[203,138705,12525],{"class":213},[203,138707,160],{"class":51358},[203,138709,15662],{"class":213},[203,138711,138712],{"class":205,"line":124},[203,138713,131959],{"class":272},[203,138715,138716,138718,138720,138722],{"class":205,"line":1269},[203,138717,128226],{"class":262},[203,138719,51495],{"class":213},[203,138721,60927],{"class":262},[203,138723,1380],{"class":213},[203,138725,138726],{"class":205,"line":1284},[203,138727,1654],{"class":213},[19,138729,138489],{},[194,138731,138732],{"className":126610,"code":131930,"language":126612,"meta":27,"style":27},[200,138733,138734,138756,138760,138770],{"__ignoreMap":27},[203,138735,138736,138738,138740,138742,138744,138746,138748,138750,138752,138754],{"class":205,"line":206},[203,138737,51669],{"class":51358},[203,138739,12525],{"class":213},[203,138741,19],{"class":51358},[203,138743,12525],{"class":213},[203,138745,10],{"class":51358},[203,138747,12525],{"class":213},[203,138749,1221],{"class":51358},[203,138751,12525],{"class":213},[203,138753,160],{"class":51358},[203,138755,15662],{"class":213},[203,138757,138758],{"class":205,"line":124},[203,138759,131959],{"class":272},[203,138761,138762,138764,138766,138768],{"class":205,"line":1269},[203,138763,128226],{"class":262},[203,138765,51495],{"class":213},[203,138767,60927],{"class":262},[203,138769,1380],{"class":213},[203,138771,138772],{"class":205,"line":1284},[203,138773,1654],{"class":213},[19,138775,138776],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,138778,138779,138780,138783],{},"3 号盒子是 ",[200,138781,138782],{},"hotwords"," 热词模块定位",[1221,138785,138786,138789,138792],{},[160,138787,138788],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[160,138790,138791],{},"给里面所有的a标签设置 左右10px的外边距",[160,138793,138794],{},"给第一个a标签设置文字变红色（#c81623）",[19,138796,138449],{},[194,138798,138800],{"className":126610,"code":138799,"language":126612,"meta":27,"style":27},"div {\n  margin: 0 auto;\n}\n",[200,138801,138802,138808,138820],{"__ignoreMap":27},[203,138803,138804,138806],{"class":205,"line":206},[203,138805,51669],{"class":51358},[203,138807,15662],{"class":213},[203,138809,138810,138812,138814,138816,138818],{"class":205,"line":124},[203,138811,70528],{"class":262},[203,138813,51495],{"class":213},[203,138815,405],{"class":262},[203,138817,51614],{"class":262},[203,138819,1380],{"class":213},[203,138821,138822],{"class":205,"line":1269},[203,138823,1654],{"class":213},[19,138825,138489],{},[194,138827,138828],{"className":126610,"code":138799,"language":126612,"meta":27,"style":27},[200,138829,138830,138836,138848],{"__ignoreMap":27},[203,138831,138832,138834],{"class":205,"line":206},[203,138833,51669],{"class":51358},[203,138835,15662],{"class":213},[203,138837,138838,138840,138842,138844,138846],{"class":205,"line":124},[203,138839,70528],{"class":262},[203,138841,51495],{"class":213},[203,138843,405],{"class":262},[203,138845,51614],{"class":262},[203,138847,1380],{"class":213},[203,138849,138850],{"class":205,"line":1269},[203,138851,1654],{"class":213},[19,138853,138854,138855,138858],{},"4 号盒子是 ",[200,138856,138857],{},"shopcar"," 购物车模块",[1221,138860,138861,138866,138869,138872],{},[160,138862,123393,138863,138865],{},[200,138864,138857],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[160,138867,138868],{},"count 统计部分用绝对定位做",[160,138870,138871],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[160,138873,138874],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,138876,138449],{},[194,138878,138879],{"className":126610,"code":132042,"language":126612,"meta":27,"style":27},[200,138880,138881,138885,138899,138903,138917,138921,138935,138939,138953,138957],{"__ignoreMap":27},[203,138882,138883],{"class":205,"line":206},[203,138884,132049],{"class":272},[203,138886,138887,138889,138891,138893,138895,138897],{"class":205,"line":124},[203,138888,132054],{"class":2052},[203,138890,79865],{"class":213},[203,138892,128970],{"class":262},[203,138894,51495],{"class":213},[203,138896,132063],{"class":262},[203,138898,129540],{"class":213},[203,138900,138901],{"class":205,"line":1269},[203,138902,132070],{"class":272},[203,138904,138905,138907,138909,138911,138913,138915],{"class":205,"line":1284},[203,138906,132075],{"class":2052},[203,138908,79865],{"class":213},[203,138910,128970],{"class":262},[203,138912,51495],{"class":213},[203,138914,54822],{"class":262},[203,138916,129540],{"class":213},[203,138918,138919],{"class":205,"line":1290},[203,138920,132090],{"class":272},[203,138922,138923,138925,138927,138929,138931,138933],{"class":205,"line":1304},[203,138924,132095],{"class":2052},[203,138926,79865],{"class":213},[203,138928,128970],{"class":262},[203,138930,51495],{"class":213},[203,138932,54889],{"class":262},[203,138934,129540],{"class":213},[203,138936,138937],{"class":205,"line":1310},[203,138938,132110],{"class":272},[203,138940,138941,138943,138945,138947,138949,138951],{"class":205,"line":1401},[203,138942,132115],{"class":2052},[203,138944,79865],{"class":213},[203,138946,128970],{"class":262},[203,138948,51495],{"class":213},[203,138950,86291],{"class":262},[203,138952,129540],{"class":213},[203,138954,138955],{"class":205,"line":1407},[203,138956,132130],{"class":272},[203,138958,138959,138961,138963,138965,138967,138969],{"class":205,"line":1419},[203,138960,132135],{"class":2052},[203,138962,79865],{"class":213},[203,138964,128970],{"class":262},[203,138966,51495],{"class":213},[203,138968,132144],{"class":262},[203,138970,129540],{"class":213},[19,138972,138489],{},[194,138974,138975],{"className":126610,"code":132042,"language":126612,"meta":27,"style":27},[200,138976,138977,138981,138995,138999,139013,139017,139031,139035,139049,139053],{"__ignoreMap":27},[203,138978,138979],{"class":205,"line":206},[203,138980,132049],{"class":272},[203,138982,138983,138985,138987,138989,138991,138993],{"class":205,"line":124},[203,138984,132054],{"class":2052},[203,138986,79865],{"class":213},[203,138988,128970],{"class":262},[203,138990,51495],{"class":213},[203,138992,132063],{"class":262},[203,138994,129540],{"class":213},[203,138996,138997],{"class":205,"line":1269},[203,138998,132070],{"class":272},[203,139000,139001,139003,139005,139007,139009,139011],{"class":205,"line":1284},[203,139002,132075],{"class":2052},[203,139004,79865],{"class":213},[203,139006,128970],{"class":262},[203,139008,51495],{"class":213},[203,139010,54822],{"class":262},[203,139012,129540],{"class":213},[203,139014,139015],{"class":205,"line":1290},[203,139016,132090],{"class":272},[203,139018,139019,139021,139023,139025,139027,139029],{"class":205,"line":1304},[203,139020,132095],{"class":2052},[203,139022,79865],{"class":213},[203,139024,128970],{"class":262},[203,139026,51495],{"class":213},[203,139028,54889],{"class":262},[203,139030,129540],{"class":213},[203,139032,139033],{"class":205,"line":1310},[203,139034,132110],{"class":272},[203,139036,139037,139039,139041,139043,139045,139047],{"class":205,"line":1401},[203,139038,132115],{"class":2052},[203,139040,79865],{"class":213},[203,139042,128970],{"class":262},[203,139044,51495],{"class":213},[203,139046,86291],{"class":262},[203,139048,129540],{"class":213},[203,139050,139051],{"class":205,"line":1407},[203,139052,132130],{"class":272},[203,139054,139055,139057,139059,139061,139063,139065],{"class":205,"line":1419},[203,139056,132135],{"class":2052},[203,139058,79865],{"class":213},[203,139060,128970],{"class":262},[203,139062,51495],{"class":213},[203,139064,132144],{"class":262},[203,139066,129540],{"class":213},[174,139068,139070,139071,139073],{"id":139069},"_1544-nav导航模块制作","15.4.4 ",[200,139072,53771],{},"导航模块制作",[25,139075],{"style":126466,"src":139076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139078,139079,139081],{},[200,139080,53771],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139083,139084,139085],{},"1 号盒子左侧浮动，",[200,139086,139087],{},"dropdown",[1221,139089,139090,139100,139108,139114,139122,139132,139140,139151],{},[160,139091,139092,139093,101076,139096,139099],{},"1号盒子有讲究，根据相关性 里面包含 ",[200,139094,139095],{},".dt",[200,139097,139098],{},".dd"," 两个盒子",[160,139101,139102,139104,139105,139107],{},[200,139103,139095],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[200,139106,139098],{}," 挤到下面去了",[160,139109,139110,139111,139113],{},"给 ",[200,139112,139098],{}," 盒子设置宽度 和 高度，以及背景颜色",[160,139115,139110,139116,139118,139119,120295],{},[200,139117,139098],{}," 盒子里面定义 无序列表 （",[200,139120,139121],{},"ul > li > a",[160,139123,139124,139125,139127,139128,139131],{},"每个 ",[200,139126,160],{}," 都有一个高度（",[200,139129,139130],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[160,139133,139110,139134,139136,139137,120295],{},[200,139135,160],{}," 里面的a设置文字大小（",[200,139138,139139],{},"14px",[160,139141,139110,139142,139144,139145,139147,139148,139150],{},[200,139143,160],{}," 设置 ",[200,139146,127771],{},"，当鼠标移入的时候，让",[200,139149,160],{},"的背景变成白色，让里面的文字变成红色",[160,139152,139153,139155,139156,139158,139159,139161],{},[200,139154,160],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[200,139157,160],{},"的右侧，那么给",[200,139160,160],{},"设置相对定位",[19,139163,139164],{},"一定要注意相关性",[19,139166,138449],{},[194,139168,139169],{"className":126610,"code":138452,"language":126612,"meta":27,"style":27},[200,139170,139171,139179,139189,139199],{"__ignoreMap":27},[203,139172,139173,139175,139177],{"class":205,"line":206},[203,139174,51669],{"class":51358},[203,139176,137611],{"class":2052},[203,139178,15662],{"class":213},[203,139180,139181,139183,139185,139187],{"class":205,"line":124},[203,139182,137618],{"class":262},[203,139184,51495],{"class":213},[203,139186,7742],{"class":318},[203,139188,1380],{"class":213},[203,139190,139191,139193,139195,139197],{"class":205,"line":1269},[203,139192,128226],{"class":262},[203,139194,51495],{"class":213},[203,139196,60927],{"class":262},[203,139198,1380],{"class":213},[203,139200,139201],{"class":205,"line":1284},[203,139202,1654],{"class":213},[19,139204,138489],{},[194,139206,139207],{"className":126610,"code":138452,"language":126612,"meta":27,"style":27},[200,139208,139209,139217,139227,139237],{"__ignoreMap":27},[203,139210,139211,139213,139215],{"class":205,"line":206},[203,139212,51669],{"class":51358},[203,139214,137611],{"class":2052},[203,139216,15662],{"class":213},[203,139218,139219,139221,139223,139225],{"class":205,"line":124},[203,139220,137618],{"class":262},[203,139222,51495],{"class":213},[203,139224,7742],{"class":318},[203,139226,1380],{"class":213},[203,139228,139229,139231,139233,139235],{"class":205,"line":1269},[203,139230,128226],{"class":262},[203,139232,51495],{"class":213},[203,139234,60927],{"class":262},[203,139236,1380],{"class":213},[203,139238,139239],{"class":205,"line":1284},[203,139240,1654],{"class":213},[19,139242,139243],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139245,139246,139247,139250],{},"2 号盒子左侧浮动，",[200,139248,139249],{},"navitems"," 导航栏组",[1221,139252,139253,139258,139267],{},[160,139254,139255,139256],{},"里面结构是 ",[200,139257,139121],{},[160,139259,139260,139261,139263,139264,139266],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[200,139262,452],{},"左右的",[200,139265,30941],{},"把两侧撑开",[160,139268,139269],{},"让文字垂直居中（行高等于高度）",[25,139271],{"style":126466,"src":139272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139274,139275],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139277,138449],{},[194,139279,139281],{"className":126610,"code":139280,"language":126612,"meta":27,"style":27},".box {\n  float: left;\n}\n",[200,139282,139283,139289,139299],{"__ignoreMap":27},[203,139284,139285,139287],{"class":205,"line":206},[203,139286,130458],{"class":2052},[203,139288,15662],{"class":213},[203,139290,139291,139293,139295,139297],{"class":205,"line":124},[203,139292,131090],{"class":262},[203,139294,51495],{"class":213},[203,139296,23827],{"class":262},[203,139298,1380],{"class":213},[203,139300,139301],{"class":205,"line":1269},[203,139302,1654],{"class":213},[19,139304,138489],{},[194,139306,139307],{"className":126610,"code":139280,"language":126612,"meta":27,"style":27},[200,139308,139309,139315,139325],{"__ignoreMap":27},[203,139310,139311,139313],{"class":205,"line":206},[203,139312,130458],{"class":2052},[203,139314,15662],{"class":213},[203,139316,139317,139319,139321,139323],{"class":205,"line":124},[203,139318,131090],{"class":262},[203,139320,51495],{"class":213},[203,139322,23827],{"class":262},[203,139324,1380],{"class":213},[203,139326,139327],{"class":205,"line":1269},[203,139328,1654],{"class":213},[19,139330,139331],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[25,139333],{"style":126466,"src":139334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[194,139336,139337],{"className":126610,"code":130767,"language":126612,"meta":27,"style":27},[200,139338,139339,139345,139361],{"__ignoreMap":27},[203,139340,139341,139343],{"class":205,"line":206},[203,139342,51669],{"class":51358},[203,139344,15662],{"class":213},[203,139346,139347,139349,139351,139353,139355,139357,139359],{"class":205,"line":124},[203,139348,70954],{"class":262},[203,139350,51495],{"class":213},[203,139352,431],{"class":262},[203,139354,51550],{"class":209},[203,139356,51579],{"class":262},[203,139358,130002],{"class":262},[203,139360,1380],{"class":213},[203,139362,139363],{"class":205,"line":1269},[203,139364,1654],{"class":213},[174,139366,139368],{"id":139367},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[25,139370],{"style":126466,"src":139371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1221,139373,139374,139379,139384],{},[160,139375,139376,139378],{},[200,139377,131813],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[160,139380,139381,139383],{},[200,139382,131813],{}," 里面有一个大的版心",[160,139385,139386,139387,139390,139391],{},"版心里面包含 1 号盒子，",[200,139388,139389],{},"mod_service"," 是服务模块，mod 是模块的意思",[1221,139392,139393,139398,139411,139427,139432],{},[160,139394,139110,139395,139397],{},[200,139396,139389],{}," 设置高度（80px）和下边框",[160,139399,139400,139401,139404,139405,139407,139408,139410],{},"在里面定义 ",[200,139402,139403],{},"ul > li"," ,每个",[200,139406,160],{}," 宽度是300px 高度是 50px，给每个",[200,139409,160],{},"设置35px的左内边距",[160,139412,139413,139414,139416,139417,139419,139420,139422,139423,18500,139425,120295],{},"在每个",[200,139415,160],{},"里面，放一个 ",[200,139418,23000],{},"（里面放图标），一个",[200,139421,51669],{},"（里面放",[200,139424,51669],{},[200,139426,19],{},[160,139428,139110,139429,139431],{},[200,139430,23000],{},"设置浮动，让h5与这个div左右排列",[160,139433,139434],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139436,138449],{},[194,139438,139440],{"className":126610,"code":139439,"language":126612,"meta":27,"style":27},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[200,139441,139442,139448,139460,139472,139499],{"__ignoreMap":27},[203,139443,139444,139446],{"class":205,"line":206},[203,139445,134367],{"class":2052},[203,139447,15662],{"class":213},[203,139449,139450,139452,139454,139456,139458],{"class":205,"line":124},[203,139451,70626],{"class":262},[203,139453,51495],{"class":213},[203,139455,914],{"class":262},[203,139457,51550],{"class":209},[203,139459,1380],{"class":213},[203,139461,139462,139464,139466,139468,139470],{"class":205,"line":1269},[203,139463,70846],{"class":262},[203,139465,51495],{"class":213},[203,139467,914],{"class":262},[203,139469,51550],{"class":209},[203,139471,1380],{"class":213},[203,139473,139474,139476,139478,139480,139482,139484,139486,139488,139491,139493,139495,139497],{"class":205,"line":1284},[203,139475,70669],{"class":262},[203,139477,51495],{"class":213},[203,139479,61784],{"class":262},[203,139481,214],{"class":213},[203,139483,134406],{"class":5306},[203,139485,13804],{"class":213},[203,139487,61794],{"class":262},[203,139489,139490],{"class":262}," -10",[203,139492,51550],{"class":209},[203,139494,134425],{"class":262},[203,139496,51550],{"class":209},[203,139498,1380],{"class":213},[203,139500,139501],{"class":205,"line":1290},[203,139502,1654],{"class":213},[19,139504,138489],{},[194,139506,139507],{"className":126610,"code":139439,"language":126612,"meta":27,"style":27},[200,139508,139509,139515,139527,139539,139565],{"__ignoreMap":27},[203,139510,139511,139513],{"class":205,"line":206},[203,139512,134367],{"class":2052},[203,139514,15662],{"class":213},[203,139516,139517,139519,139521,139523,139525],{"class":205,"line":124},[203,139518,70626],{"class":262},[203,139520,51495],{"class":213},[203,139522,914],{"class":262},[203,139524,51550],{"class":209},[203,139526,1380],{"class":213},[203,139528,139529,139531,139533,139535,139537],{"class":205,"line":1269},[203,139530,70846],{"class":262},[203,139532,51495],{"class":213},[203,139534,914],{"class":262},[203,139536,51550],{"class":209},[203,139538,1380],{"class":213},[203,139540,139541,139543,139545,139547,139549,139551,139553,139555,139557,139559,139561,139563],{"class":205,"line":1284},[203,139542,70669],{"class":262},[203,139544,51495],{"class":213},[203,139546,61784],{"class":262},[203,139548,214],{"class":213},[203,139550,134406],{"class":5306},[203,139552,13804],{"class":213},[203,139554,61794],{"class":262},[203,139556,139490],{"class":262},[203,139558,51550],{"class":209},[203,139560,134425],{"class":262},[203,139562,51550],{"class":209},[203,139564,1380],{"class":213},[203,139566,139567],{"class":205,"line":1290},[203,139568,1654],{"class":213},[19,139570,139571],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1221,139573,139574,139577,139583,139589,139601],{},[160,139575,139576],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[160,139578,139579,139580,120295],{},"里面的布局利用 自定义列表来实现（",[200,139581,139582],{},"dl > dt + dd",[160,139584,139110,139585,139588],{},[200,139586,139587],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[160,139590,139110,139591,139594,139595,18500,139597,139600],{},[200,139592,139593],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[200,139596,139593],{},[200,139598,139599],{},"dd","之间有些距离",[160,139602,139603],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,139605,138449],{},[194,139607,139608],{"className":126610,"code":138799,"language":126612,"meta":27,"style":27},[200,139609,139610,139616,139628],{"__ignoreMap":27},[203,139611,139612,139614],{"class":205,"line":206},[203,139613,51669],{"class":51358},[203,139615,15662],{"class":213},[203,139617,139618,139620,139622,139624,139626],{"class":205,"line":124},[203,139619,70528],{"class":262},[203,139621,51495],{"class":213},[203,139623,405],{"class":262},[203,139625,51614],{"class":262},[203,139627,1380],{"class":213},[203,139629,139630],{"class":205,"line":1269},[203,139631,1654],{"class":213},[19,139633,138489],{},[194,139635,139636],{"className":126610,"code":138799,"language":126612,"meta":27,"style":27},[200,139637,139638,139644,139656],{"__ignoreMap":27},[203,139639,139640,139642],{"class":205,"line":206},[203,139641,51669],{"class":51358},[203,139643,15662],{"class":213},[203,139645,139646,139648,139650,139652,139654],{"class":205,"line":124},[203,139647,70528],{"class":262},[203,139649,51495],{"class":213},[203,139651,405],{"class":262},[203,139653,51614],{"class":262},[203,139655,1380],{"class":213},[203,139657,139658],{"class":205,"line":1269},[203,139659,1654],{"class":213},[19,139661,139662],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1221,139664,139665,139674,139677,139688],{},[160,139666,139667,139668,139670,139671,139673],{},"分为上下两块，上面是 ",[200,139669,131830],{}," 友情链接，下面是 ",[200,139672,131823],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[160,139675,139676],{},"把内容分别复制到相应模块中",[160,139678,139110,139679,139681,139682,139684,139685,139687],{},[200,139680,131830],{}," 设置 15px 的下外边距，给",[200,139683,131830],{}," 里面 的 ",[200,139686,452],{}," 标签设置 左右 3px 的外边距",[160,139689,139690,139691,139693],{},"给",[200,139692,131823],{}," 设置 20px 的行高",[19,139695,138449],{},[194,139697,139698],{"className":126610,"code":138799,"language":126612,"meta":27,"style":27},[200,139699,139700,139706,139718],{"__ignoreMap":27},[203,139701,139702,139704],{"class":205,"line":206},[203,139703,51669],{"class":51358},[203,139705,15662],{"class":213},[203,139707,139708,139710,139712,139714,139716],{"class":205,"line":124},[203,139709,70528],{"class":262},[203,139711,51495],{"class":213},[203,139713,405],{"class":262},[203,139715,51614],{"class":262},[203,139717,1380],{"class":213},[203,139719,139720],{"class":205,"line":1269},[203,139721,1654],{"class":213},[19,139723,138489],{},[194,139725,139726],{"className":126610,"code":138799,"language":126612,"meta":27,"style":27},[200,139727,139728,139734,139746],{"__ignoreMap":27},[203,139729,139730,139732],{"class":205,"line":206},[203,139731,51669],{"class":51358},[203,139733,15662],{"class":213},[203,139735,139736,139738,139740,139742,139744],{"class":205,"line":124},[203,139737,70528],{"class":262},[203,139739,51495],{"class":213},[203,139741,405],{"class":262},[203,139743,51614],{"class":262},[203,139745,1380],{"class":213},[203,139747,139748],{"class":205,"line":1269},[203,139749,1654],{"class":213},[19,139751,139752],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5216,139754,139755],{},"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":27,"searchDepth":124,"depth":124,"links":139757},[139758,139759,139760,139767],{"id":138038,"depth":124,"text":138039},{"id":138057,"depth":124,"text":138058},{"id":138084,"depth":124,"text":138085,"children":139761},[139762,139763,139764,139765,139766],{"id":138088,"depth":1269,"text":138089},{"id":138101,"depth":1269,"text":138102},{"id":138125,"depth":1269,"text":138126},{"id":138147,"depth":1269,"text":138148},{"id":138219,"depth":1269,"text":138220},{"id":138345,"depth":124,"text":138346,"children":139768},[139769,139770,139771,139772,139774],{"id":138349,"depth":1269,"text":138350},{"id":138356,"depth":1269,"text":138357},{"id":138528,"depth":1269,"text":138529},{"id":139069,"depth":1269,"text":139773},"15.4.4 nav导航模块制作",{"id":139367,"depth":1269,"text":139368},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138030,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139781,"title":139782,"body":139783,"description":23467,"extension":129,"meta":142185,"navigation":131,"path":142186,"seo":142187,"stem":142188,"__hash__":142189},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139784,"toc":142162},[139785,139788,139792,139796,139808,139811,139814,139817,139828,139830,139854,139856,139880,139885,139888,139890,139926,139928,139964,139967,139972,139975,139978,139981,140011,140018,140021,140031,140033,140067,140070,140104,140110,140127,140129,140165,140167,140203,140208,140233,140235,140261,140263,140287,140294,140297,140361,140363,140405,140407,140447,140454,140459,140461,140491,140493,140523,140527,140530,140537,140549,140551,140577,140579,140603,140606,140608,140632,140638,140648,140650,140680,140682,140712,140719,140760,140762,140798,140800,140836,140840,140843,140846,140849,140855,140860,140863,140886,140889,140913,140916,140940,140945,140948,140951,140954,140957,140960,141034,141036,141066,141068,141098,141101,141104,141136,141140,141144,141158,141167,141170,141175,141177,141271,141273,141367,141390,141392,141416,141418,141442,141449,141452,141462,141464,141488,141493,141501,141503,141533,141538,141578,141580,141606,141608,141634,141638,141641,141646,141649,141653,141661,141668,141676,141678,141708,141710,141740,141748,141751,141754,141756,141786,141788,141818,141821,141826,141828,141852,141854,141878,141881,141966,141968,141992,141994,142018,142022,142024,142048,142050,142084,142088,142102,142105,142110,142113,142118,142121,142151,142159],[10,139786,139782],{"id":139787},"_16-品优购项目下篇-主体与页面开发",[14,139789,139791],{"id":139790},"_161-项目主体模块制作","16.1 项目主体模块制作",[174,139793,139795],{"id":139794},"_1611-首页制作","16.1.1 首页制作",[19,139797,139798,139800,139801,139803,139804,139807],{},[363,139799,102116],{}," 主体模块是 ",[363,139802,74116],{}," 里面专有的，注意需要新的样式文件 ",[363,139805,139806],{},"index.css，"," 就不要写在common.css中了",[25,139809],{"style":126466,"src":139810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[25,139812],{"style":126466,"src":139813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,139815,139816],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1221,139818,139819,139822,139825],{},[160,139820,139821],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[160,139823,139824],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[160,139826,139827],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,139829,138449],{},[194,139831,139832],{"className":126610,"code":139280,"language":126612,"meta":27,"style":27},[200,139833,139834,139840,139850],{"__ignoreMap":27},[203,139835,139836,139838],{"class":205,"line":206},[203,139837,130458],{"class":2052},[203,139839,15662],{"class":213},[203,139841,139842,139844,139846,139848],{"class":205,"line":124},[203,139843,131090],{"class":262},[203,139845,51495],{"class":213},[203,139847,23827],{"class":262},[203,139849,1380],{"class":213},[203,139851,139852],{"class":205,"line":1269},[203,139853,1654],{"class":213},[19,139855,138489],{},[194,139857,139858],{"className":126610,"code":139280,"language":126612,"meta":27,"style":27},[200,139859,139860,139866,139876],{"__ignoreMap":27},[203,139861,139862,139864],{"class":205,"line":206},[203,139863,130458],{"class":2052},[203,139865,15662],{"class":213},[203,139867,139868,139870,139872,139874],{"class":205,"line":124},[203,139869,131090],{"class":262},[203,139871,51495],{"class":213},[203,139873,23827],{"class":262},[203,139875,1380],{"class":213},[203,139877,139878],{"class":205,"line":1269},[203,139879,1654],{"class":213},[157,139881,139882],{},[160,139883,139884],{},"左侧focus模块制作",[25,139886],{"style":126466,"src":139887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,139889,138449],{},[194,139891,139892],{"className":126610,"code":127933,"language":126612,"meta":27,"style":27},[200,139893,139894,139902,139912,139922],{"__ignoreMap":27},[203,139895,139896,139898,139900],{"class":205,"line":206},[203,139897,53879],{"class":51358},[203,139899,61958],{"class":2052},[203,139901,15662],{"class":213},[203,139903,139904,139906,139908,139910],{"class":205,"line":124},[203,139905,127948],{"class":262},[203,139907,51495],{"class":213},[203,139909,54947],{"class":262},[203,139911,1380],{"class":213},[203,139913,139914,139916,139918,139920],{"class":205,"line":1269},[203,139915,70856],{"class":262},[203,139917,51495],{"class":213},[203,139919,54795],{"class":262},[203,139921,1380],{"class":213},[203,139923,139924],{"class":205,"line":1284},[203,139925,1654],{"class":213},[19,139927,138489],{},[194,139929,139930],{"className":126610,"code":127933,"language":126612,"meta":27,"style":27},[200,139931,139932,139940,139950,139960],{"__ignoreMap":27},[203,139933,139934,139936,139938],{"class":205,"line":206},[203,139935,53879],{"class":51358},[203,139937,61958],{"class":2052},[203,139939,15662],{"class":213},[203,139941,139942,139944,139946,139948],{"class":205,"line":124},[203,139943,127948],{"class":262},[203,139945,51495],{"class":213},[203,139947,54947],{"class":262},[203,139949,1380],{"class":213},[203,139951,139952,139954,139956,139958],{"class":205,"line":1269},[203,139953,70856],{"class":262},[203,139955,51495],{"class":213},[203,139957,54795],{"class":262},[203,139959,1380],{"class":213},[203,139961,139962],{"class":205,"line":1284},[203,139963,1654],{"class":213},[19,139965,139966],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[157,139968,139969],{"start":124},[160,139970,139971],{},"右侧newsflash模块制作",[25,139973],{"style":126466,"src":139974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,139976,139977],{},"右侧的模块 分为上中下三个盒子",[19,139979,139980],{},"结构代码：",[194,139982,139983],{"className":127357,"code":134112,"language":127359,"meta":27,"style":27},[200,139984,139985],{"__ignoreMap":27},[203,139986,139987,139989,139991,139993,139995,139997,139999,140001,140003,140005,140007,140009],{"class":205,"line":206},[203,139988,1124],{"class":213},[203,139990,25],{"class":51358},[203,139992,55297],{"class":2052},[203,139994,259],{"class":213},[203,139996,134127],{"class":318},[203,139998,55305],{"class":2052},[203,140000,259],{"class":213},[203,140002,134134],{"class":318},[203,140004,134137],{"class":2052},[203,140006,259],{"class":213},[203,140008,134142],{"class":318},[203,140010,51365],{"class":213},[19,140012,140013,140014,140017],{},"1 号盒子为 ",[200,140015,140016],{},"news"," 新闻模块 高度为 165px",[25,140019],{"style":126466,"src":140020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140022,140023,140024,140027,140028],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[200,140025,140026],{},"news-hd","，下面是 ",[200,140029,140030],{},"news-bd",[19,140032,139980],{},[194,140034,140035],{"className":127357,"code":130714,"language":127359,"meta":27,"style":27},[200,140036,140037,140041,140055,140059],{"__ignoreMap":27},[203,140038,140039],{"class":205,"line":206},[203,140040,130721],{"class":272},[203,140042,140043,140045,140047,140049,140051,140053],{"class":205,"line":124},[203,140044,1124],{"class":213},[203,140046,51669],{"class":51358},[203,140048,53544],{"class":2052},[203,140050,259],{"class":213},[203,140052,130734],{"class":318},[203,140054,51365],{"class":213},[203,140056,140057],{"class":205,"line":1269},[203,140058,130741],{"class":213},[203,140060,140061,140063,140065],{"class":205,"line":1284},[203,140062,51843],{"class":213},[203,140064,51669],{"class":51358},[203,140066,51365],{"class":213},[19,140068,140069],{},"样式代码：",[194,140071,140072],{"className":127357,"code":130714,"language":127359,"meta":27,"style":27},[200,140073,140074,140078,140092,140096],{"__ignoreMap":27},[203,140075,140076],{"class":205,"line":206},[203,140077,130721],{"class":272},[203,140079,140080,140082,140084,140086,140088,140090],{"class":205,"line":124},[203,140081,1124],{"class":213},[203,140083,51669],{"class":51358},[203,140085,53544],{"class":2052},[203,140087,259],{"class":213},[203,140089,130734],{"class":318},[203,140091,51365],{"class":213},[203,140093,140094],{"class":205,"line":1269},[203,140095,130741],{"class":213},[203,140097,140098,140100,140102],{"class":205,"line":1284},[203,140099,51843],{"class":213},[203,140101,51669],{"class":51358},[203,140103,51365],{"class":213},[19,140105,140106,140107,140109],{},"上面是",[200,140108,140026],{},"，设置高度是 33px，设置下边框",[1221,140111,140112,140118],{},[160,140113,140114,140115,140117],{},"里面放一个",[200,140116,23000],{}," 标题",[160,140119,140120,140121,140123,140124,140126],{},"放一个a",[200,140122,102751],{},"，内容是 更多，然后让 ",[200,140125,452],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140128,139980],{},[194,140130,140131],{"className":126610,"code":138452,"language":126612,"meta":27,"style":27},[200,140132,140133,140141,140151,140161],{"__ignoreMap":27},[203,140134,140135,140137,140139],{"class":205,"line":206},[203,140136,51669],{"class":51358},[203,140138,137611],{"class":2052},[203,140140,15662],{"class":213},[203,140142,140143,140145,140147,140149],{"class":205,"line":124},[203,140144,137618],{"class":262},[203,140146,51495],{"class":213},[203,140148,7742],{"class":318},[203,140150,1380],{"class":213},[203,140152,140153,140155,140157,140159],{"class":205,"line":1269},[203,140154,128226],{"class":262},[203,140156,51495],{"class":213},[203,140158,60927],{"class":262},[203,140160,1380],{"class":213},[203,140162,140163],{"class":205,"line":1284},[203,140164,1654],{"class":213},[19,140166,140069],{},[194,140168,140169],{"className":126610,"code":138452,"language":126612,"meta":27,"style":27},[200,140170,140171,140179,140189,140199],{"__ignoreMap":27},[203,140172,140173,140175,140177],{"class":205,"line":206},[203,140174,51669],{"class":51358},[203,140176,137611],{"class":2052},[203,140178,15662],{"class":213},[203,140180,140181,140183,140185,140187],{"class":205,"line":124},[203,140182,137618],{"class":262},[203,140184,51495],{"class":213},[203,140186,7742],{"class":318},[203,140188,1380],{"class":213},[203,140190,140191,140193,140195,140197],{"class":205,"line":1269},[203,140192,128226],{"class":262},[203,140194,51495],{"class":213},[203,140196,60927],{"class":262},[203,140198,1380],{"class":213},[203,140200,140201],{"class":205,"line":1284},[203,140202,1654],{"class":213},[19,140204,140205,140206],{},"下面是",[200,140207,140030],{},[1221,140209,140210,140218],{},[160,140211,140212,140213,101076,140215,140217],{},"里面包含 ",[200,140214,1221],{},[200,140216,160],{}," 还有链接",[160,140219,139690,140220,140222,140223,140225,140226,140229,140230],{},[200,140221,160],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[200,140224,131276],{}," 2.设置 ",[200,140227,140228],{},"white-space: nowrap;"," 3. 设置 ",[200,140231,140232],{},"text-overflow: ellipsis;",[19,140234,139980],{},[194,140236,140238],{"className":126610,"code":140237,"language":126612,"meta":27,"style":27},"div {\n  overflow: hidden;\n}\n",[200,140239,140240,140246,140257],{"__ignoreMap":27},[203,140241,140242,140244],{"class":205,"line":206},[203,140243,51669],{"class":51358},[203,140245,15662],{"class":213},[203,140247,140248,140251,140253,140255],{"class":205,"line":124},[203,140249,140250],{"class":262},"  overflow",[203,140252,51495],{"class":213},[203,140254,61772],{"class":262},[203,140256,1380],{"class":213},[203,140258,140259],{"class":205,"line":1269},[203,140260,1654],{"class":213},[19,140262,140069],{},[194,140264,140265],{"className":126610,"code":140237,"language":126612,"meta":27,"style":27},[200,140266,140267,140273,140283],{"__ignoreMap":27},[203,140268,140269,140271],{"class":205,"line":206},[203,140270,51669],{"class":51358},[203,140272,15662],{"class":213},[203,140274,140275,140277,140279,140281],{"class":205,"line":124},[203,140276,140250],{"class":262},[203,140278,51495],{"class":213},[203,140280,61772],{"class":262},[203,140282,1380],{"class":213},[203,140284,140285],{"class":205,"line":1269},[203,140286,1654],{"class":213},[19,140288,140289,140290,140293],{},"2 号盒子为 ",[200,140291,140292],{},"lifeservice"," 生活服务模块 高度为 209px",[25,140295],{"style":126466,"src":140296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1221,140298,140299,140302,140312,140336,140347],{},[160,140300,140301],{},"设置边框（左右下边框）",[160,140303,140304,140305,140308,140309,140311],{},"里面的内容 是 ",[200,140306,140307],{},"ul > 12*li","，给",[200,140310,160],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[160,140313,140314,140315],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1221,140316,140317,140322,140331],{},[160,140318,140319,140321],{},[200,140320,140292],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[160,140323,140324,140325,140327,140328,140330],{},"可以让 ",[200,140326,140292],{}," 里面的 ",[200,140329,1221],{}," 宽度为 252，就可以装的下 4 个 小 li",[160,140332,140333,140335],{},[200,140334,140292],{}," 盒子 overflow 隐藏多余的部分就可以了",[160,140337,116525,140338,140340,140341,140343,140344,140346],{},[200,140339,160],{}," 里面放一个 ",[200,140342,655],{},"（里面放图标），下面的文本用 ",[200,140345,19],{}," 标签包裹",[160,140348,139110,140349,140351,140352,140354,140355,139144,140357,140360],{},[200,140350,655],{}," 设置 24px宽和28px的高（注意 ",[200,140353,655],{}," 是行内元素， 转成行内块），给 ",[200,140356,160],{},[200,140358,140359],{},"text-align:center"," 让里面内容居中显示",[19,140362,139980],{},[194,140364,140366],{"className":126610,"code":140365,"language":126612,"meta":27,"style":27},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[200,140367,140368,140386,140391,140401],{"__ignoreMap":27},[203,140369,140370,140372,140374,140376,140378,140380,140382,140384],{"class":205,"line":206},[203,140371,203],{"class":51358},[203,140373,12525],{"class":213},[203,140375,452],{"class":51358},[203,140377,12525],{"class":213},[203,140379,23644],{"class":51358},[203,140381,12525],{"class":213},[203,140383,363],{"class":51358},[203,140385,15662],{"class":213},[203,140387,140388],{"class":205,"line":124},[203,140389,140390],{"class":272},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[203,140392,140393,140395,140397,140399],{"class":205,"line":1269},[203,140394,128226],{"class":262},[203,140396,51495],{"class":213},[203,140398,128288],{"class":262},[203,140400,1380],{"class":213},[203,140402,140403],{"class":205,"line":1284},[203,140404,1654],{"class":213},[19,140406,140069],{},[194,140408,140409],{"className":126610,"code":140365,"language":126612,"meta":27,"style":27},[200,140410,140411,140429,140433,140443],{"__ignoreMap":27},[203,140412,140413,140415,140417,140419,140421,140423,140425,140427],{"class":205,"line":206},[203,140414,203],{"class":51358},[203,140416,12525],{"class":213},[203,140418,452],{"class":51358},[203,140420,12525],{"class":213},[203,140422,23644],{"class":51358},[203,140424,12525],{"class":213},[203,140426,363],{"class":51358},[203,140428,15662],{"class":213},[203,140430,140431],{"class":205,"line":124},[203,140432,140390],{"class":272},[203,140434,140435,140437,140439,140441],{"class":205,"line":1269},[203,140436,128226],{"class":262},[203,140438,51495],{"class":213},[203,140440,128288],{"class":262},[203,140442,1380],{"class":213},[203,140444,140445],{"class":205,"line":1284},[203,140446,1654],{"class":213},[19,140448,140449,140450,140453],{},"3 号盒子为 ",[200,140451,140452],{},"bargain"," 特价商品",[1221,140455,140456],{},[160,140457,140458],{},"这个比较简单，直接插入一张图片即可",[19,140460,139980],{},[194,140462,140463],{"className":127357,"code":134112,"language":127359,"meta":27,"style":27},[200,140464,140465],{"__ignoreMap":27},[203,140466,140467,140469,140471,140473,140475,140477,140479,140481,140483,140485,140487,140489],{"class":205,"line":206},[203,140468,1124],{"class":213},[203,140470,25],{"class":51358},[203,140472,55297],{"class":2052},[203,140474,259],{"class":213},[203,140476,134127],{"class":318},[203,140478,55305],{"class":2052},[203,140480,259],{"class":213},[203,140482,134134],{"class":318},[203,140484,134137],{"class":2052},[203,140486,259],{"class":213},[203,140488,134142],{"class":318},[203,140490,51365],{"class":213},[19,140492,140069],{},[194,140494,140495],{"className":127357,"code":134112,"language":127359,"meta":27,"style":27},[200,140496,140497],{"__ignoreMap":27},[203,140498,140499,140501,140503,140505,140507,140509,140511,140513,140515,140517,140519,140521],{"class":205,"line":206},[203,140500,1124],{"class":213},[203,140502,25],{"class":51358},[203,140504,55297],{"class":2052},[203,140506,259],{"class":213},[203,140508,134127],{"class":318},[203,140510,55305],{"class":2052},[203,140512,259],{"class":213},[203,140514,134134],{"class":318},[203,140516,134137],{"class":2052},[203,140518,259],{"class":213},[203,140520,134142],{"class":318},[203,140522,51365],{"class":213},[174,140524,140526],{"id":140525},"_1612-推荐模块制作","16.1.2 推荐模块制作",[25,140528],{"style":126466,"src":140529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,140531,140532,140533,140536],{},"大盒子 ",[200,140534,140535],{},"recom"," 推荐模块 recommend",[1221,140538,140539],{},[160,140540,140541,140542,140544,140545,140548],{},"给这个 ",[200,140543,140535],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[200,140546,140547],{},"#ebebeb","），设置距离上边 12px",[19,140550,139980],{},[194,140552,140554],{"className":126610,"code":140553,"language":126612,"meta":27,"style":27},"div {\n  background-color: #f0f0f0;\n}\n",[200,140555,140556,140562,140573],{"__ignoreMap":27},[203,140557,140558,140560],{"class":205,"line":206},[203,140559,51669],{"class":51358},[203,140561,15662],{"class":213},[203,140563,140564,140566,140568,140571],{"class":205,"line":124},[203,140565,70936],{"class":262},[203,140567,51495],{"class":213},[203,140569,140570],{"class":262},"#f0f0f0",[203,140572,1380],{"class":213},[203,140574,140575],{"class":205,"line":1269},[203,140576,1654],{"class":213},[19,140578,140069],{},[194,140580,140581],{"className":126610,"code":140553,"language":126612,"meta":27,"style":27},[200,140582,140583,140589,140599],{"__ignoreMap":27},[203,140584,140585,140587],{"class":205,"line":206},[203,140586,51669],{"class":51358},[203,140588,15662],{"class":213},[203,140590,140591,140593,140595,140597],{"class":205,"line":124},[203,140592,70936],{"class":262},[203,140594,51495],{"class":213},[203,140596,140570],{"class":262},[203,140598,1380],{"class":213},[203,140600,140601],{"class":205,"line":1269},[203,140602,1654],{"class":213},[19,140604,140605],{},"里面包含 2 个盒子， 浮动即可",[19,140607,139980],{},[194,140609,140610],{"className":126610,"code":139280,"language":126612,"meta":27,"style":27},[200,140611,140612,140618,140628],{"__ignoreMap":27},[203,140613,140614,140616],{"class":205,"line":206},[203,140615,130458],{"class":2052},[203,140617,15662],{"class":213},[203,140619,140620,140622,140624,140626],{"class":205,"line":124},[203,140621,131090],{"class":262},[203,140623,51495],{"class":213},[203,140625,23827],{"class":262},[203,140627,1380],{"class":213},[203,140629,140630],{"class":205,"line":1269},[203,140631,1654],{"class":213},[19,140633,140634,140635],{},"1 号盒子 ",[200,140636,140637],{},"recom_hd",[1221,140639,140640,140643],{},[160,140641,140642],{},"设置宽度205px，高度163px",[160,140644,140114,140645,140647],{},[200,140646,25],{},"标签，插入图片即可",[19,140649,139980],{},[194,140651,140652],{"className":127357,"code":134112,"language":127359,"meta":27,"style":27},[200,140653,140654],{"__ignoreMap":27},[203,140655,140656,140658,140660,140662,140664,140666,140668,140670,140672,140674,140676,140678],{"class":205,"line":206},[203,140657,1124],{"class":213},[203,140659,25],{"class":51358},[203,140661,55297],{"class":2052},[203,140663,259],{"class":213},[203,140665,134127],{"class":318},[203,140667,55305],{"class":2052},[203,140669,259],{"class":213},[203,140671,134134],{"class":318},[203,140673,134137],{"class":2052},[203,140675,259],{"class":213},[203,140677,134142],{"class":318},[203,140679,51365],{"class":213},[19,140681,140069],{},[194,140683,140684],{"className":127357,"code":134112,"language":127359,"meta":27,"style":27},[200,140685,140686],{"__ignoreMap":27},[203,140687,140688,140690,140692,140694,140696,140698,140700,140702,140704,140706,140708,140710],{"class":205,"line":206},[203,140689,1124],{"class":213},[203,140691,25],{"class":51358},[203,140693,55297],{"class":2052},[203,140695,259],{"class":213},[203,140697,134127],{"class":318},[203,140699,55305],{"class":2052},[203,140701,259],{"class":213},[203,140703,134134],{"class":318},[203,140705,134137],{"class":2052},[203,140707,259],{"class":213},[203,140709,134142],{"class":318},[203,140711,51365],{"class":213},[19,140713,140714,140715,140718],{},"2 号盒子 ",[200,140716,140717],{},"recom_bd"," ，注意里面的小竖线",[1221,140720,140721,140732,140735,140740,140745],{},[160,140722,140723,140724,140726,140727,140729,140730],{},"右侧结构里面放 ",[200,140725,1221],{}," 包含 4个 ",[200,140728,160],{},"，每个li里面包含一个",[200,140731,25],{},[160,140733,140734],{},"直接利用切片工具把里面的内容当成一张图片",[160,140736,139110,140737,140739],{},[200,140738,160],{}," 设置浮动",[160,140741,139110,140742,140744],{},[200,140743,25],{}," 设置宽高，宽度 248px，高度 163px",[160,140746,140747,140748,140308,140751,140753,140754,140756,140757],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[200,140749,140750],{},"top 10px",[200,140752,160],{},"设置相对定位（注意，最后一个",[200,140755,160],{},"不用设置伪元素），可以利用 ",[200,140758,140759],{},"nth-child(-n+3){...}",[19,140761,139980],{},[194,140763,140764],{"className":126610,"code":138452,"language":126612,"meta":27,"style":27},[200,140765,140766,140774,140784,140794],{"__ignoreMap":27},[203,140767,140768,140770,140772],{"class":205,"line":206},[203,140769,51669],{"class":51358},[203,140771,137611],{"class":2052},[203,140773,15662],{"class":213},[203,140775,140776,140778,140780,140782],{"class":205,"line":124},[203,140777,137618],{"class":262},[203,140779,51495],{"class":213},[203,140781,7742],{"class":318},[203,140783,1380],{"class":213},[203,140785,140786,140788,140790,140792],{"class":205,"line":1269},[203,140787,128226],{"class":262},[203,140789,51495],{"class":213},[203,140791,60927],{"class":262},[203,140793,1380],{"class":213},[203,140795,140796],{"class":205,"line":1284},[203,140797,1654],{"class":213},[19,140799,140069],{},[194,140801,140802],{"className":126610,"code":138452,"language":126612,"meta":27,"style":27},[200,140803,140804,140812,140822,140832],{"__ignoreMap":27},[203,140805,140806,140808,140810],{"class":205,"line":206},[203,140807,51669],{"class":51358},[203,140809,137611],{"class":2052},[203,140811,15662],{"class":213},[203,140813,140814,140816,140818,140820],{"class":205,"line":124},[203,140815,137618],{"class":262},[203,140817,51495],{"class":213},[203,140819,7742],{"class":318},[203,140821,1380],{"class":213},[203,140823,140824,140826,140828,140830],{"class":205,"line":1269},[203,140825,128226],{"class":262},[203,140827,51495],{"class":213},[203,140829,60927],{"class":262},[203,140831,1380],{"class":213},[203,140833,140834],{"class":205,"line":1284},[203,140835,1654],{"class":213},[174,140837,140839],{"id":140838},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[25,140841],{"style":126466,"src":140842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,140844,140845],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,140847,140848],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,140850,140851,140854],{},[200,140852,140853],{},"box_hd"," 制作",[19,140856,140634,140857,140859],{},[200,140858,140853],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[25,140861],{"style":126466,"src":140862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1221,140864,140865,140870,140875,140878],{},[160,140866,140867,140869],{},[200,140868,140853],{}," 给 30px 的高度，2个像素的下边框",[160,140871,140872,140873],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[200,140874,139121],{},[160,140876,140877],{},"左侧盒左浮动，右侧盒子右浮动",[160,140879,140880,140882,140883,140885],{},[200,140881,452],{},"标签之间的距离用左右的",[200,140884,30941],{},"撑开即可",[19,140887,140888],{},"结构代码",[194,140890,140891],{"className":126610,"code":139280,"language":126612,"meta":27,"style":27},[200,140892,140893,140899,140909],{"__ignoreMap":27},[203,140894,140895,140897],{"class":205,"line":206},[203,140896,130458],{"class":2052},[203,140898,15662],{"class":213},[203,140900,140901,140903,140905,140907],{"class":205,"line":124},[203,140902,131090],{"class":262},[203,140904,51495],{"class":213},[203,140906,23827],{"class":262},[203,140908,1380],{"class":213},[203,140910,140911],{"class":205,"line":1269},[203,140912,1654],{"class":213},[19,140914,140915],{},"样式代码",[194,140917,140918],{"className":126610,"code":139280,"language":126612,"meta":27,"style":27},[200,140919,140920,140926,140936],{"__ignoreMap":27},[203,140921,140922,140924],{"class":205,"line":206},[203,140923,130458],{"class":2052},[203,140925,15662],{"class":213},[203,140927,140928,140930,140932,140934],{"class":205,"line":124},[203,140929,131090],{"class":262},[203,140931,51495],{"class":213},[203,140933,23827],{"class":262},[203,140935,1380],{"class":213},[203,140937,140938],{"class":205,"line":1269},[203,140939,1654],{"class":213},[19,140941,140942,140854],{},[200,140943,140944],{},"box_bd",[19,140946,140947],{},"2 号盒子 box_bd，不要给高度",[25,140949],{"style":126466,"src":140950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,140952,140953],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,140955,140956],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,140958,140959],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1221,140961,140962,140974,140990],{},[160,140963,140964,140966,140967,140970,140971,140973],{},[200,140965,140944],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[200,140968,140969],{},"tab_content","，在",[200,140972,140969],{}," 里面包裹tab选项卡对应的内容",[160,140975,140976,140977,140980,140981,140983,140984,140986,140987,140989],{},"内容被一个大盒子包裹（",[200,140978,140979],{},"tab_list_item","），里面是 ",[200,140982,1221],{}," 包裹 5个 ",[200,140985,160],{},"，每个",[200,140988,160],{},"设置对应的宽度，然后设置浮动",[160,140991,140992,140993,140995,140996,140998,140999],{},"而这5个",[200,140994,160],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[200,140997,160],{},"设置",[1221,141000,141001,141019,141022],{},[160,141002,141003,141004,141006,141007,141009,141010,141012,141013,141015,141016,141018],{},"第一个小 ",[200,141005,160],{}," 分为上下结构，上面是 ",[200,141008,1221],{}," 包裹 ",[200,141011,160],{}," ，",[200,141014,160],{},"里面包裹 ",[200,141017,452],{},"，下面插入一张图片",[160,141020,141021],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[160,141023,141024,141025,141027,141028,141030,141031,141033],{},"后面的小 ",[200,141026,160],{}," 里面先放一个",[200,141029,452],{},"标签，然后在",[200,141032,452],{},"标签里面插入图片即可",[19,141035,140888],{},[194,141037,141038],{"className":127357,"code":134112,"language":127359,"meta":27,"style":27},[200,141039,141040],{"__ignoreMap":27},[203,141041,141042,141044,141046,141048,141050,141052,141054,141056,141058,141060,141062,141064],{"class":205,"line":206},[203,141043,1124],{"class":213},[203,141045,25],{"class":51358},[203,141047,55297],{"class":2052},[203,141049,259],{"class":213},[203,141051,134127],{"class":318},[203,141053,55305],{"class":2052},[203,141055,259],{"class":213},[203,141057,134134],{"class":318},[203,141059,134137],{"class":2052},[203,141061,259],{"class":213},[203,141063,134142],{"class":318},[203,141065,51365],{"class":213},[19,141067,140915],{},[194,141069,141070],{"className":127357,"code":134112,"language":127359,"meta":27,"style":27},[200,141071,141072],{"__ignoreMap":27},[203,141073,141074,141076,141078,141080,141082,141084,141086,141088,141090,141092,141094,141096],{"class":205,"line":206},[203,141075,1124],{"class":213},[203,141077,25],{"class":51358},[203,141079,55297],{"class":2052},[203,141081,259],{"class":213},[203,141083,134127],{"class":318},[203,141085,55305],{"class":2052},[203,141087,259],{"class":213},[203,141089,134134],{"class":318},[203,141091,134137],{"class":2052},[203,141093,259],{"class":213},[203,141095,134142],{"class":318},[203,141097,51365],{"class":213},[19,141099,141100],{},"tab栏切换需求！！！！！！介绍：",[25,141102],{"style":126466,"src":141103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1221,141105,141106,141114,141120,141123],{},[160,141107,141108,141111,141112],{},[200,141109,141110],{},"tab","栏的布局是 ",[200,141113,139121],{},[160,141115,141116,141117,141119],{},"有多少个",[200,141118,141110],{},"选项卡，那么对应就有多少个内容",[160,141121,141122],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[160,141124,141125,141126,141129,141130,141132,141133,141135],{},"等后面我们学习了",[200,141127,141128],{},"js","之后，我们就会配合",[200,141131,141128],{},"来实现，",[200,141134,141110],{},"栏的切换",[14,141137,141139],{"id":141138},"_162-列表制作","16.2 列表制作",[174,141141,141143],{"id":141142},"_1621-准备工作","16.2.1 准备工作",[1221,141145,141146,141149,141152,141155],{},[160,141147,141148],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[160,141150,141151],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[160,141153,141154],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[160,141156,141157],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[174,141159,141161,141162,101076,141164,141166],{"id":141160},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[200,141163,131615],{},[200,141165,53771],{}," 修改",[25,141168],{"style":126466,"src":141169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1221,141171,141172],{},[160,141173,141174],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141176,139980],{},[194,141178,141179],{"className":126610,"code":132042,"language":126612,"meta":27,"style":27},[200,141180,141181,141185,141199,141203,141217,141221,141235,141239,141253,141257],{"__ignoreMap":27},[203,141182,141183],{"class":205,"line":206},[203,141184,132049],{"class":272},[203,141186,141187,141189,141191,141193,141195,141197],{"class":205,"line":124},[203,141188,132054],{"class":2052},[203,141190,79865],{"class":213},[203,141192,128970],{"class":262},[203,141194,51495],{"class":213},[203,141196,132063],{"class":262},[203,141198,129540],{"class":213},[203,141200,141201],{"class":205,"line":1269},[203,141202,132070],{"class":272},[203,141204,141205,141207,141209,141211,141213,141215],{"class":205,"line":1284},[203,141206,132075],{"class":2052},[203,141208,79865],{"class":213},[203,141210,128970],{"class":262},[203,141212,51495],{"class":213},[203,141214,54822],{"class":262},[203,141216,129540],{"class":213},[203,141218,141219],{"class":205,"line":1290},[203,141220,132090],{"class":272},[203,141222,141223,141225,141227,141229,141231,141233],{"class":205,"line":1304},[203,141224,132095],{"class":2052},[203,141226,79865],{"class":213},[203,141228,128970],{"class":262},[203,141230,51495],{"class":213},[203,141232,54889],{"class":262},[203,141234,129540],{"class":213},[203,141236,141237],{"class":205,"line":1310},[203,141238,132110],{"class":272},[203,141240,141241,141243,141245,141247,141249,141251],{"class":205,"line":1401},[203,141242,132115],{"class":2052},[203,141244,79865],{"class":213},[203,141246,128970],{"class":262},[203,141248,51495],{"class":213},[203,141250,86291],{"class":262},[203,141252,129540],{"class":213},[203,141254,141255],{"class":205,"line":1407},[203,141256,132130],{"class":272},[203,141258,141259,141261,141263,141265,141267,141269],{"class":205,"line":1419},[203,141260,132135],{"class":2052},[203,141262,79865],{"class":213},[203,141264,128970],{"class":262},[203,141266,51495],{"class":213},[203,141268,132144],{"class":262},[203,141270,129540],{"class":213},[19,141272,140069],{},[194,141274,141275],{"className":126610,"code":132042,"language":126612,"meta":27,"style":27},[200,141276,141277,141281,141295,141299,141313,141317,141331,141335,141349,141353],{"__ignoreMap":27},[203,141278,141279],{"class":205,"line":206},[203,141280,132049],{"class":272},[203,141282,141283,141285,141287,141289,141291,141293],{"class":205,"line":124},[203,141284,132054],{"class":2052},[203,141286,79865],{"class":213},[203,141288,128970],{"class":262},[203,141290,51495],{"class":213},[203,141292,132063],{"class":262},[203,141294,129540],{"class":213},[203,141296,141297],{"class":205,"line":1269},[203,141298,132070],{"class":272},[203,141300,141301,141303,141305,141307,141309,141311],{"class":205,"line":1284},[203,141302,132075],{"class":2052},[203,141304,79865],{"class":213},[203,141306,128970],{"class":262},[203,141308,51495],{"class":213},[203,141310,54822],{"class":262},[203,141312,129540],{"class":213},[203,141314,141315],{"class":205,"line":1290},[203,141316,132090],{"class":272},[203,141318,141319,141321,141323,141325,141327,141329],{"class":205,"line":1304},[203,141320,132095],{"class":2052},[203,141322,79865],{"class":213},[203,141324,128970],{"class":262},[203,141326,51495],{"class":213},[203,141328,54889],{"class":262},[203,141330,129540],{"class":213},[203,141332,141333],{"class":205,"line":1310},[203,141334,132110],{"class":272},[203,141336,141337,141339,141341,141343,141345,141347],{"class":205,"line":1401},[203,141338,132115],{"class":2052},[203,141340,79865],{"class":213},[203,141342,128970],{"class":262},[203,141344,51495],{"class":213},[203,141346,86291],{"class":262},[203,141348,129540],{"class":213},[203,141350,141351],{"class":205,"line":1407},[203,141352,132130],{"class":272},[203,141354,141355,141357,141359,141361,141363,141365],{"class":205,"line":1419},[203,141356,132135],{"class":2052},[203,141358,79865],{"class":213},[203,141360,128970],{"class":262},[203,141362,51495],{"class":213},[203,141364,132144],{"class":262},[203,141366,129540],{"class":213},[1221,141368,141369,141380],{},[160,141370,141371,141372,141375,141376,101076,141378],{},"1 号盒子左侧浮动 ",[200,141373,141374],{},"sk_list"," 里面包含 ",[200,141377,1221],{},[200,141379,160],{},[160,141381,141382,141383,141375,141386,101076,141388],{},"2 号盒子左侧浮动 ",[200,141384,141385],{},"sk_con",[200,141387,1221],{},[200,141389,160],{},[19,141391,139980],{},[194,141393,141394],{"className":126610,"code":139280,"language":126612,"meta":27,"style":27},[200,141395,141396,141402,141412],{"__ignoreMap":27},[203,141397,141398,141400],{"class":205,"line":206},[203,141399,130458],{"class":2052},[203,141401,15662],{"class":213},[203,141403,141404,141406,141408,141410],{"class":205,"line":124},[203,141405,131090],{"class":262},[203,141407,51495],{"class":213},[203,141409,23827],{"class":262},[203,141411,1380],{"class":213},[203,141413,141414],{"class":205,"line":1269},[203,141415,1654],{"class":213},[19,141417,140069],{},[194,141419,141420],{"className":126610,"code":139280,"language":126612,"meta":27,"style":27},[200,141421,141422,141428,141438],{"__ignoreMap":27},[203,141423,141424,141426],{"class":205,"line":206},[203,141425,130458],{"class":2052},[203,141427,15662],{"class":213},[203,141429,141430,141432,141434,141436],{"class":205,"line":124},[203,141431,131090],{"class":262},[203,141433,51495],{"class":213},[203,141435,23827],{"class":262},[203,141437,1380],{"class":213},[203,141439,141440],{"class":205,"line":1269},[203,141441,1654],{"class":213},[174,141443,141445,141446],{"id":141444},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[200,141447,141448],{},"sk_container",[25,141450],{"style":126466,"src":141451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1221,141453,141454,141459],{},[160,141455,140634,141456,141458],{},[200,141457,141448],{}," 给宽度 1200，不要给高度",[160,141460,141461],{},"一定不要忘记清除浮动",[19,141463,139980],{},[194,141465,141466],{"className":126610,"code":139280,"language":126612,"meta":27,"style":27},[200,141467,141468,141474,141484],{"__ignoreMap":27},[203,141469,141470,141472],{"class":205,"line":206},[203,141471,130458],{"class":2052},[203,141473,15662],{"class":213},[203,141475,141476,141478,141480,141482],{"class":205,"line":124},[203,141477,131090],{"class":262},[203,141479,51495],{"class":213},[203,141481,23827],{"class":262},[203,141483,1380],{"class":213},[203,141485,141486],{"class":205,"line":1269},[203,141487,1654],{"class":213},[157,141489,141490],{},[160,141491,141492],{},"sk_hd制作",[1221,141494,141495],{},[160,141496,140714,141497,141500],{},[200,141498,141499],{},"sk_hd"," ，插入图片即可",[19,141502,139980],{},[194,141504,141505],{"className":127357,"code":134112,"language":127359,"meta":27,"style":27},[200,141506,141507],{"__ignoreMap":27},[203,141508,141509,141511,141513,141515,141517,141519,141521,141523,141525,141527,141529,141531],{"class":205,"line":206},[203,141510,1124],{"class":213},[203,141512,25],{"class":51358},[203,141514,55297],{"class":2052},[203,141516,259],{"class":213},[203,141518,134127],{"class":318},[203,141520,55305],{"class":2052},[203,141522,259],{"class":213},[203,141524,134134],{"class":318},[203,141526,134137],{"class":2052},[203,141528,259],{"class":213},[203,141530,134142],{"class":318},[203,141532,51365],{"class":213},[157,141534,141535],{"start":124},[160,141536,141537],{},"sk_bd制作",[1221,141539,141540],{},[160,141541,141542,141543,141546,141547,101076,141549,141551],{},"3 号盒子 ",[200,141544,141545],{},"sk_bd"," ，里面包含很多的 ",[200,141548,1221],{},[200,141550,160],{},[1221,141552,141553,141562],{},[160,141554,141555,141556,141558,141559,141561],{},"当鼠标移入到 ",[200,141557,160],{}," 上面的时候显示红色的边框，在这里先给 ",[200,141560,160],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[160,141563,141564,141565,141567,141568,141570,141571,141574,141575,141577],{},"由于给每个 ",[200,141566,160],{}," 都设置了外边距，导致一行的最后一个 ",[200,141569,160],{}," 掉了下来，在这里我们利用 ",[200,141572,141573],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[200,141576,160],{},"，去掉外边距就好了",[19,141579,139980],{},[194,141581,141582],{"className":126610,"code":138799,"language":126612,"meta":27,"style":27},[200,141583,141584,141590,141602],{"__ignoreMap":27},[203,141585,141586,141588],{"class":205,"line":206},[203,141587,51669],{"class":51358},[203,141589,15662],{"class":213},[203,141591,141592,141594,141596,141598,141600],{"class":205,"line":124},[203,141593,70528],{"class":262},[203,141595,51495],{"class":213},[203,141597,405],{"class":262},[203,141599,51614],{"class":262},[203,141601,1380],{"class":213},[203,141603,141604],{"class":205,"line":1269},[203,141605,1654],{"class":213},[19,141607,140069],{},[194,141609,141610],{"className":126610,"code":138799,"language":126612,"meta":27,"style":27},[200,141611,141612,141618,141630],{"__ignoreMap":27},[203,141613,141614,141616],{"class":205,"line":206},[203,141615,51669],{"class":51358},[203,141617,15662],{"class":213},[203,141619,141620,141622,141624,141626,141628],{"class":205,"line":124},[203,141621,70528],{"class":262},[203,141623,51495],{"class":213},[203,141625,405],{"class":262},[203,141627,51614],{"class":262},[203,141629,1380],{"class":213},[203,141631,141632],{"class":205,"line":1269},[203,141633,1654],{"class":213},[14,141635,141637],{"id":141636},"_163-注册页面制作","16.3 注册页面制作",[25,141639],{"style":126466,"src":141640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,141642,141643,141645],{},[363,141644,9115],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[25,141647],{"style":126466,"src":141648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[174,141650,141652],{"id":141651},"_1631-准备工作","16.3.1 准备工作",[1221,141654,141655,141658],{},[160,141656,141657],{},"创建register.html，引入 base.css，引入favicon图标",[160,141659,141660],{},"创建register.css ，在html页面进行引入",[174,141662,141664,141665,141667],{"id":141663},"_1632-header-头部实现","16.3.2 ",[200,141666,131615],{}," 头部实现",[1221,141669,141670,141673],{},[160,141671,141672],{},"整个内容用 版心 进行包裹",[160,141674,141675],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,141677,139980],{},[194,141679,141680],{"className":127357,"code":134112,"language":127359,"meta":27,"style":27},[200,141681,141682],{"__ignoreMap":27},[203,141683,141684,141686,141688,141690,141692,141694,141696,141698,141700,141702,141704,141706],{"class":205,"line":206},[203,141685,1124],{"class":213},[203,141687,25],{"class":51358},[203,141689,55297],{"class":2052},[203,141691,259],{"class":213},[203,141693,134127],{"class":318},[203,141695,55305],{"class":2052},[203,141697,259],{"class":213},[203,141699,134134],{"class":318},[203,141701,134137],{"class":2052},[203,141703,259],{"class":213},[203,141705,134142],{"class":318},[203,141707,51365],{"class":213},[19,141709,140069],{},[194,141711,141712],{"className":127357,"code":134112,"language":127359,"meta":27,"style":27},[200,141713,141714],{"__ignoreMap":27},[203,141715,141716,141718,141720,141722,141724,141726,141728,141730,141732,141734,141736,141738],{"class":205,"line":206},[203,141717,1124],{"class":213},[203,141719,25],{"class":51358},[203,141721,55297],{"class":2052},[203,141723,259],{"class":213},[203,141725,134127],{"class":318},[203,141727,55305],{"class":2052},[203,141729,259],{"class":213},[203,141731,134134],{"class":318},[203,141733,134137],{"class":2052},[203,141735,259],{"class":213},[203,141737,134142],{"class":318},[203,141739,51365],{"class":213},[174,141741,141743,141744,141747],{"id":141742},"_1633-registerarea-主体模块实现","16.3.3 ",[200,141745,141746],{},"registerarea"," 主体模块实现",[25,141749],{"style":126466,"src":141750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,141752,141753],{},"整个大盒子 高度为 522px，设置4个边框",[19,141755,139980],{},[194,141757,141758],{"className":126610,"code":130767,"language":126612,"meta":27,"style":27},[200,141759,141760,141766,141782],{"__ignoreMap":27},[203,141761,141762,141764],{"class":205,"line":206},[203,141763,51669],{"class":51358},[203,141765,15662],{"class":213},[203,141767,141768,141770,141772,141774,141776,141778,141780],{"class":205,"line":124},[203,141769,70954],{"class":262},[203,141771,51495],{"class":213},[203,141773,431],{"class":262},[203,141775,51550],{"class":209},[203,141777,51579],{"class":262},[203,141779,130002],{"class":262},[203,141781,1380],{"class":213},[203,141783,141784],{"class":205,"line":1269},[203,141785,1654],{"class":213},[19,141787,140069],{},[194,141789,141790],{"className":126610,"code":130767,"language":126612,"meta":27,"style":27},[200,141791,141792,141798,141814],{"__ignoreMap":27},[203,141793,141794,141796],{"class":205,"line":206},[203,141795,51669],{"class":51358},[203,141797,15662],{"class":213},[203,141799,141800,141802,141804,141806,141808,141810,141812],{"class":205,"line":124},[203,141801,70954],{"class":262},[203,141803,51495],{"class":213},[203,141805,431],{"class":262},[203,141807,51550],{"class":209},[203,141809,51579],{"class":262},[203,141811,130002],{"class":262},[203,141813,1380],{"class":213},[203,141815,141816],{"class":205,"line":1269},[203,141817,1654],{"class":213},[19,141819,141820],{},"1号盒子 是一个 h3 标签，放标题",[1221,141822,141823],{},[160,141824,141825],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,141827,139980],{},[194,141829,141830],{"className":126610,"code":139280,"language":126612,"meta":27,"style":27},[200,141831,141832,141838,141848],{"__ignoreMap":27},[203,141833,141834,141836],{"class":205,"line":206},[203,141835,130458],{"class":2052},[203,141837,15662],{"class":213},[203,141839,141840,141842,141844,141846],{"class":205,"line":124},[203,141841,131090],{"class":262},[203,141843,51495],{"class":213},[203,141845,23827],{"class":262},[203,141847,1380],{"class":213},[203,141849,141850],{"class":205,"line":1269},[203,141851,1654],{"class":213},[19,141853,140069],{},[194,141855,141856],{"className":126610,"code":139280,"language":126612,"meta":27,"style":27},[200,141857,141858,141864,141874],{"__ignoreMap":27},[203,141859,141860,141862],{"class":205,"line":206},[203,141861,130458],{"class":2052},[203,141863,15662],{"class":213},[203,141865,141866,141868,141870,141872],{"class":205,"line":124},[203,141867,131090],{"class":262},[203,141869,51495],{"class":213},[203,141871,23827],{"class":262},[203,141873,1380],{"class":213},[203,141875,141876],{"class":205,"line":1269},[203,141877,1654],{"class":213},[19,141879,141880],{},"2号盒子 里面放注册的内容",[1221,141882,141883,141886,141895,141909,141922,141925,141928,141946,141960],{},[160,141884,141885],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[160,141887,141888,141889,141891,141892,141894],{},"里面的内容利用 ",[200,141890,1221],{}," 包含 ",[200,141893,160],{}," 来实现的（不需要用表格）",[160,141896,139124,141897,141899,141900,141902,141903,141905,141906,141908],{},[200,141898,160],{}," 里面，左侧放 ",[200,141901,33666],{}," 标签， 中间放",[200,141904,53879],{}," 标签， 右侧放 ",[200,141907,203],{}," 提示信息",[160,141910,141911,141912,141914,141915,141917,141918,141921],{},"左侧 ",[200,141913,33666],{},"里面的文字都是右对齐，我们可以给",[200,141916,33666],{},"设置一个宽度（88px），然后利用",[200,141919,141920],{},"text-align"," 来设置右对齐",[160,141923,141924],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[160,141926,141927],{},"右侧 span修饰一下文字颜色",[160,141929,141930,141931],{},"提示信息的样式优化",[1221,141932,141933,141936,141939],{},[160,141934,141935],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[160,141937,141938],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[160,141940,141941,141942,141945],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[200,141943,141944],{},"vertical-algin"," 来设置 图片与文字对齐方式",[160,141947,141948,141949],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1221,141950,141951,141957],{},[160,141952,141953,141954,141956],{},"设置 ",[200,141955,23644],{}," 的 左右 12px 的内边距，设置一下文字颜色",[160,141958,141959],{},"分别设置 背景颜色",[160,141961,141962,141963,141965],{},"同意协议 和 完成注册 都是用 ",[200,141964,160],{}," 进行包裹",[19,141967,139980],{},[194,141969,141970],{"className":126610,"code":140553,"language":126612,"meta":27,"style":27},[200,141971,141972,141978,141988],{"__ignoreMap":27},[203,141973,141974,141976],{"class":205,"line":206},[203,141975,51669],{"class":51358},[203,141977,15662],{"class":213},[203,141979,141980,141982,141984,141986],{"class":205,"line":124},[203,141981,70936],{"class":262},[203,141983,51495],{"class":213},[203,141985,140570],{"class":262},[203,141987,1380],{"class":213},[203,141989,141990],{"class":205,"line":1269},[203,141991,1654],{"class":213},[19,141993,140069],{},[194,141995,141996],{"className":126610,"code":140553,"language":126612,"meta":27,"style":27},[200,141997,141998,142004,142014],{"__ignoreMap":27},[203,141999,142000,142002],{"class":205,"line":206},[203,142001,51669],{"class":51358},[203,142003,15662],{"class":213},[203,142005,142006,142008,142010,142012],{"class":205,"line":124},[203,142007,70936],{"class":262},[203,142009,51495],{"class":213},[203,142011,140570],{"class":262},[203,142013,1380],{"class":213},[203,142015,142016],{"class":205,"line":1269},[203,142017,1654],{"class":213},[174,142019,142021],{"id":142020},"_1634-底部实现","16.3.4 底部实现",[19,142023,139980],{},[194,142025,142026],{"className":126610,"code":140553,"language":126612,"meta":27,"style":27},[200,142027,142028,142034,142044],{"__ignoreMap":27},[203,142029,142030,142032],{"class":205,"line":206},[203,142031,51669],{"class":51358},[203,142033,15662],{"class":213},[203,142035,142036,142038,142040,142042],{"class":205,"line":124},[203,142037,70936],{"class":262},[203,142039,51495],{"class":213},[203,142041,140570],{"class":262},[203,142043,1380],{"class":213},[203,142045,142046],{"class":205,"line":1269},[203,142047,1654],{"class":213},[19,142049,140069],{},[194,142051,142052],{"className":127357,"code":130714,"language":127359,"meta":27,"style":27},[200,142053,142054,142058,142072,142076],{"__ignoreMap":27},[203,142055,142056],{"class":205,"line":206},[203,142057,130721],{"class":272},[203,142059,142060,142062,142064,142066,142068,142070],{"class":205,"line":124},[203,142061,1124],{"class":213},[203,142063,51669],{"class":51358},[203,142065,53544],{"class":2052},[203,142067,259],{"class":213},[203,142069,130734],{"class":318},[203,142071,51365],{"class":213},[203,142073,142074],{"class":205,"line":1269},[203,142075,130741],{"class":213},[203,142077,142078,142080,142082],{"class":205,"line":1284},[203,142079,51843],{"class":213},[203,142081,51669],{"class":51358},[203,142083,51365],{"class":213},[14,142085,142087],{"id":142086},"_164-项目总结","16.4 项目总结",[157,142089,142090,142093,142096,142099],{},[160,142091,142092],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[160,142094,142095],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[160,142097,142098],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[160,142100,142101],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[25,142103],{"style":126466,"src":142104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[157,142106,142107],{"start":1290},[160,142108,142109],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[25,142111],{"style":126466,"src":142112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[157,142114,142115],{"start":1304},[160,142116,142117],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[25,142119],{"style":126466,"src":142120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[194,142122,142123],{"className":127357,"code":136767,"language":127359,"meta":27,"style":27},[200,142124,142125],{"__ignoreMap":27},[203,142126,142127,142129,142131,142133,142135,142137,142139,142141,142143,142145,142147,142149],{"class":205,"line":206},[203,142128,1124],{"class":213},[203,142130,53879],{"class":51358},[203,142132,53882],{"class":2052},[203,142134,259],{"class":213},[203,142136,62757],{"class":318},[203,142138,15010],{"class":2052},[203,142140,259],{"class":213},[203,142142,136788],{"class":318},[203,142144,61078],{"class":2052},[203,142146,259],{"class":213},[203,142148,136795],{"class":318},[203,142150,51365],{"class":213},[157,142152,142153,142156],{"start":1310},[160,142154,142155],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[160,142157,142158],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5216,142160,142161],{},"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":27,"searchDepth":124,"depth":124,"links":142163},[142164,142169,142176,142184],{"id":139790,"depth":124,"text":139791,"children":142165},[142166,142167,142168],{"id":139794,"depth":1269,"text":139795},{"id":140525,"depth":1269,"text":140526},{"id":140838,"depth":1269,"text":140839},{"id":141138,"depth":124,"text":141139,"children":142170},[142171,142172,142174],{"id":141142,"depth":1269,"text":141143},{"id":141160,"depth":1269,"text":142173},"16.2.2 列表页 header 和 nav 修改",{"id":141444,"depth":1269,"text":142175},"16.2.3 列表页主体 sk_container",{"id":141636,"depth":124,"text":141637,"children":142177},[142178,142179,142181,142183],{"id":141651,"depth":1269,"text":141652},{"id":141663,"depth":1269,"text":142180},"16.3.2 header 头部实现",{"id":141742,"depth":1269,"text":142182},"16.3.3 registerarea 主体模块实现",{"id":142020,"depth":1269,"text":142021},{"id":142086,"depth":124,"text":142087},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139782,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142191,"title":142192,"body":142193,"description":23467,"extension":129,"meta":142301,"navigation":131,"path":142302,"seo":142303,"stem":142304,"__hash__":142305},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142194,"toc":142296},[142195,142198,142202,142205,142208,142217,142226,142230,142235,142242,142260,142263,142266,142269,142272,142275,142278,142281,142284,142287,142290,142293],[10,142196,142192],{"id":142197},"_17-web服务器与网站发布",[14,142199,142201],{"id":142200},"_171-web服务器","17.1 Web服务器",[19,142203,142204],{},"把自己网站上传到服务器上，可以让其他人访问",[25,142206],{"style":126466,"src":142207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142209,142210,142213,142214],{},[363,142211,142212],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[363,142215,142216],{},"Web 服务器等",[19,142218,142219,142220,101076,142223,25798],{},"根据服务器在网络中所在的位置不同，又可分为 ",[363,142221,142222],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[363,142224,142225],{},"远程服务器",[174,142227,142229],{"id":142228},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142231,142232],{},[363,142233,142234],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142236,142237,142238],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[452,142239,142240],{"href":142240,"rel":142241},"http:\u002F\u002Ffree.3v.do\u002F",[23956],[1221,142243,142244,142247,142250,142257],{},[160,142245,142246],{},"去免费空间网站注册账号。",[160,142248,142249],{},"记录下主机名、用户名、密码、域名。",[160,142251,142252,142253,142256],{},"利用 ",[200,142254,142255],{},"utftp"," 软件 上传网站到远程服务器",[160,142258,142259],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142261,142262],{},"使用软件上传，对上传软件文件进行解压",[25,142264],{"style":126466,"src":142265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[25,142267],{"style":126466,"src":142268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142270,142271],{},"输入刚刚申请的服务器账号信息：",[25,142273],{"style":126466,"src":142274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[25,142276],{"style":126466,"src":142277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[25,142279],{"style":126466,"src":142280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[25,142282],{"style":126466,"src":142283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142285,142286],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[25,142288],{"style":126466,"src":142289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142291,142292],{},"浏览器输入域名即可访问",[19,142294,142295],{},"首页一定必须是index",{"title":27,"searchDepth":124,"depth":124,"links":142297},[142298],{"id":142200,"depth":124,"text":142201,"children":142299},[142300],{"id":142228,"depth":1269,"text":142229},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142192,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142307,"title":142308,"body":142309,"description":23467,"extension":129,"meta":143236,"navigation":131,"path":143237,"seo":143238,"stem":143239,"__hash__":143240},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142310,"toc":143219},[142311,142314,142318,142321,142324,142335,142338,142342,142346,142351,142354,142357,142360,142363,142367,142393,142397,142401,142404,142407,142411,142444,142448,142451,142454,142518,142522,142526,142529,142532,142535,142539,142584,142588,142591,142621,142625,142629,142632,142635,142639,142642,142711,142714,142822,142824,142830,142834,142837,142840,142936,142939,142943,142967,142971,142974,142978,142981,142985,142988,142991,142994,142997,143001,143004,143007,143011,143015,143018,143021,143024,143027,143031,143034,143038,143041,143044,143089,143093,143097,143100,143103,143106,143138,143142,143145,143179,143183,143186,143216],[10,142312,142308],{"id":142313},"_18-2d动画与3d转换",[14,142315,142317],{"id":142316},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142319,142320],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142322,142323],{},"转换（transform）你可以简单理解为变形",[1221,142325,142326,142329,142332],{},[160,142327,142328],{},"移动：translate",[160,142330,142331],{},"旋转：rotate",[160,142333,142334],{},"缩放：scale",[25,142336],{"style":126466,"src":142337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[174,142339,142341],{"id":142340},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22088,142343,142345],{"id":142344},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142347,142348,142349],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[363,142350,133269],{},[25,142352],{"style":126466,"src":142353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142355,142356],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142358,142359],{},"对于行内元素无效",[19,142361,142362],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22088,142364,142366],{"id":142365},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[194,142368,142369],{"className":126610,"code":138799,"language":126612,"meta":27,"style":27},[200,142370,142371,142377,142389],{"__ignoreMap":27},[203,142372,142373,142375],{"class":205,"line":206},[203,142374,51669],{"class":51358},[203,142376,15662],{"class":213},[203,142378,142379,142381,142383,142385,142387],{"class":205,"line":124},[203,142380,70528],{"class":262},[203,142382,51495],{"class":213},[203,142384,405],{"class":262},[203,142386,51614],{"class":262},[203,142388,1380],{"class":213},[203,142390,142391],{"class":205,"line":1269},[203,142392,1654],{"class":213},[174,142394,142396],{"id":142395},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22088,142398,142400],{"id":142399},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142402,142403],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[25,142405],{"style":126466,"src":142406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22088,142408,142410],{"id":142409},"_18122-旋转效果","18.1.2.2 旋转效果",[194,142412,142414],{"className":126610,"code":142413,"language":126612,"meta":27,"style":27},"div {\n  transform: rotate(45deg);\n}\n",[200,142415,142416,142422,142440],{"__ignoreMap":27},[203,142417,142418,142420],{"class":205,"line":206},[203,142419,51669],{"class":51358},[203,142421,15662],{"class":213},[203,142423,142424,142426,142428,142431,142433,142435,142438],{"class":205,"line":124},[203,142425,136594],{"class":262},[203,142427,51495],{"class":213},[203,142429,142430],{"class":262},"rotate",[203,142432,214],{"class":213},[203,142434,743],{"class":262},[203,142436,142437],{"class":209},"deg",[203,142439,2808],{"class":213},[203,142441,142442],{"class":205,"line":1269},[203,142443,1654],{"class":213},[22088,142445,142447],{"id":142446},"_18123-三角做法","18.1.2.3 三角做法",[19,142449,142450],{},"该下标当经过最外层大盒子时会实现向上反转",[25,142452],{"style":126466,"src":142453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[194,142455,142456],{"className":126610,"code":135130,"language":126612,"meta":27,"style":27},[200,142457,142458,142462,142468,142478,142488,142504,142514],{"__ignoreMap":27},[203,142459,142460],{"class":205,"line":206},[203,142461,135137],{"class":272},[203,142463,142464,142466],{"class":205,"line":124},[203,142465,135142],{"class":2052},[203,142467,15662],{"class":213},[203,142469,142470,142472,142474,142476],{"class":205,"line":1269},[203,142471,70626],{"class":262},[203,142473,51495],{"class":213},[203,142475,405],{"class":262},[203,142477,1380],{"class":213},[203,142479,142480,142482,142484,142486],{"class":205,"line":1284},[203,142481,70846],{"class":262},[203,142483,51495],{"class":213},[203,142485,405],{"class":262},[203,142487,1380],{"class":213},[203,142489,142490,142492,142494,142496,142498,142500,142502],{"class":205,"line":1290},[203,142491,70954],{"class":262},[203,142493,51495],{"class":213},[203,142495,660],{"class":262},[203,142497,51550],{"class":209},[203,142499,51579],{"class":262},[203,142501,64049],{"class":262},[203,142503,1380],{"class":213},[203,142505,142506,142508,142510,142512],{"class":205,"line":1304},[203,142507,135185],{"class":262},[203,142509,51495],{"class":213},[203,142511,62427],{"class":262},[203,142513,1380],{"class":213},[203,142515,142516],{"class":205,"line":1310},[203,142517,1654],{"class":213},[174,142519,142521],{"id":142520},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22088,142523,142525],{"id":142524},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,142527,142528],{},"设置中心点",[25,142530],{"style":126466,"src":142531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,142533,142534],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22088,142536,142538],{"id":142537},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[194,142540,142542],{"className":126610,"code":142541,"language":126612,"meta":27,"style":27},"\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",[200,142543,142544,142549,142555,142570,142575,142580],{"__ignoreMap":27},[203,142545,142546],{"class":205,"line":206},[203,142547,142548],{"class":272},"\u002F* 转换中心点 *\u002F\n",[203,142550,142551,142553],{"class":205,"line":124},[203,142552,51669],{"class":51358},[203,142554,15662],{"class":213},[203,142556,142557,142560,142562,142564,142566,142568],{"class":205,"line":1269},[203,142558,142559],{"class":262},"  transform-origin",[203,142561,51495],{"class":213},[203,142563,51650],{"class":262},[203,142565,17234],{"class":262},[203,142567,130473],{"class":213},[203,142569,135283],{"class":272},[203,142571,142572],{"class":205,"line":1284},[203,142573,142574],{"class":272},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[203,142576,142577],{"class":205,"line":1290},[203,142578,142579],{"class":272},"  \u002F* transform-origin: left top; *\u002F\n",[203,142581,142582],{"class":205,"line":1304},[203,142583,1654],{"class":213},[22088,142585,142587],{"id":142586},"_18133-旋转案例","18.1.3.3 旋转案例",[25,142589],{"style":126466,"src":142590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[194,142592,142593],{"className":126610,"code":142413,"language":126612,"meta":27,"style":27},[200,142594,142595,142601,142617],{"__ignoreMap":27},[203,142596,142597,142599],{"class":205,"line":206},[203,142598,51669],{"class":51358},[203,142600,15662],{"class":213},[203,142602,142603,142605,142607,142609,142611,142613,142615],{"class":205,"line":124},[203,142604,136594],{"class":262},[203,142606,51495],{"class":213},[203,142608,142430],{"class":262},[203,142610,214],{"class":213},[203,142612,743],{"class":262},[203,142614,142437],{"class":209},[203,142616,2808],{"class":213},[203,142618,142619],{"class":205,"line":1269},[203,142620,1654],{"class":213},[174,142622,142624],{"id":142623},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22088,142626,142628],{"id":142627},"_18141-scale介绍","18.1.4.1 scale介绍",[19,142630,142631],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[25,142633],{"style":126466,"src":142634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22088,142636,142638],{"id":142637},"_18142-分页按钮","18.1.4.2 分页按钮",[25,142640],{"style":126466,"src":142641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[194,142643,142645],{"className":126610,"code":142644,"language":126612,"meta":27,"style":27},"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",[200,142646,142647,142653,142669,142673,142677,142682,142688,142702,142707],{"__ignoreMap":27},[203,142648,142649,142651],{"class":205,"line":206},[203,142650,51669],{"class":51358},[203,142652,15662],{"class":213},[203,142654,142655,142657,142659,142662,142664,142667],{"class":205,"line":124},[203,142656,136594],{"class":262},[203,142658,51495],{"class":213},[203,142660,142661],{"class":262},"scale",[203,142663,214],{"class":213},[203,142665,142666],{"class":262},"1.2",[203,142668,2808],{"class":213},[203,142670,142671],{"class":205,"line":1269},[203,142672,1654],{"class":213},[203,142674,142675],{"class":205,"line":1284},[203,142676,136071],{"class":213},[203,142678,142679],{"class":205,"line":1290},[203,142680,142681],{"class":272},"\u002F* 2D 缩放 *\u002F\n",[203,142683,142684,142686],{"class":205,"line":1304},[203,142685,51669],{"class":51358},[203,142687,15662],{"class":213},[203,142689,142690,142692,142694,142696,142698,142700],{"class":205,"line":1310},[203,142691,136594],{"class":262},[203,142693,51495],{"class":213},[203,142695,142661],{"class":262},[203,142697,214],{"class":213},[203,142699,142666],{"class":262},[203,142701,2808],{"class":213},[203,142703,142704],{"class":205,"line":1401},[203,142705,142706],{"class":272},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[203,142708,142709],{"class":205,"line":1407},[203,142710,1654],{"class":213},[19,142712,142713],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[194,142715,142717],{"className":126610,"code":142716,"language":126612,"meta":27,"style":27},"\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",[200,142718,142719,142724,142734,142755,142776,142780,142785,142791,142818],{"__ignoreMap":27},[203,142720,142721],{"class":205,"line":206},[203,142722,142723],{"class":272},"\u002F* 定义动画 *\u002F\n",[203,142725,142726,142729,142732],{"class":205,"line":124},[203,142727,142728],{"class":209},"@keyframes",[203,142730,142731],{"class":5306}," move",[203,142733,15662],{"class":213},[203,142735,142736,142739,142741,142743,142745,142748,142750,142752],{"class":205,"line":1269},[203,142737,142738],{"class":2052},"  0%",[203,142740,79865],{"class":213},[203,142742,48192],{"class":262},[203,142744,51495],{"class":213},[203,142746,142747],{"class":262},"translateX",[203,142749,214],{"class":213},[203,142751,405],{"class":262},[203,142753,142754],{"class":213},"); }\n",[203,142756,142757,142760,142762,142764,142766,142768,142770,142772,142774],{"class":205,"line":1284},[203,142758,142759],{"class":2052},"  100%",[203,142761,79865],{"class":213},[203,142763,48192],{"class":262},[203,142765,51495],{"class":213},[203,142767,142747],{"class":262},[203,142769,214],{"class":213},[203,142771,525],{"class":262},[203,142773,51550],{"class":209},[203,142775,142754],{"class":213},[203,142777,142778],{"class":205,"line":1290},[203,142779,1654],{"class":213},[203,142781,142782],{"class":205,"line":1304},[203,142783,142784],{"class":272},"\u002F* 调用动画 *\u002F\n",[203,142786,142787,142789],{"class":205,"line":1310},[203,142788,51669],{"class":51358},[203,142790,15662],{"class":213},[203,142792,142793,142796,142798,142800,142802,142804,142806,142808,142810,142813,142816],{"class":205,"line":1401},[203,142794,142795],{"class":262},"  animation",[203,142797,51495],{"class":213},[203,142799,135296],{"class":262},[203,142801,25176],{"class":262},[203,142803,909],{"class":209},[203,142805,78738],{"class":262},[203,142807,4182],{"class":262},[203,142809,909],{"class":209},[203,142811,142812],{"class":262}," infinite",[203,142814,142815],{"class":262}," alternate",[203,142817,1380],{"class":213},[203,142819,142820],{"class":205,"line":1407},[203,142821,1654],{"class":213},[19,142823,142713],{},[194,142825,142828],{"className":142826,"code":142827,"language":5277},[5275],"\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",[200,142829,142827],{"__ignoreMap":27},[22088,142831,142833],{"id":142832},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,142835,142836],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[25,142838],{"style":126466,"src":142839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[194,142841,142842],{"className":126610,"code":142716,"language":126612,"meta":27,"style":27},[200,142843,142844,142848,142856,142874,142894,142898,142902,142908,142932],{"__ignoreMap":27},[203,142845,142846],{"class":205,"line":206},[203,142847,142723],{"class":272},[203,142849,142850,142852,142854],{"class":205,"line":124},[203,142851,142728],{"class":209},[203,142853,142731],{"class":5306},[203,142855,15662],{"class":213},[203,142857,142858,142860,142862,142864,142866,142868,142870,142872],{"class":205,"line":1269},[203,142859,142738],{"class":2052},[203,142861,79865],{"class":213},[203,142863,48192],{"class":262},[203,142865,51495],{"class":213},[203,142867,142747],{"class":262},[203,142869,214],{"class":213},[203,142871,405],{"class":262},[203,142873,142754],{"class":213},[203,142875,142876,142878,142880,142882,142884,142886,142888,142890,142892],{"class":205,"line":1284},[203,142877,142759],{"class":2052},[203,142879,79865],{"class":213},[203,142881,48192],{"class":262},[203,142883,51495],{"class":213},[203,142885,142747],{"class":262},[203,142887,214],{"class":213},[203,142889,525],{"class":262},[203,142891,51550],{"class":209},[203,142893,142754],{"class":213},[203,142895,142896],{"class":205,"line":1290},[203,142897,1654],{"class":213},[203,142899,142900],{"class":205,"line":1304},[203,142901,142784],{"class":272},[203,142903,142904,142906],{"class":205,"line":1310},[203,142905,51669],{"class":51358},[203,142907,15662],{"class":213},[203,142909,142910,142912,142914,142916,142918,142920,142922,142924,142926,142928,142930],{"class":205,"line":1401},[203,142911,142795],{"class":262},[203,142913,51495],{"class":213},[203,142915,135296],{"class":262},[203,142917,25176],{"class":262},[203,142919,909],{"class":209},[203,142921,78738],{"class":262},[203,142923,4182],{"class":262},[203,142925,909],{"class":209},[203,142927,142812],{"class":262},[203,142929,142815],{"class":262},[203,142931,1380],{"class":213},[203,142933,142934],{"class":205,"line":1407},[203,142935,1654],{"class":213},[19,142937,142938],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[174,142940,142942],{"id":142941},"_1823-知识点回顾","18.2.3 知识点回顾",[194,142944,142945],{"className":126610,"code":128779,"language":126612,"meta":27,"style":27},[200,142946,142947,142953,142963],{"__ignoreMap":27},[203,142948,142949,142951],{"class":205,"line":206},[203,142950,51669],{"class":51358},[203,142952,15662],{"class":213},[203,142954,142955,142957,142959,142961],{"class":205,"line":124},[203,142956,128792],{"class":262},[203,142958,51495],{"class":213},[203,142960,61794],{"class":262},[203,142962,1380],{"class":213},[203,142964,142965],{"class":205,"line":1269},[203,142966,1654],{"class":213},[14,142968,142970],{"id":142969},"_183-3d-转换","18.3 3D 转换",[19,142972,142973],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[174,142975,142977],{"id":142976},"_1831-坐标轴认识","18.3.1 坐标轴认识",[25,142979],{"style":126466,"src":142980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[174,142982,142984],{"id":142983},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[25,142986],{"style":126466,"src":142987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,142989,142990],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,142992,142993],{},"translate3d的效果需要搭配透视perspective来使用",[25,142995],{"style":126466,"src":142996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[174,142998,143000],{"id":142999},"_1833-透视-perspective","18.3.3 透视 perspective",[25,143002],{"style":126466,"src":143003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143005,143006],{},"透视写在父盒子上，单位为像素",[174,143008,143010],{"id":143009},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22088,143012,143014],{"id":143013},"_18341-分开解释","18.3.4.1 分开解释",[25,143016],{"style":126466,"src":143017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[25,143019],{"style":126466,"src":143020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[25,143022],{"style":126466,"src":143023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143025,143026],{},"总结来说就是左手原则",[22088,143028,143030],{"id":143029},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[25,143032],{"style":126466,"src":143033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[174,143035,143037],{"id":143036},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[25,143039],{"style":126466,"src":143040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[25,143042],{"style":126466,"src":143043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[194,143045,143047],{"className":126610,"code":143046,"language":126612,"meta":27,"style":27},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[200,143048,143049,143055,143068,143085],{"__ignoreMap":27},[203,143050,143051,143053],{"class":205,"line":206},[203,143052,51669],{"class":51358},[203,143054,15662],{"class":213},[203,143056,143057,143060,143062,143064,143066],{"class":205,"line":124},[203,143058,143059],{"class":262},"  perspective",[203,143061,51495],{"class":213},[203,143063,65132],{"class":262},[203,143065,51550],{"class":209},[203,143067,1380],{"class":213},[203,143069,143070,143072,143074,143077,143079,143081,143083],{"class":205,"line":1269},[203,143071,136594],{"class":262},[203,143073,51495],{"class":213},[203,143075,143076],{"class":262},"rotateX",[203,143078,214],{"class":213},[203,143080,743],{"class":262},[203,143082,142437],{"class":209},[203,143084,2808],{"class":213},[203,143086,143087],{"class":205,"line":1284},[203,143088,1654],{"class":213},[174,143090,143092],{"id":143091},"_1836-案例","18.3.6 案例",[22088,143094,143096],{"id":143095},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[25,143098],{"style":126466,"src":143099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[25,143101],{"style":126466,"src":143102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[25,143104],{"style":126466,"src":143105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[194,143107,143109],{"className":126610,"code":143108,"language":126612,"meta":27,"style":27},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[200,143110,143111,143116,143122,143134],{"__ignoreMap":27},[203,143112,143113],{"class":205,"line":206},[203,143114,143115],{"class":272},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[203,143117,143118,143120],{"class":205,"line":124},[203,143119,133607],{"class":2052},[203,143121,15662],{"class":213},[203,143123,143124,143126,143128,143130,143132],{"class":205,"line":1269},[203,143125,143059],{"class":262},[203,143127,51495],{"class":213},[203,143129,65132],{"class":262},[203,143131,51550],{"class":209},[203,143133,1380],{"class":213},[203,143135,143136],{"class":205,"line":1284},[203,143137,1654],{"class":213},[22088,143139,143141],{"id":143140},"_18362-3d导航栏","18.3.6.2 3D导航栏",[25,143143],{"style":126466,"src":143144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[194,143146,143147],{"className":127357,"code":130714,"language":127359,"meta":27,"style":27},[200,143148,143149,143153,143167,143171],{"__ignoreMap":27},[203,143150,143151],{"class":205,"line":206},[203,143152,130721],{"class":272},[203,143154,143155,143157,143159,143161,143163,143165],{"class":205,"line":124},[203,143156,1124],{"class":213},[203,143158,51669],{"class":51358},[203,143160,53544],{"class":2052},[203,143162,259],{"class":213},[203,143164,130734],{"class":318},[203,143166,51365],{"class":213},[203,143168,143169],{"class":205,"line":1269},[203,143170,130741],{"class":213},[203,143172,143173,143175,143177],{"class":205,"line":1284},[203,143174,51843],{"class":213},[203,143176,51669],{"class":51358},[203,143178,51365],{"class":213},[22088,143180,143182],{"id":143181},"_18363-旋转木马","18.3.6.3 旋转木马",[25,143184],{"style":126466,"src":143185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[194,143187,143188],{"className":126610,"code":142413,"language":126612,"meta":27,"style":27},[200,143189,143190,143196,143212],{"__ignoreMap":27},[203,143191,143192,143194],{"class":205,"line":206},[203,143193,51669],{"class":51358},[203,143195,15662],{"class":213},[203,143197,143198,143200,143202,143204,143206,143208,143210],{"class":205,"line":124},[203,143199,136594],{"class":262},[203,143201,51495],{"class":213},[203,143203,142430],{"class":262},[203,143205,214],{"class":213},[203,143207,743],{"class":262},[203,143209,142437],{"class":209},[203,143211,2808],{"class":213},[203,143213,143214],{"class":205,"line":1269},[203,143215,1654],{"class":213},[5216,143217,143218],{},"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":27,"searchDepth":124,"depth":124,"links":143220},[143221,143228],{"id":142316,"depth":124,"text":142317,"children":143222},[143223,143224,143225,143226,143227],{"id":142340,"depth":1269,"text":142341},{"id":142395,"depth":1269,"text":142396},{"id":142520,"depth":1269,"text":142521},{"id":142623,"depth":1269,"text":142624},{"id":142941,"depth":1269,"text":142942},{"id":142969,"depth":124,"text":142970,"children":143229},[143230,143231,143232,143233,143234,143235],{"id":142976,"depth":1269,"text":142977},{"id":142983,"depth":1269,"text":142984},{"id":142999,"depth":1269,"text":143000},{"id":143009,"depth":1269,"text":143010},{"id":143036,"depth":1269,"text":143037},{"id":143091,"depth":1269,"text":143092},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142308,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143242,"title":143243,"body":143244,"description":23467,"extension":129,"meta":143447,"navigation":131,"path":143448,"seo":143449,"stem":143450,"__hash__":143451},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143245,"toc":143436},[143246,143249,143253,143256,143259,143263,143266,143269,143272,143276,143279,143283,143286,143290,143293,143297,143311,143315,143340,143343,143346,143363,143367,143371,143374,143377,143381,143384,143387,143405,143409,143412,143426,143430,143433],[10,143247,143243],{"id":143248},"_19-移动端基础-前缀现状与视口",[14,143250,143252],{"id":143251},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[25,143254],{"style":126466,"src":143255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143257,143258],{},"意思就是加个前缀，增加兼容性",[14,143260,143262],{"id":143261},"_192-移动端现状认识","19.2 移动端现状认识",[25,143264],{"style":126466,"src":143265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143267,143268],{},"调试方法：",[25,143270],{"style":126466,"src":143271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143273,143275],{"id":143274},"_193-视口","19.3 视口",[19,143277,143278],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[174,143280,143282],{"id":143281},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[25,143284],{"style":126466,"src":143285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[174,143287,143289],{"id":143288},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[25,143291],{"style":126466,"src":143292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[174,143294,143296],{"id":143295},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1221,143298,143299,143302,143305,143308],{},[160,143300,143301],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[160,143303,143304],{},"理想视口，对设备来讲，是最理想的视口尺寸",[160,143306,143307],{},"需要手动添写meta视口标签通知浏览器操作",[160,143309,143310],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[174,143312,143314],{"id":143313},"_1934-meta视口标签","19.3.4 meta视口标签",[194,143316,143318],{"className":127357,"code":143317,"language":127359,"meta":27,"style":27},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[200,143319,143320],{"__ignoreMap":27},[203,143321,143322,143324,143326,143328,143330,143332,143334,143336,143338],{"class":205,"line":206},[203,143323,1124],{"class":213},[203,143325,51402],{"class":51358},[203,143327,15010],{"class":2052},[203,143329,259],{"class":213},[203,143331,51449],{"class":318},[203,143333,51429],{"class":2052},[203,143335,259],{"class":213},[203,143337,51456],{"class":318},[203,143339,51365],{"class":213},[25,143341],{"style":126466,"src":143342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143344,143345],{},"标准视口设置：",[157,143347,143348,143351,143354,143357,143360],{},[160,143349,143350],{},"视口宽度和设备保持一致",[160,143352,143353],{},"视口的默认缩放比例1.0",[160,143355,143356],{},"不允许用户自行缩放",[160,143358,143359],{},"最大允许的缩放比例1.0",[160,143361,143362],{},"最小允许的缩放比例1.0",[174,143364,143366],{"id":143365},"_1935-二倍图","19.3.5 二倍图",[22088,143368,143370],{"id":143369},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[25,143372],{"style":126466,"src":143373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[25,143375],{"style":126466,"src":143376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22088,143378,143380],{"id":143379},"_19352-多倍图","19.3.5.2 多倍图",[25,143382],{"style":126466,"src":143383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143385,143386],{},"二倍图法，代码如下：",[194,143388,143390],{"className":126610,"code":143389,"language":126612,"meta":27,"style":27},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[200,143391,143392,143397],{"__ignoreMap":27},[203,143393,143394],{"class":205,"line":206},[203,143395,143396],{"class":272},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[203,143398,143399,143402],{"class":205,"line":124},[203,143400,143401],{"class":51358},"background-size",[203,143403,143404],{"class":213},": 50% 50%;\n",[22088,143406,143408],{"id":143407},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[25,143410],{"style":126466,"src":143411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[157,143413,143414,143417,143420,143423],{},[160,143415,143416],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[160,143418,143419],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[160,143421,143422],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[160,143424,143425],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22088,143427,143429],{"id":143428},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[25,143431],{"style":126466,"src":143432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5216,143434,143435],{},"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":27,"searchDepth":124,"depth":124,"links":143437},[143438,143439,143440],{"id":143251,"depth":124,"text":143252},{"id":143261,"depth":124,"text":143262},{"id":143274,"depth":124,"text":143275,"children":143441},[143442,143443,143444,143445,143446],{"id":143281,"depth":1269,"text":143282},{"id":143288,"depth":1269,"text":143289},{"id":143295,"depth":1269,"text":143296},{"id":143313,"depth":1269,"text":143314},{"id":143365,"depth":1269,"text":143366},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143243,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143453,"title":143454,"body":143455,"description":23467,"extension":129,"meta":144332,"navigation":131,"path":144333,"seo":144334,"stem":144335,"__hash__":144336},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143456,"toc":144316},[143457,143460,143464,143471,143474,143481,143484,143489,143492,143496,143500,143507,143510,143513,143517,143520,143523,143526,143529,143532,143536,143539,143543,143545,143548,143551,143554,143557,143559,143562,143564,143594,143596,143626,143630,143633,143637,143640,143657,143660,143663,143739,143741,143744,143747,143750,143753,143755,143758,143761,143765,143787,143790,143793,143797,143800,143806,143809,143813,143816,143819,143823,143826,143829,143832,143836,143839,143842,143845,143848,143852,143855,143859,143866,143869,143872,143875,143878,143888,143891,143894,143901,143904,143908,143911,143914,143918,143921,143924,143927,143972,143975,143978,143981,143983,144112,144114,144152,144155,144158,144160,144278,144280,144314],[10,143458,143454],{"id":143459},"_20-移动端布局实战上篇",[14,143461,143463],{"id":143462},"_201-移动端主流方案","20.1 移动端主流方案",[157,143465,143466],{},[160,143467,143468],{},[363,143469,143470],{},"单独移动端页面（主流）",[25,143472],{"style":126466,"src":143473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[157,143475,143476],{"start":124},[160,143477,143478],{},[363,143479,143480],{},"响应式兼容PC移动端",[25,143482],{"style":126466,"src":143483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[157,143485,143486],{"start":1269},[160,143487,143488],{},"两种页面选型布局方式",[25,143490],{"style":126466,"src":143491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143493,143495],{"id":143494},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[174,143497,143499],{"id":143498},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143501,143502,143503],{},"官网地址： ",[452,143504,143505],{"href":143505,"rel":143506},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23956],[25,143508],{"style":126466,"src":143509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[25,143511],{"style":126466,"src":143512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[174,143514,143516],{"id":143515},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[25,143518],{"style":126466,"src":143519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[25,143521],{"style":126466,"src":143522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,143524,143525],{},"去除高亮：",[19,143527,143528],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,143530,143531],{},"-webkit- tap-highlight-color: transparent;",[14,143533,143535],{"id":143534},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[25,143537],{"style":126466,"src":143538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143540,143542],{"id":143541},"_204-流式布局案例","20.4 流式布局案例",[19,143544,243],{},[19,143546,143547],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,143549,143550],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,143552,143553],{},"图片格式：",[25,143555],{"style":126466,"src":143556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,143558,135653],{},[25,143560],{"style":126466,"src":143561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,143563,139980],{},[194,143565,143566],{"className":127357,"code":134112,"language":127359,"meta":27,"style":27},[200,143567,143568],{"__ignoreMap":27},[203,143569,143570,143572,143574,143576,143578,143580,143582,143584,143586,143588,143590,143592],{"class":205,"line":206},[203,143571,1124],{"class":213},[203,143573,25],{"class":51358},[203,143575,55297],{"class":2052},[203,143577,259],{"class":213},[203,143579,134127],{"class":318},[203,143581,55305],{"class":2052},[203,143583,259],{"class":213},[203,143585,134134],{"class":318},[203,143587,134137],{"class":2052},[203,143589,259],{"class":213},[203,143591,134142],{"class":318},[203,143593,51365],{"class":213},[19,143595,140069],{},[194,143597,143598],{"className":127357,"code":134112,"language":127359,"meta":27,"style":27},[200,143599,143600],{"__ignoreMap":27},[203,143601,143602,143604,143606,143608,143610,143612,143614,143616,143618,143620,143622,143624],{"class":205,"line":206},[203,143603,1124],{"class":213},[203,143605,25],{"class":51358},[203,143607,55297],{"class":2052},[203,143609,259],{"class":213},[203,143611,134127],{"class":318},[203,143613,55305],{"class":2052},[203,143615,259],{"class":213},[203,143617,134134],{"class":318},[203,143619,134137],{"class":2052},[203,143621,259],{"class":213},[203,143623,134142],{"class":318},[203,143625,51365],{"class":213},[14,143627,143629],{"id":143628},"_205-flex布局","20.5 flex布局",[25,143631],{"style":126466,"src":143632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[174,143634,143636],{"id":143635},"_2051-布局原理","20.5.1 布局原理",[19,143638,143639],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1221,143641,143642,143645,143648,143651,143654],{},[160,143643,143644],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[160,143646,143647],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[160,143649,143650],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[160,143652,143653],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[160,143655,143656],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,143658,143659],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,143661,143662],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[194,143664,143666],{"className":126610,"code":143665,"language":126612,"meta":27,"style":27},"\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",[200,143667,143668,143673,143680,143690,143702,143713,143724,143735],{"__ignoreMap":27},[203,143669,143670],{"class":205,"line":206},[203,143671,143672],{"class":272},"\u002F* Flex 弹性布局 *\u002F\n",[203,143674,143675,143678],{"class":205,"line":124},[203,143676,143677],{"class":2052},".container",[203,143679,15662],{"class":213},[203,143681,143682,143684,143686,143688],{"class":205,"line":1269},[203,143683,128226],{"class":262},[203,143685,51495],{"class":213},[203,143687,51535],{"class":262},[203,143689,1380],{"class":213},[203,143691,143692,143695,143697,143700],{"class":205,"line":1284},[203,143693,143694],{"class":262},"  flex-direction",[203,143696,51495],{"class":213},[203,143698,143699],{"class":262},"row",[203,143701,1380],{"class":213},[203,143703,143704,143707,143709,143711],{"class":205,"line":1290},[203,143705,143706],{"class":262},"  justify-content",[203,143708,51495],{"class":213},[203,143710,51726],{"class":262},[203,143712,1380],{"class":213},[203,143714,143715,143718,143720,143722],{"class":205,"line":1304},[203,143716,143717],{"class":262},"  align-items",[203,143719,51495],{"class":213},[203,143721,51650],{"class":262},[203,143723,1380],{"class":213},[203,143725,143726,143729,143731,143733],{"class":205,"line":1310},[203,143727,143728],{"class":262},"  flex-wrap",[203,143730,51495],{"class":213},[203,143732,78668],{"class":262},[203,143734,1380],{"class":213},[203,143736,143737],{"class":205,"line":1401},[203,143738,1654],{"class":213},[19,143740,70511],{},[19,143742,143743],{},".form-item .male-label {",[19,143745,143746],{},"   margin-right: 20px;",[19,143748,143749],{},"   display: inline-flex;",[19,143751,143752],{},"   align-items: center;",[19,143754,1160],{},[25,143756],{"style":126466,"src":143757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[25,143759],{"style":126466,"src":143760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[174,143762,143764],{"id":143763},"_2052-常见父项属性","20.5.2 常见父项属性",[157,143766,143767,143770,143773,143776,143779,143782,143785],{},[160,143768,143769],{},"flex-direction：设置主轴的方向",[160,143771,143772],{},"justify-content：设置主轴上的子元素排列方式",[160,143774,143775],{},"flex-wrap：设置子元素是否换行",[160,143777,143778],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[160,143780,143781],{},"align-items：设置侧轴上的子元素排列方式（单行）",[160,143783,143784],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[160,143786,143769],{},[25,143788],{"style":126466,"src":143789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[25,143791],{"style":126466,"src":143792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[157,143794,143795],{"start":124},[160,143796,143772],{},[25,143798],{"style":126466,"src":143799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,143801,143802,143805],{},[200,143803,143804],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,143807,143808],{},"跟着主轴走",[157,143810,143811],{"start":1269},[160,143812,143775],{},[25,143814],{"style":126466,"src":143815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,143817,143818],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[157,143820,143821],{"start":1284},[160,143822,143778],{},[25,143824],{"style":126466,"src":143825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,143827,143828],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,143830,143831],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[157,143833,143834],{"start":1290},[160,143835,143781],{},[25,143837],{"style":126466,"src":143838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,143840,143841],{},"align-items与align-content之间的区别：",[19,143843,143844],{},"单找items，多找content",[25,143846],{"style":126466,"src":143847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[157,143849,143850],{"start":1304},[160,143851,143784],{},[25,143853],{"style":126466,"src":143854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[174,143856,143858],{"id":143857},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[157,143860,143861],{},[160,143862,143863],{},[363,143864,143865],{},"flex 属性",[19,143867,143868],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[25,143870],{"style":126466,"src":143871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,143873,143874],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,143876,143877],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[157,143879,143880],{"start":124},[160,143881,143882,13885,143885],{},[363,143883,143884],{},"align-self",[363,143886,143887],{},"控制子项自己在侧轴上的排列方式",[25,143889],{"style":126466,"src":143890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,143892,143893],{},"单个子盒子在父盒子侧轴上的排列方式",[157,143895,143896],{"start":1269},[160,143897,143898,143900],{},[363,143899,95355],{}," 属性定义项目的排列顺序",[25,143902],{"style":126466,"src":143903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[174,143905,143907],{"id":143906},"_2054-背景线性渐变","20.5.4 背景线性渐变",[25,143909],{"style":126466,"src":143910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,143912,143913],{},"必须要添加浏览器的私有前缀",[174,143915,143917],{"id":143916},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,143919,143920],{},"学到最重要的知识：",[19,143922,143923],{},"flex处理这样的布局思路",[25,143925],{"style":126466,"src":143926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[194,143928,143930],{"className":126610,"code":143929,"language":126612,"meta":27,"style":27},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[200,143931,143932,143938,143948,143958,143968],{"__ignoreMap":27},[203,143933,143934,143936],{"class":205,"line":206},[203,143935,143677],{"class":2052},[203,143937,15662],{"class":213},[203,143939,143940,143942,143944,143946],{"class":205,"line":124},[203,143941,128226],{"class":262},[203,143943,51495],{"class":213},[203,143945,51535],{"class":262},[203,143947,1380],{"class":213},[203,143949,143950,143952,143954,143956],{"class":205,"line":1269},[203,143951,143706],{"class":262},[203,143953,51495],{"class":213},[203,143955,51650],{"class":262},[203,143957,1380],{"class":213},[203,143959,143960,143962,143964,143966],{"class":205,"line":1284},[203,143961,143717],{"class":262},[203,143963,51495],{"class":213},[203,143965,51650],{"class":262},[203,143967,1380],{"class":213},[203,143969,143970],{"class":205,"line":1290},[203,143971,1654],{"class":213},[19,143973,143974],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,143976,143977],{},"使用属性选择器",[25,143979],{"style":126466,"src":143980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,143982,68947],{},[194,143984,143986],{"className":127357,"code":143985,"language":127359,"meta":27,"style":27},"\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",[200,143987,143988,143993,144007,144012,144032,144037,144056,144061,144080,144085,144104],{"__ignoreMap":27},[203,143989,143990],{"class":205,"line":206},[203,143991,143992],{"class":272},"\u003C!-- 携程网移动端案例结构 -->\n",[203,143994,143995,143997,143999,144001,144003,144005],{"class":205,"line":124},[203,143996,1124],{"class":213},[203,143998,51669],{"class":51358},[203,144000,53544],{"class":2052},[203,144002,259],{"class":213},[203,144004,92381],{"class":318},[203,144006,51365],{"class":213},[203,144008,144009],{"class":205,"line":1269},[203,144010,144011],{"class":272},"  \u003C!-- 搜索栏 -->\n",[203,144013,144014,144016,144018,144020,144022,144025,144028,144030],{"class":205,"line":1284},[203,144015,52202],{"class":213},[203,144017,51669],{"class":51358},[203,144019,53544],{"class":2052},[203,144021,259],{"class":213},[203,144023,144024],{"class":318},"\"search-index\"",[203,144026,144027],{"class":213},">...\u003C\u002F",[203,144029,51669],{"class":51358},[203,144031,51365],{"class":213},[203,144033,144034],{"class":205,"line":1290},[203,144035,144036],{"class":272},"  \u003C!-- 焦点图 -->\n",[203,144038,144039,144041,144043,144045,144047,144050,144052,144054],{"class":205,"line":1304},[203,144040,52202],{"class":213},[203,144042,51669],{"class":51358},[203,144044,53544],{"class":2052},[203,144046,259],{"class":213},[203,144048,144049],{"class":318},"\"focus\"",[203,144051,144027],{"class":213},[203,144053,51669],{"class":51358},[203,144055,51365],{"class":213},[203,144057,144058],{"class":205,"line":1310},[203,144059,144060],{"class":272},"  \u003C!-- 主导航 -->\n",[203,144062,144063,144065,144067,144069,144071,144074,144076,144078],{"class":205,"line":1401},[203,144064,52202],{"class":213},[203,144066,51669],{"class":51358},[203,144068,53544],{"class":2052},[203,144070,259],{"class":213},[203,144072,144073],{"class":318},"\"local-nav\"",[203,144075,144027],{"class":213},[203,144077,51669],{"class":51358},[203,144079,51365],{"class":213},[203,144081,144082],{"class":205,"line":1407},[203,144083,144084],{"class":272},"  \u003C!-- 子导航 -->\n",[203,144086,144087,144089,144091,144093,144095,144098,144100,144102],{"class":205,"line":1419},[203,144088,52202],{"class":213},[203,144090,51669],{"class":51358},[203,144092,53544],{"class":2052},[203,144094,259],{"class":213},[203,144096,144097],{"class":318},"\"nav-common\"",[203,144099,144027],{"class":213},[203,144101,51669],{"class":51358},[203,144103,51365],{"class":213},[203,144105,144106,144108,144110],{"class":205,"line":1701},[203,144107,51843],{"class":213},[203,144109,51669],{"class":51358},[203,144111,51365],{"class":213},[19,144113,70511],{},[194,144115,144116],{"className":126610,"code":137062,"language":126612,"meta":27,"style":27},[200,144117,144118,144132,144148],{"__ignoreMap":27},[203,144119,144120,144122,144124,144126,144128,144130],{"class":205,"line":206},[203,144121,53879],{"class":51358},[203,144123,1104],{"class":213},[203,144125,103165],{"class":2052},[203,144127,259],{"class":209},[203,144129,62757],{"class":318},[203,144131,137079],{"class":213},[203,144133,144134,144136,144138,144140,144142,144144,144146],{"class":205,"line":124},[203,144135,70954],{"class":262},[203,144137,51495],{"class":213},[203,144139,431],{"class":262},[203,144141,51550],{"class":209},[203,144143,51579],{"class":262},[203,144145,130190],{"class":262},[203,144147,1380],{"class":213},[203,144149,144150],{"class":205,"line":1269},[203,144151,1654],{"class":213},[19,144153,144154],{},"总代码和效果展示：",[25,144156],{"style":126466,"src":144157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144159,68947],{},[194,144161,144162],{"className":127357,"code":143985,"language":127359,"meta":27,"style":27},[200,144163,144164,144168,144182,144186,144204,144208,144226,144230,144248,144252,144270],{"__ignoreMap":27},[203,144165,144166],{"class":205,"line":206},[203,144167,143992],{"class":272},[203,144169,144170,144172,144174,144176,144178,144180],{"class":205,"line":124},[203,144171,1124],{"class":213},[203,144173,51669],{"class":51358},[203,144175,53544],{"class":2052},[203,144177,259],{"class":213},[203,144179,92381],{"class":318},[203,144181,51365],{"class":213},[203,144183,144184],{"class":205,"line":1269},[203,144185,144011],{"class":272},[203,144187,144188,144190,144192,144194,144196,144198,144200,144202],{"class":205,"line":1284},[203,144189,52202],{"class":213},[203,144191,51669],{"class":51358},[203,144193,53544],{"class":2052},[203,144195,259],{"class":213},[203,144197,144024],{"class":318},[203,144199,144027],{"class":213},[203,144201,51669],{"class":51358},[203,144203,51365],{"class":213},[203,144205,144206],{"class":205,"line":1290},[203,144207,144036],{"class":272},[203,144209,144210,144212,144214,144216,144218,144220,144222,144224],{"class":205,"line":1304},[203,144211,52202],{"class":213},[203,144213,51669],{"class":51358},[203,144215,53544],{"class":2052},[203,144217,259],{"class":213},[203,144219,144049],{"class":318},[203,144221,144027],{"class":213},[203,144223,51669],{"class":51358},[203,144225,51365],{"class":213},[203,144227,144228],{"class":205,"line":1310},[203,144229,144060],{"class":272},[203,144231,144232,144234,144236,144238,144240,144242,144244,144246],{"class":205,"line":1401},[203,144233,52202],{"class":213},[203,144235,51669],{"class":51358},[203,144237,53544],{"class":2052},[203,144239,259],{"class":213},[203,144241,144073],{"class":318},[203,144243,144027],{"class":213},[203,144245,51669],{"class":51358},[203,144247,51365],{"class":213},[203,144249,144250],{"class":205,"line":1407},[203,144251,144084],{"class":272},[203,144253,144254,144256,144258,144260,144262,144264,144266,144268],{"class":205,"line":1419},[203,144255,52202],{"class":213},[203,144257,51669],{"class":51358},[203,144259,53544],{"class":2052},[203,144261,259],{"class":213},[203,144263,144097],{"class":318},[203,144265,144027],{"class":213},[203,144267,51669],{"class":51358},[203,144269,51365],{"class":213},[203,144271,144272,144274,144276],{"class":205,"line":1701},[203,144273,51843],{"class":213},[203,144275,51669],{"class":51358},[203,144277,51365],{"class":213},[19,144279,70511],{},[194,144281,144282],{"className":127357,"code":130714,"language":127359,"meta":27,"style":27},[200,144283,144284,144288,144302,144306],{"__ignoreMap":27},[203,144285,144286],{"class":205,"line":206},[203,144287,130721],{"class":272},[203,144289,144290,144292,144294,144296,144298,144300],{"class":205,"line":124},[203,144291,1124],{"class":213},[203,144293,51669],{"class":51358},[203,144295,53544],{"class":2052},[203,144297,259],{"class":213},[203,144299,130734],{"class":318},[203,144301,51365],{"class":213},[203,144303,144304],{"class":205,"line":1269},[203,144305,130741],{"class":213},[203,144307,144308,144310,144312],{"class":205,"line":1284},[203,144309,51843],{"class":213},[203,144311,51669],{"class":51358},[203,144313,51365],{"class":213},[5216,144315,138011],{},{"title":27,"searchDepth":124,"depth":124,"links":144317},[144318,144319,144323,144324,144325],{"id":143462,"depth":124,"text":143463},{"id":143494,"depth":124,"text":143495,"children":144320},[144321,144322],{"id":143498,"depth":1269,"text":143499},{"id":143515,"depth":1269,"text":143516},{"id":143534,"depth":124,"text":143535},{"id":143541,"depth":124,"text":143542},{"id":143628,"depth":124,"text":143629,"children":144326},[144327,144328,144329,144330,144331],{"id":143635,"depth":1269,"text":143636},{"id":143763,"depth":1269,"text":143764},{"id":143857,"depth":1269,"text":143858},{"id":143906,"depth":1269,"text":143907},{"id":143916,"depth":1269,"text":143917},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143454,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144338,"title":144339,"body":144340,"description":23467,"extension":129,"meta":145567,"navigation":131,"path":145568,"seo":145569,"stem":145570,"__hash__":145571},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144341,"toc":145545},[144342,144345,144349,144353,144356,144359,144363,144368,144371,144374,144377,144380,144383,144440,144443,144448,144451,144454,144458,144469,144473,144476,144479,144486,144491,144495,144498,144504,144507,144511,144514,144521,144524,144527,144534,144537,144544,144547,144550,144557,144560,144563,144565,144582,144586,144589,144592,144595,144599,144602,144605,144608,144611,144614,144617,144619,144622,144625,144687,144690,144800,144807,144813,144816,144819,144823,144826,144830,144835,144838,144845,144848,144854,144859,144862,144865,144868,144871,144874,144877,144880,144883,144939,144941,144967,144971,144974,144977,144980,144988,144991,144994,144998,145054,145057,145061,145067,145078,145081,145086,145089,145092,145098,145101,145104,145107,145110,145113,145116,145119,145122,145147,145153,145156,145159,145162,145165,145168,145171,145176,145179,145182,145185,145193,145196,145203,145206,145209,145211,145235,145237,145240,145243,145246,145249,145252,145255,145258,145292,145295,145298,145332,145339,145342,145345,145348,145351,145354,145357,145364,145367,145370,145373,145376,145383,145386,145389,145396,145399,145402,145406,145409,145412,145415,145418,145421,145424,145427,145430,145432,145456,145458,145482,145486,145497,145500,145503,145506,145509,145512,145515,145518,145521,145524,145527,145530,145533,145536,145539,145542],[10,144343,144339],{"id":144344},"_21-移动端布局实战下篇",[14,144346,144348],{"id":144347},"_211-rem适配布局","21.1 rem适配布局",[174,144350,144352],{"id":144351},"_2111-rem单位","21.1.1 rem单位",[25,144354],{"style":126466,"src":144355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144357,144358],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[174,144360,144362],{"id":144361},"_2112-媒体查询","21.1.2 媒体查询",[157,144364,144365],{},[160,144366,144367],{},"参数介绍",[25,144369],{"style":126466,"src":144370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[25,144372],{"style":126466,"src":144373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[25,144375],{"style":126466,"src":144376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[25,144378],{"style":126466,"src":144379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[25,144381],{"style":126466,"src":144382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[194,144384,144386],{"className":126610,"code":144385,"language":126612,"meta":27,"style":27},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[200,144387,144388,144393,144412,144419,144432,144436],{"__ignoreMap":27},[203,144389,144390],{"class":205,"line":206},[203,144391,144392],{"class":272},"\u002F* 媒体查询 *\u002F\n",[203,144394,144395,144398,144400,144403,144405,144408,144410],{"class":205,"line":124},[203,144396,144397],{"class":209},"@media",[203,144399,1747],{"class":213},[203,144401,144402],{"class":262},"max-width",[203,144404,51495],{"class":213},[203,144406,144407],{"class":262},"768",[203,144409,51550],{"class":209},[203,144411,12532],{"class":213},[203,144413,144414,144417],{"class":205,"line":1269},[203,144415,144416],{"class":2052},"  .container",[203,144418,15662],{"class":213},[203,144420,144421,144424,144426,144428,144430],{"class":205,"line":1284},[203,144422,144423],{"class":262},"    width",[203,144425,51495],{"class":213},[203,144427,525],{"class":262},[203,144429,542],{"class":209},[203,144431,1380],{"class":213},[203,144433,144434],{"class":205,"line":1290},[203,144435,127406],{"class":213},[203,144437,144438],{"class":205,"line":1304},[203,144439,1654],{"class":213},[19,144441,144442],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[157,144444,144445],{"start":124},[160,144446,144447],{},"引入资源",[25,144449],{"style":126466,"src":144450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144452,144453],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[174,144455,144457],{"id":144456},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1221,144459,144460,144463,144466],{},[160,144461,144462],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[160,144464,144465],{},"媒体查询可以根据不同设备宽度来修改样式",[160,144467,144468],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144470,144472],{"id":144471},"_212-less基础","21.2 Less基础",[19,144474,144475],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144477,144478],{},"Less可以解决该问题，它是css的扩展语言",[19,144480,144481,144482],{},"Less中文网址： ",[452,144483,144484],{"href":144484,"rel":144485},"http:\u002F\u002Flesscss.cn\u002F",[23956],[19,144487,144488],{},[363,144489,144490],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[174,144492,144494],{"id":144493},"_2121-less安装","21.2.1 less安装",[19,144496,144497],{},"如果使用vscode，则无需进行下方安装步骤",[19,144499,144500],{},[452,144501,144502],{"href":144502,"rel":144503},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23956],[25,144505],{"style":126466,"src":144506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[174,144508,144510],{"id":144509},"_2122-less使用","21.2.2 less使用",[19,144512,144513],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[157,144515,144516],{},[160,144517,144518],{},[363,144519,144520],{},"Less 变量",[25,144522],{"style":126466,"src":144523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[25,144525],{"style":126466,"src":144526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[157,144528,144529],{"start":124},[160,144530,144531],{},[363,144532,144533],{},"Less 编译",[25,144535],{"style":126466,"src":144536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[157,144538,144539],{"start":1269},[160,144540,144541],{},[363,144542,144543],{},"Less 嵌套",[25,144545],{"style":126466,"src":144546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[25,144548],{"style":126466,"src":144549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[157,144551,144552],{"start":1284},[160,144553,144554],{},[363,144555,144556],{},"Less 运算",[25,144558],{"style":126466,"src":144559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,144561,144562],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,144564,243],{},[1221,144566,144567,144570,144573,144576,144579],{},[160,144568,144569],{},"乘号（*）和除号（\u002F）的写法",[160,144571,144572],{},"运算符中间左右有个空格隔开 1px + 5",[160,144574,144575],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[160,144577,144578],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[160,144580,144581],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144583,144585],{"id":144584},"_213-rem-适配方案","21.3 rem 适配方案",[19,144587,144588],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,144590,144591],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[25,144593],{"style":126466,"src":144594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[174,144596,144598],{"id":144597},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,144600,144601],{},"rem + 媒体查询 + less 技术",[25,144603],{"style":126466,"src":144604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,144606,144607],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,144609,144610],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[25,144612],{"style":126466,"src":144613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,144615,144616],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,144618,14723],{},[25,144620],{"style":126466,"src":144621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,144623,144624],{},"index.html:",[194,144626,144628],{"className":126610,"code":144627,"language":126612,"meta":27,"style":27},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[200,144629,144630,144635,144641,144657,144661,144667,144683],{"__ignoreMap":27},[203,144631,144632],{"class":205,"line":206},[203,144633,144634],{"class":272},"\u002F* rem 适配方案 *\u002F\n",[203,144636,144637,144639],{"class":205,"line":124},[203,144638,50693],{"class":51358},[203,144640,15662],{"class":213},[203,144642,144643,144645,144647,144650,144652,144654],{"class":205,"line":1269},[203,144644,70684],{"class":262},[203,144646,51495],{"class":213},[203,144648,144649],{"class":262},"62.5",[203,144651,542],{"class":209},[203,144653,130473],{"class":213},[203,144655,144656],{"class":272},"\u002F* 1rem = 10px *\u002F\n",[203,144658,144659],{"class":205,"line":1284},[203,144660,1654],{"class":213},[203,144662,144663,144665],{"class":205,"line":1290},[203,144664,130458],{"class":2052},[203,144666,15662],{"class":213},[203,144668,144669,144671,144673,144675,144678,144680],{"class":205,"line":1304},[203,144670,70626],{"class":262},[203,144672,51495],{"class":213},[203,144674,660],{"class":262},[203,144676,144677],{"class":209},"rem",[203,144679,130473],{"class":213},[203,144681,144682],{"class":272},"\u002F* 100px *\u002F\n",[203,144684,144685],{"class":205,"line":1310},[203,144686,1654],{"class":213},[19,144688,144689],{},"common.less",[194,144691,144693],{"className":126610,"code":144692,"language":126612,"meta":27,"style":27},"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",[200,144694,144695,144701,144716,144720,144726,144740,144744,144748,144752,144758,144772,144776,144782,144796],{"__ignoreMap":27},[203,144696,144697,144699],{"class":205,"line":206},[203,144698,50693],{"class":51358},[203,144700,15662],{"class":213},[203,144702,144703,144705,144707,144709,144711,144713],{"class":205,"line":124},[203,144704,70684],{"class":262},[203,144706,51495],{"class":213},[203,144708,144649],{"class":262},[203,144710,542],{"class":209},[203,144712,26125],{"class":213},[203,144714,144715],{"class":272},"\u002F* 10px *\u002F\n",[203,144717,144718],{"class":205,"line":1269},[203,144719,1654],{"class":213},[203,144721,144722,144724],{"class":205,"line":1284},[203,144723,51669],{"class":51358},[203,144725,15662],{"class":213},[203,144727,144728,144730,144732,144734,144736,144738],{"class":205,"line":1290},[203,144729,70626],{"class":262},[203,144731,51495],{"class":213},[203,144733,660],{"class":262},[203,144735,144677],{"class":209},[203,144737,26125],{"class":213},[203,144739,144682],{"class":272},[203,144741,144742],{"class":205,"line":1304},[203,144743,1654],{"class":213},[203,144745,144746],{"class":205,"line":1310},[203,144747,136071],{"class":213},[203,144749,144750],{"class":205,"line":1401},[203,144751,144634],{"class":272},[203,144753,144754,144756],{"class":205,"line":1407},[203,144755,50693],{"class":51358},[203,144757,15662],{"class":213},[203,144759,144760,144762,144764,144766,144768,144770],{"class":205,"line":1419},[203,144761,70684],{"class":262},[203,144763,51495],{"class":213},[203,144765,144649],{"class":262},[203,144767,542],{"class":209},[203,144769,130473],{"class":213},[203,144771,144656],{"class":272},[203,144773,144774],{"class":205,"line":1701},[203,144775,1654],{"class":213},[203,144777,144778,144780],{"class":205,"line":1706},[203,144779,130458],{"class":2052},[203,144781,15662],{"class":213},[203,144783,144784,144786,144788,144790,144792,144794],{"class":205,"line":1712},[203,144785,70626],{"class":262},[203,144787,51495],{"class":213},[203,144789,660],{"class":262},[203,144791,144677],{"class":209},[203,144793,130473],{"class":213},[203,144795,144682],{"class":272},[203,144797,144798],{"class":205,"line":1717},[203,144799,1654],{"class":213},[19,144801,144802,144803,144806],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23644,144804,144805],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[194,144808,144811],{"className":144809,"code":144810,"language":5277},[5275],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[200,144812,144810],{"__ignoreMap":27},[19,144814,144815],{},"less保存时会自动变成.css文件",[19,144817,144818],{},"好好搞懂上述代码写法",[174,144820,144822],{"id":144821},"_2132-样式导入样式","21.3.2 样式导入样式",[25,144824],{"style":126466,"src":144825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[174,144827,144829],{"id":144828},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[157,144831,144832],{},[160,144833,144834],{},"准备工作",[25,144836],{"style":126466,"src":144837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,144839,144840,144841],{},"github地址：",[452,144842,144843],{"href":144843,"rel":144844},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23956],[19,144846,144847],{},"下载之后，将index.js文件拖到项目中就可以了",[19,144849,144850,144851],{},"js文件引入到index.html中使用的是",[200,144852,144853],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[157,144855,144856],{"start":124},[160,144857,144858],{},"vscode插件",[25,144860],{"style":126466,"src":144861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,144863,144864],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,144866,144867],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[25,144869],{"style":126466,"src":144870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,144872,144873],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[25,144875],{"style":126466,"src":144876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,144878,144879],{},"修改成75就可以，alt+z为快捷键",[19,144881,144882],{},"index.css：",[194,144884,144885],{"className":126610,"code":144627,"language":126612,"meta":27,"style":27},[200,144886,144887,144891,144897,144911,144915,144921,144935],{"__ignoreMap":27},[203,144888,144889],{"class":205,"line":206},[203,144890,144634],{"class":272},[203,144892,144893,144895],{"class":205,"line":124},[203,144894,50693],{"class":51358},[203,144896,15662],{"class":213},[203,144898,144899,144901,144903,144905,144907,144909],{"class":205,"line":1269},[203,144900,70684],{"class":262},[203,144902,51495],{"class":213},[203,144904,144649],{"class":262},[203,144906,542],{"class":209},[203,144908,130473],{"class":213},[203,144910,144656],{"class":272},[203,144912,144913],{"class":205,"line":1284},[203,144914,1654],{"class":213},[203,144916,144917,144919],{"class":205,"line":1290},[203,144918,130458],{"class":2052},[203,144920,15662],{"class":213},[203,144922,144923,144925,144927,144929,144931,144933],{"class":205,"line":1304},[203,144924,70626],{"class":262},[203,144926,51495],{"class":213},[203,144928,660],{"class":262},[203,144930,144677],{"class":209},[203,144932,130473],{"class":213},[203,144934,144682],{"class":272},[203,144936,144937],{"class":205,"line":1310},[203,144938,1654],{"class":213},[19,144940,144624],{},[194,144942,144943],{"className":126610,"code":127014,"language":126612,"meta":27,"style":27},[200,144944,144945,144951,144963],{"__ignoreMap":27},[203,144946,144947,144949],{"class":205,"line":206},[203,144948,51858],{"class":51358},[203,144950,15662],{"class":213},[203,144952,144953,144955,144957,144959,144961],{"class":205,"line":124},[203,144954,70684],{"class":262},[203,144956,51495],{"class":213},[203,144958,815],{"class":262},[203,144960,51550],{"class":209},[203,144962,1380],{"class":213},[203,144964,144965],{"class":205,"line":1269},[203,144966,1654],{"class":213},[14,144968,144970],{"id":144969},"_214-响应式开发","21.4 响应式开发",[19,144972,144973],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[25,144975],{"style":126466,"src":144976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,144978,144979],{},"做法：",[1221,144981,144982,144985],{},[160,144983,144984],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[160,144986,144987],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[25,144989],{"style":126466,"src":144990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,144992,144993],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[174,144995,144997],{"id":144996},"_2141-简单代码示范","21.4.1 简单代码示范",[194,144999,145000],{"className":126610,"code":144627,"language":126612,"meta":27,"style":27},[200,145001,145002,145006,145012,145026,145030,145036,145050],{"__ignoreMap":27},[203,145003,145004],{"class":205,"line":206},[203,145005,144634],{"class":272},[203,145007,145008,145010],{"class":205,"line":124},[203,145009,50693],{"class":51358},[203,145011,15662],{"class":213},[203,145013,145014,145016,145018,145020,145022,145024],{"class":205,"line":1269},[203,145015,70684],{"class":262},[203,145017,51495],{"class":213},[203,145019,144649],{"class":262},[203,145021,542],{"class":209},[203,145023,130473],{"class":213},[203,145025,144656],{"class":272},[203,145027,145028],{"class":205,"line":1284},[203,145029,1654],{"class":213},[203,145031,145032,145034],{"class":205,"line":1290},[203,145033,130458],{"class":2052},[203,145035,15662],{"class":213},[203,145037,145038,145040,145042,145044,145046,145048],{"class":205,"line":1304},[203,145039,70626],{"class":262},[203,145041,51495],{"class":213},[203,145043,660],{"class":262},[203,145045,144677],{"class":209},[203,145047,130473],{"class":213},[203,145049,144682],{"class":272},[203,145051,145052],{"class":205,"line":1310},[203,145053,1654],{"class":213},[19,145055,145056],{},"父盒子一般命名为container",[174,145058,145060],{"id":145059},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145062,145063,145064],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[363,145065,145066],{},"使得 Web 开发更加快捷",[1221,145068,145069],{},[160,145070,145071,145072],{},"官网：",[363,145073,145074],{},[452,145075,145076],{"href":145076,"rel":145077},"http:\u002F\u002Fgetbootstrap.com\u002F",[23956],[19,145079,145080],{},"可以直接去官网拿现成的东西",[157,145082,145083],{},[160,145084,145085],{},"Bootstrap的使用",[19,145087,145088],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145090,145091],{},"Bootstrap 使用四步曲：",[19,145093,145094,145097],{},[363,145095,145096],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[25,145099],{"style":126466,"src":145100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145102,145103],{},"打开Bootstrap官网，然后下载",[25,145105],{"style":126466,"src":145106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[25,145108],{"style":126466,"src":145109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145111,145112],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145114,145115],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145117,145118],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[25,145120],{"style":126466,"src":145121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[194,145123,145125],{"className":126610,"code":145124,"language":126612,"meta":27,"style":27},".center {\n  color: red;\n}\n",[200,145126,145127,145133,145143],{"__ignoreMap":27},[203,145128,145129,145131],{"class":205,"line":206},[203,145130,126901],{"class":2052},[203,145132,15662],{"class":213},[203,145134,145135,145137,145139,145141],{"class":205,"line":124},[203,145136,70963],{"class":262},[203,145138,51495],{"class":213},[203,145140,57479],{"class":262},[203,145142,1380],{"class":213},[203,145144,145145],{"class":205,"line":1269},[203,145146,1654],{"class":213},[19,145148,145149,145152],{},[200,145150,145151],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[25,145154],{"style":126466,"src":145155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[25,145157],{"style":126466,"src":145158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[25,145160],{"style":126466,"src":145161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145163,145164],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[25,145166],{"style":126466,"src":145167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145169,145170],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[157,145172,145173],{"start":124},[160,145174,145175],{},"布局容器",[25,145177],{"style":126466,"src":145178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145180,145181],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145183,145184],{},"container-fluid用于移动式布局比较方便",[157,145186,145187],{"start":1269},[160,145188,145189,145190],{},"bootstrap ",[363,145191,145192],{},"栅格系统原理",[25,145194],{"style":126466,"src":145195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[157,145197,145198],{"start":1284},[160,145199,145200],{},[363,145201,145202],{},"栅格选项参数",[25,145204],{"style":126466,"src":145205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145207,145208],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145210,14723],{},[194,145212,145213],{"className":126610,"code":145124,"language":126612,"meta":27,"style":27},[200,145214,145215,145221,145231],{"__ignoreMap":27},[203,145216,145217,145219],{"class":205,"line":206},[203,145218,126901],{"class":2052},[203,145220,15662],{"class":213},[203,145222,145223,145225,145227,145229],{"class":205,"line":124},[203,145224,70963],{"class":262},[203,145226,51495],{"class":213},[203,145228,57479],{"class":262},[203,145230,1380],{"class":213},[203,145232,145233],{"class":205,"line":1269},[203,145234,1654],{"class":213},[19,145236,135653],{},[25,145238],{"style":126466,"src":145239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145241,145242],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145244,145245],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145247,145248],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145250,145251],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145253,145254],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145256,145257],{},"汇总展示说明：",[194,145259,145260],{"className":127357,"code":130714,"language":127359,"meta":27,"style":27},[200,145261,145262,145266,145280,145284],{"__ignoreMap":27},[203,145263,145264],{"class":205,"line":206},[203,145265,130721],{"class":272},[203,145267,145268,145270,145272,145274,145276,145278],{"class":205,"line":124},[203,145269,1124],{"class":213},[203,145271,51669],{"class":51358},[203,145273,53544],{"class":2052},[203,145275,259],{"class":213},[203,145277,130734],{"class":318},[203,145279,51365],{"class":213},[203,145281,145282],{"class":205,"line":1269},[203,145283,130741],{"class":213},[203,145285,145286,145288,145290],{"class":205,"line":1284},[203,145287,51843],{"class":213},[203,145289,51669],{"class":51358},[203,145291,51365],{"class":213},[25,145293],{"style":126466,"src":145294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145296,145297],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[194,145299,145300],{"className":127357,"code":130714,"language":127359,"meta":27,"style":27},[200,145301,145302,145306,145320,145324],{"__ignoreMap":27},[203,145303,145304],{"class":205,"line":206},[203,145305,130721],{"class":272},[203,145307,145308,145310,145312,145314,145316,145318],{"class":205,"line":124},[203,145309,1124],{"class":213},[203,145311,51669],{"class":51358},[203,145313,53544],{"class":2052},[203,145315,259],{"class":213},[203,145317,130734],{"class":318},[203,145319,51365],{"class":213},[203,145321,145322],{"class":205,"line":1269},[203,145323,130741],{"class":213},[203,145325,145326,145328,145330],{"class":205,"line":1284},[203,145327,51843],{"class":213},[203,145329,51669],{"class":51358},[203,145331,51365],{"class":213},[157,145333,145334],{"start":1290},[160,145335,145336],{},[363,145337,145338],{},"列嵌套",[25,145340],{"style":126466,"src":145341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145343,145344],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145346,145347],{},"没加row内部这样：",[25,145349],{"style":126466,"src":145350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145352,145353],{},"加上row之后内部为：",[25,145355],{"style":126466,"src":145356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[157,145358,145359],{"start":1304},[160,145360,145361],{},[363,145362,145363],{},"列偏移",[25,145365],{"style":126466,"src":145366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145368,145369],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145371,145372],{},"要加偏移量，即偏移份数",[19,145374,145375],{},"偏移的份数=12-两个盒子的份数",[157,145377,145378],{"start":1310},[160,145379,145380],{},[363,145381,145382],{},"列排序",[25,145384],{"style":126466,"src":145385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145387,145388],{},"pull拉左；push推右",[157,145390,145391],{"start":1401},[160,145392,145393],{},[363,145394,145395],{},"响应式工具",[25,145397],{"style":126466,"src":145398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145400,145401],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[174,145403,145405],{"id":145404},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145407,145408],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145410,145411],{},"ul {",[19,145413,145414],{},"list-style: none;",[19,145416,145417],{},"margin:0;",[19,145419,145420],{},"padding:0; }",[25,145422],{"style":126466,"src":145423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[25,145425],{"style":126466,"src":145426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145428,145429],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145431,68947],{},[194,145433,145434],{"className":126610,"code":139280,"language":126612,"meta":27,"style":27},[200,145435,145436,145442,145452],{"__ignoreMap":27},[203,145437,145438,145440],{"class":205,"line":206},[203,145439,130458],{"class":2052},[203,145441,15662],{"class":213},[203,145443,145444,145446,145448,145450],{"class":205,"line":124},[203,145445,131090],{"class":262},[203,145447,51495],{"class":213},[203,145449,23827],{"class":262},[203,145451,1380],{"class":213},[203,145453,145454],{"class":205,"line":1269},[203,145455,1654],{"class":213},[19,145457,70511],{},[194,145459,145460],{"className":126610,"code":139280,"language":126612,"meta":27,"style":27},[200,145461,145462,145468,145478],{"__ignoreMap":27},[203,145463,145464,145466],{"class":205,"line":206},[203,145465,130458],{"class":2052},[203,145467,15662],{"class":213},[203,145469,145470,145472,145474,145476],{"class":205,"line":124},[203,145471,131090],{"class":262},[203,145473,51495],{"class":213},[203,145475,23827],{"class":262},[203,145477,1380],{"class":213},[203,145479,145480],{"class":205,"line":1269},[203,145481,1654],{"class":213},[14,145483,145485],{"id":145484},"_215-swiper-插件使用","21.5 swiper 插件使用",[1221,145487,145488,145491,145494],{},[160,145489,145490],{},"下载需要的css和js文件html页面中 引入相关文件",[160,145492,145493],{},"官网找到类似案例，复制html结构，css样式 js 语法",[160,145495,145496],{},"根据需求定制修改模块",[25,145498],{"style":126466,"src":145499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145501,145502],{},"解压后将这两部分放到项目中",[25,145504],{"style":126466,"src":145505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145507,145508],{},"这个插件可以帮助我们实现轮播图效果",[19,145510,145511],{},"用法：",[25,145513],{"style":126466,"src":145514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145516,145517],{},"找到自己喜欢的",[25,145519],{"style":126466,"src":145520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,145522,145523],{},"右键，查看网页源代码",[25,145525],{"style":126466,"src":145526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,145528,145529],{},"复制人家的结构内容",[19,145531,145532],{},"然后去看API文档：",[25,145534],{"style":126466,"src":145535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,145537,145538],{},"可以看看如何修改样式",[19,145540,145541],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5216,145543,145544],{},"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":27,"searchDepth":124,"depth":124,"links":145546},[145547,145552,145556,145561,145566],{"id":144347,"depth":124,"text":144348,"children":145548},[145549,145550,145551],{"id":144351,"depth":1269,"text":144352},{"id":144361,"depth":1269,"text":144362},{"id":144456,"depth":1269,"text":144457},{"id":144471,"depth":124,"text":144472,"children":145553},[145554,145555],{"id":144493,"depth":1269,"text":144494},{"id":144509,"depth":1269,"text":144510},{"id":144584,"depth":124,"text":144585,"children":145557},[145558,145559,145560],{"id":144597,"depth":1269,"text":144598},{"id":144821,"depth":1269,"text":144822},{"id":144828,"depth":1269,"text":144829},{"id":144969,"depth":124,"text":144970,"children":145562},[145563,145564,145565],{"id":144996,"depth":1269,"text":144997},{"id":145059,"depth":1269,"text":145060},{"id":145404,"depth":1269,"text":145405},{"id":145484,"depth":124,"text":145485},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144339,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145573,"title":145574,"body":145575,"description":23467,"extension":129,"meta":145795,"navigation":131,"path":145796,"seo":145797,"stem":145798,"__hash__":145799},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145576,"toc":145791},[145577,145580,145584,145587,145602,145607,145610,145615,145650,145655,145667,145672,145685,145690,145707,145712,145732,145737,145755,145758,145761,145764,145767,145771,145774,145777,145780,145783,145786,145789],[10,145578,145574],{"id":145579},"_22-代码提交与新型相对单位",[14,145581,145583],{"id":145582},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,145585,145586],{},"法1：",[157,145588,145589,145596,145599],{},[160,145590,145591,145592],{},"登录网站注册：",[452,145593,145594],{"href":145594,"rel":145595},"https:\u002F\u002Fgitee.com\u002F",[23956],[160,145597,145598],{},"码云创建新的仓库",[160,145600,145601],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1221,145603,145604],{},[160,145605,145606],{},"在网站根目录右键-- Git Bash Here",[25,145608],{"style":126466,"src":145609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1221,145611,145612],{},[160,145613,145614],{},"如果是第一次利用git提交，请配置好全局选项",[194,145616,145618],{"className":117354,"code":145617,"language":117356,"meta":27,"style":27},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[200,145619,145620,145636],{"__ignoreMap":27},[203,145621,145622,145625,145627,145630,145633],{"class":205,"line":206},[203,145623,145624],{"class":2052},"git",[203,145626,119777],{"class":318},[203,145628,145629],{"class":262}," --global",[203,145631,145632],{"class":318}," user.name",[203,145634,145635],{"class":318}," \"你的名字\"\n",[203,145637,145638,145640,145642,145644,145647],{"class":205,"line":124},[203,145639,145624],{"class":2052},[203,145641,119777],{"class":318},[203,145643,145629],{"class":262},[203,145645,145646],{"class":318}," user.email",[203,145648,145649],{"class":318}," \"你的邮箱\"\n",[1221,145651,145652],{},[160,145653,145654],{},"初始化仓库",[194,145656,145658],{"className":117354,"code":145657,"language":117356,"meta":27,"style":27},"git init\n",[200,145659,145660],{"__ignoreMap":27},[203,145661,145662,145664],{"class":205,"line":206},[203,145663,145624],{"class":2052},[203,145665,145666],{"class":318}," init\n",[1221,145668,145669],{},[160,145670,145671],{},"把本地文件放到暂存区",[194,145673,145675],{"className":117354,"code":145674,"language":117356,"meta":27,"style":27},"git add .\n",[200,145676,145677],{"__ignoreMap":27},[203,145678,145679,145681,145683],{"class":205,"line":206},[203,145680,145624],{"class":2052},[203,145682,5299],{"class":318},[203,145684,28799],{"class":318},[1221,145686,145687],{},[160,145688,145689],{},"把本地文件放到本地仓库里面",[194,145691,145693],{"className":117354,"code":145692,"language":117356,"meta":27,"style":27},"git commit -m \"first commit\"\n",[200,145694,145695],{"__ignoreMap":27},[203,145696,145697,145699,145702,145704],{"class":205,"line":206},[203,145698,145624],{"class":2052},[203,145700,145701],{"class":318}," commit",[203,145703,100940],{"class":262},[203,145705,145706],{"class":318}," \"first commit\"\n",[1221,145708,145709],{},[160,145710,145711],{},"链接远程仓库",[194,145713,145715],{"className":117354,"code":145714,"language":117356,"meta":27,"style":27},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[200,145716,145717],{"__ignoreMap":27},[203,145718,145719,145721,145724,145726,145729],{"class":205,"line":206},[203,145720,145624],{"class":2052},[203,145722,145723],{"class":318}," remote",[203,145725,5299],{"class":318},[203,145727,145728],{"class":318}," origin",[203,145730,145731],{"class":318}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1221,145733,145734],{},[160,145735,145736],{},"把本地仓库的文件推送到远程仓库 push",[194,145738,145740],{"className":117354,"code":145739,"language":117356,"meta":27,"style":27},"git push -u origin master\n",[200,145741,145742],{"__ignoreMap":27},[203,145743,145744,145746,145748,145750,145752],{"class":205,"line":206},[203,145745,145624],{"class":2052},[203,145747,29074],{"class":318},[203,145749,28348],{"class":262},[203,145751,145728],{"class":318},[203,145753,145754],{"class":318}," master\n",[25,145756],{"style":126466,"src":145757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,145759,145760],{},"上方方法暂未实现，后边学完git后在整",[19,145762,145763],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[25,145765],{"style":126466,"src":145766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,145768,145770],{"id":145769},"_222-新型相对单位","22.2 新型相对单位",[25,145772],{"style":126466,"src":145773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[25,145775],{"style":126466,"src":145776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,145778,145779],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,145781,145782],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[25,145784],{"style":126466,"src":145785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,145787,145788],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5216,145790,24049],{},{"title":27,"searchDepth":124,"depth":124,"links":145792},[145793,145794],{"id":145582,"depth":124,"text":145583},{"id":145769,"depth":124,"text":145770},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145574,"description":23467},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145801,"title":145802,"body":145803,"description":145807,"extension":129,"meta":145808,"navigation":131,"path":145809,"seo":145810,"stem":145811,"__hash__":145812},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145804,"toc":145805},[],{"title":27,"searchDepth":124,"depth":124,"links":145806},[],"自己正经开始学编程的第一门语言！",{"category":92897},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145802,"description":145807},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145814,"title":145815,"body":145816,"description":23467,"extension":129,"meta":146963,"navigation":131,"path":146964,"seo":146965,"stem":146966,"__hash__":146967},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145817,"toc":146939},[145818,145821,145825,145828,145831,145856,145859,145865,145869,145872,145899,145902,145942,145945,145957,145960,145966,145970,145974,146001,146018,146025,146029,146032,146058,146061,146065,146068,146108,146111,146128,146134,146138,146143,146187,146190,146208,146211,146279,146283,146290,146293,146308,146311,146320,146323,146334,146337,146346,146349,146366,146369,146384,146388,146392,146395,146397,146417,146421,146424,146427,146438,146441,146447,146451,146457,146484,146487,146499,146502,146513,146516,146522,146526,146532,146582,146585,146627,146630,146663,146666,146700,146704,146707,146727,146730,146766,146769,146782,146786,146790,146796,146799,146812,146816,146819,146825,146828,146832,146835,146838,146887,146891,146907,146913,146920,146926,146936],[10,145819,145815],{"id":145820},"_1-python环境与第一个程序",[14,145822,145824],{"id":145823},"_11-什么是python","1.1 什么是Python",[19,145826,145827],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,145829,145830],{},"理解 Python 时抓住三个关键词：",[157,145832,145833,145836,145839],{},[160,145834,145835],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[160,145837,145838],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[160,145840,145841,145842,426,145845,426,145848,426,145851,426,145853,28443],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[200,145843,145844],{},"os",[200,145846,145847],{},"sys",[200,145849,145850],{},"json",[200,145852,57918],{},[200,145854,145855],{},"datetime",[19,145857,145858],{},"Python 程序的运行链路：",[194,145860,145863],{"className":145861,"code":145862,"language":5277,"meta":27},[5275],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[200,145864,145862],{"__ignoreMap":27},[14,145866,145868],{"id":145867},"_12-python解释器","1.2 Python解释器",[19,145870,145871],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[194,145873,145875],{"className":23913,"code":145874,"language":23915,"meta":27,"style":27},"python --version\npython3 --version\npython\npython3\n",[200,145876,145877,145883,145889,145894],{"__ignoreMap":27},[203,145878,145879,145881],{"class":205,"line":206},[203,145880,30438],{"class":2052},[203,145882,26351],{"class":262},[203,145884,145885,145887],{"class":205,"line":124},[203,145886,100937],{"class":2052},[203,145888,26351],{"class":262},[203,145890,145891],{"class":205,"line":1269},[203,145892,145893],{"class":2052},"python\n",[203,145895,145896],{"class":205,"line":1284},[203,145897,145898],{"class":2052},"python3\n",[19,145900,145901],{},"进入交互模式后，可以直接输入表达式：",[194,145903,145905],{"className":30436,"code":145904,"language":30438,"meta":27,"style":27},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[200,145906,145907,145918,145923,145937],{"__ignoreMap":27},[203,145908,145909,145912,145914,145916],{"class":205,"line":206},[203,145910,145911],{"class":209},">>>",[203,145913,25176],{"class":262},[203,145915,45624],{"class":209},[203,145917,47781],{"class":262},[203,145919,145920],{"class":205,"line":124},[203,145921,145922],{"class":262},"3\n",[203,145924,145925,145927,145930,145932,145935],{"class":205,"line":1269},[203,145926,145911],{"class":209},[203,145928,145929],{"class":262}," print",[203,145931,214],{"class":213},[203,145933,145934],{"class":318},"\"hello python\"",[203,145936,220],{"class":213},[203,145938,145939],{"class":205,"line":1284},[203,145940,145941],{"class":213},"hello python\n",[19,145943,145944],{},"退出交互模式：",[194,145946,145948],{"className":30436,"code":145947,"language":30438,"meta":27,"style":27},"exit()\n",[200,145949,145950],{"__ignoreMap":27},[203,145951,145952,145955],{"class":205,"line":206},[203,145953,145954],{"class":262},"exit",[203,145956,2065],{"class":213},[19,145958,145959],{},"或使用快捷键：",[194,145961,145964],{"className":145962,"code":145963,"language":5277,"meta":27},[5275],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[200,145965,145963],{"__ignoreMap":27},[14,145967,145969],{"id":145968},"_13-安装python","1.3 安装Python",[174,145971,145973],{"id":145972},"_131-windows安装","1.3.1 Windows安装",[157,145975,145976,145983,145986,145992,145998],{},[160,145977,145978,145979],{},"打开 Python 官网：",[452,145980,145981],{"href":145981,"rel":145982},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23956],[160,145984,145985],{},"下载 Windows Installer。",[160,145987,145988,145989,28443],{},"安装时勾选 ",[200,145990,145991],{},"Add Python to PATH",[160,145993,145994,145995,28443],{},"点击 ",[200,145996,145997],{},"Install Now",[160,145999,146000],{},"安装完成后打开命令提示符验证：",[194,146002,146004],{"className":23913,"code":146003,"language":23915,"meta":27,"style":27},"python --version\npip --version\n",[200,146005,146006,146012],{"__ignoreMap":27},[203,146007,146008,146010],{"class":205,"line":206},[203,146009,30438],{"class":2052},[203,146011,26351],{"class":262},[203,146013,146014,146016],{"class":205,"line":124},[203,146015,23922],{"class":2052},[203,146017,26351],{"class":262},[19,146019,146020,146021,146024],{},"如果提示 ",[200,146022,146023],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[174,146026,146028],{"id":146027},"_132-macos安装","1.3.2 macOS安装",[19,146030,146031],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[194,146033,146035],{"className":23913,"code":146034,"language":23915,"meta":27,"style":27},"brew install python\npython3 --version\npip3 --version\n",[200,146036,146037,146046,146052],{"__ignoreMap":27},[203,146038,146039,146042,146044],{"class":205,"line":206},[203,146040,146041],{"class":2052},"brew",[203,146043,23925],{"class":318},[203,146045,124376],{"class":318},[203,146047,146048,146050],{"class":205,"line":124},[203,146049,100937],{"class":2052},[203,146051,26351],{"class":262},[203,146053,146054,146056],{"class":205,"line":1269},[203,146055,119758],{"class":2052},[203,146057,26351],{"class":262},[19,146059,146060],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[174,146062,146064],{"id":146063},"_133-linux安装","1.3.3 Linux安装",[19,146066,146067],{},"Ubuntu\u002FDebian：",[194,146069,146071],{"className":23913,"code":146070,"language":23915,"meta":27,"style":27},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[200,146072,146073,146081,146096,146102],{"__ignoreMap":27},[203,146074,146075,146077,146079],{"class":205,"line":206},[203,146076,24634],{"class":2052},[203,146078,117375],{"class":318},[203,146080,26300],{"class":318},[203,146082,146083,146085,146087,146089,146091,146093],{"class":205,"line":124},[203,146084,24634],{"class":2052},[203,146086,117375],{"class":318},[203,146088,23925],{"class":318},[203,146090,104461],{"class":318},[203,146092,100856],{"class":318},[203,146094,146095],{"class":318}," python3-venv\n",[203,146097,146098,146100],{"class":205,"line":1269},[203,146099,100937],{"class":2052},[203,146101,26351],{"class":262},[203,146103,146104,146106],{"class":205,"line":1284},[203,146105,119758],{"class":2052},[203,146107,26351],{"class":262},[19,146109,146110],{},"Fedora：",[194,146112,146114],{"className":23913,"code":146113,"language":23915,"meta":27,"style":27},"sudo dnf install python3 python3-pip\n",[200,146115,146116],{"__ignoreMap":27},[203,146117,146118,146120,146122,146124,146126],{"class":205,"line":206},[203,146119,24634],{"class":2052},[203,146121,26373],{"class":318},[203,146123,23925],{"class":318},[203,146125,104461],{"class":318},[203,146127,119823],{"class":318},[19,146129,146130,146131,146133],{},"Linux 上通常使用 ",[200,146132,100937],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146135,146137],{"id":146136},"_14-pip包管理器","1.4 pip包管理器",[19,146139,146140,146142],{},[200,146141,23922],{}," 用来安装第三方库。",[194,146144,146146],{"className":23913,"code":146145,"language":23915,"meta":27,"style":27},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[200,146147,146148,146157,146166,146174,146180],{"__ignoreMap":27},[203,146149,146150,146152,146154],{"class":205,"line":206},[203,146151,23922],{"class":2052},[203,146153,23925],{"class":318},[203,146155,146156],{"class":318}," requests\n",[203,146158,146159,146161,146164],{"class":205,"line":124},[203,146160,23922],{"class":2052},[203,146162,146163],{"class":318}," uninstall",[203,146165,146156],{"class":318},[203,146167,146168,146170,146172],{"class":205,"line":1269},[203,146169,23922],{"class":2052},[203,146171,117632],{"class":318},[203,146173,146156],{"class":318},[203,146175,146176,146178],{"class":205,"line":1284},[203,146177,23922],{"class":2052},[203,146179,119013],{"class":318},[203,146181,146182,146184],{"class":205,"line":1290},[203,146183,23922],{"class":2052},[203,146185,146186],{"class":318}," freeze\n",[19,146188,146189],{},"国内网络较慢时可以临时使用镜像：",[194,146191,146193],{"className":23913,"code":146192,"language":23915,"meta":27,"style":27},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[200,146194,146195],{"__ignoreMap":27},[203,146196,146197,146199,146201,146204,146206],{"class":205,"line":206},[203,146198,23922],{"class":2052},[203,146200,23925],{"class":318},[203,146202,146203],{"class":318}," requests",[203,146205,26488],{"class":262},[203,146207,119786],{"class":318},[19,146209,146210],{},"常见第三方库：",[351,146212,146213,146222],{},[354,146214,146215],{},[357,146216,146217,146220],{},[360,146218,146219],{},"库",[360,146221,102754],{},[398,146223,146224,146232,146239,146247,146255,146263,146271],{},[357,146225,146226,146229],{},[403,146227,146228],{},"requests",[403,146230,146231],{},"网络请求",[357,146233,146234,146236],{},[403,146235,100684],{},[403,146237,146238],{},"数值计算",[357,146240,146241,146244],{},[403,146242,146243],{},"pandas",[403,146245,146246],{},"表格数据处理",[357,146248,146249,146252],{},[403,146250,146251],{},"matplotlib",[403,146253,146254],{},"绘图",[357,146256,146257,146260],{},[403,146258,146259],{},"pyecharts",[403,146261,146262],{},"ECharts 图表",[357,146264,146265,146268],{},[403,146266,146267],{},"flask",[403,146269,146270],{},"Web 后端",[357,146272,146273,146276],{},[403,146274,146275],{},"pytest",[403,146277,146278],{},"自动化测试",[14,146280,146282],{"id":146281},"_15-虚拟环境","1.5 虚拟环境",[19,146284,146285,146286,146289],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[200,146287,146288],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146291,146292],{},"创建虚拟环境：",[194,146294,146296],{"className":23913,"code":146295,"language":23915,"meta":27,"style":27},"python -m venv .venv\n",[200,146297,146298],{"__ignoreMap":27},[203,146299,146300,146302,146304,146306],{"class":205,"line":206},[203,146301,30438],{"class":2052},[203,146303,100940],{"class":262},[203,146305,100943],{"class":318},[203,146307,100946],{"class":318},[19,146309,146310],{},"Windows 激活：",[194,146312,146314],{"className":23913,"code":146313,"language":23915,"meta":27,"style":27},".venv\\Scripts\\activate\n",[200,146315,146316],{"__ignoreMap":27},[203,146317,146318],{"class":205,"line":206},[203,146319,146313],{"class":2052},[19,146321,146322],{},"macOS\u002FLinux 激活：",[194,146324,146326],{"className":23913,"code":146325,"language":23915,"meta":27,"style":27},"source .venv\u002Fbin\u002Factivate\n",[200,146327,146328],{"__ignoreMap":27},[203,146329,146330,146332],{"class":205,"line":206},[203,146331,100951],{"class":262},[203,146333,100954],{"class":318},[19,146335,146336],{},"退出虚拟环境：",[194,146338,146340],{"className":23913,"code":146339,"language":23915,"meta":27,"style":27},"deactivate\n",[200,146341,146342],{"__ignoreMap":27},[203,146343,146344],{"class":205,"line":206},[203,146345,146339],{"class":2052},[19,146347,146348],{},"保存依赖：",[194,146350,146352],{"className":23913,"code":146351,"language":23915,"meta":27,"style":27},"pip freeze > requirements.txt\n",[200,146353,146354],{"__ignoreMap":27},[203,146355,146356,146358,146361,146363],{"class":205,"line":206},[203,146357,23922],{"class":2052},[203,146359,146360],{"class":318}," freeze",[203,146362,26280],{"class":209},[203,146364,146365],{"class":318}," requirements.txt\n",[19,146367,146368],{},"安装依赖：",[194,146370,146372],{"className":23913,"code":146371,"language":23915,"meta":27,"style":27},"pip install -r requirements.txt\n",[200,146373,146374],{"__ignoreMap":27},[203,146375,146376,146378,146380,146382],{"class":205,"line":206},[203,146377,23922],{"class":2052},[203,146379,23925],{"class":318},[203,146381,119697],{"class":262},[203,146383,146365],{"class":318},[14,146385,146387],{"id":146386},"_16-开发工具","1.6 开发工具",[174,146389,146391],{"id":146390},"_161-pycharm","1.6.1 PyCharm",[19,146393,146394],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146396,122120],{},[157,146398,146399,146402,146405,146411,146414],{},[160,146400,146401],{},"New Project：创建项目。",[160,146403,146404],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[160,146406,146407,146408,126041],{},"New Python File：创建 ",[200,146409,146410],{},".py",[160,146412,146413],{},"Run：运行当前文件。",[160,146415,146416],{},"Debug：断点调试。",[174,146418,146420],{"id":146419},"_162-vs-code","1.6.2 VS Code",[19,146422,146423],{},"VS Code 轻量，适合后续多语言开发。",[19,146425,146426],{},"建议安装插件：",[157,146428,146429,146432,146435],{},[160,146430,146431],{},"Python。",[160,146433,146434],{},"Pylance。",[160,146436,146437],{},"Jupyter。",[19,146439,146440],{},"选择解释器：",[194,146442,146445],{"className":146443,"code":146444,"language":5277,"meta":27},[5275],"Ctrl + Shift + P -> Python: Select Interpreter\n",[200,146446,146444],{"__ignoreMap":27},[14,146448,146450],{"id":146449},"_17-第一个python程序","1.7 第一个Python程序",[19,146452,146453,146454,24676],{},"创建文件 ",[200,146455,146456],{},"hello.py",[194,146458,146460],{"className":30436,"code":146459,"language":30438,"meta":27,"style":27},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[200,146461,146462,146473],{"__ignoreMap":27},[203,146463,146464,146466,146468,146471],{"class":205,"line":206},[203,146465,30473],{"class":262},[203,146467,214],{"class":213},[203,146469,146470],{"class":318},"\"Hello World\"",[203,146472,220],{"class":213},[203,146474,146475,146477,146479,146482],{"class":205,"line":124},[203,146476,30473],{"class":262},[203,146478,214],{"class":213},[203,146480,146481],{"class":318},"\"你好，Python\"",[203,146483,220],{"class":213},[19,146485,146486],{},"在终端运行：",[194,146488,146490],{"className":23913,"code":146489,"language":23915,"meta":27,"style":27},"python hello.py\n",[200,146491,146492],{"__ignoreMap":27},[203,146493,146494,146496],{"class":205,"line":206},[203,146495,30438],{"class":2052},[203,146497,146498],{"class":318}," hello.py\n",[19,146500,146501],{},"或：",[194,146503,146505],{"className":23913,"code":146504,"language":23915,"meta":27,"style":27},"python3 hello.py\n",[200,146506,146507],{"__ignoreMap":27},[203,146508,146509,146511],{"class":205,"line":206},[203,146510,100937],{"class":2052},[203,146512,146498],{"class":318},[19,146514,146515],{},"输出：",[194,146517,146520],{"className":146518,"code":146519,"language":5277,"meta":27},[5275],"Hello World\n你好，Python\n",[200,146521,146519],{"__ignoreMap":27},[14,146523,146525],{"id":146524},"_18-print函数","1.8 print函数",[19,146527,146528,146531],{},[200,146529,146530],{},"print()"," 用来输出内容。",[194,146533,146535],{"className":30436,"code":146534,"language":30438,"meta":27,"style":27},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[200,146536,146537,146547,146557,146567],{"__ignoreMap":27},[203,146538,146539,146541,146543,146545],{"class":205,"line":206},[203,146540,30473],{"class":262},[203,146542,214],{"class":213},[203,146544,5934],{"class":318},[203,146546,220],{"class":213},[203,146548,146549,146551,146553,146555],{"class":205,"line":124},[203,146550,30473],{"class":262},[203,146552,214],{"class":213},[203,146554,525],{"class":262},[203,146556,220],{"class":213},[203,146558,146559,146561,146563,146565],{"class":205,"line":1269},[203,146560,30473],{"class":262},[203,146562,214],{"class":213},[203,146564,263],{"class":262},[203,146566,220],{"class":213},[203,146568,146569,146571,146573,146576,146578,146580],{"class":205,"line":1284},[203,146570,30473],{"class":262},[203,146572,214],{"class":213},[203,146574,146575],{"class":318},"\"年龄:\"",[203,146577,12525],{"class":213},[203,146579,864],{"class":262},[203,146581,220],{"class":213},[19,146583,146584],{},"多个内容用逗号隔开，默认中间加空格：",[194,146586,146588],{"className":30436,"code":146587,"language":30438,"meta":27,"style":27},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[200,146589,146590,146600,146610],{"__ignoreMap":27},[203,146591,146592,146595,146597],{"class":205,"line":206},[203,146593,146594],{"class":213},"name ",[203,146596,259],{"class":209},[203,146598,146599],{"class":318}," \"张三\"\n",[203,146601,146602,146605,146607],{"class":205,"line":124},[203,146603,146604],{"class":213},"age ",[203,146606,259],{"class":209},[203,146608,146609],{"class":262}," 18\n",[203,146611,146612,146614,146616,146619,146622,146624],{"class":205,"line":1269},[203,146613,30473],{"class":262},[203,146615,214],{"class":213},[203,146617,146618],{"class":318},"\"姓名:\"",[203,146620,146621],{"class":213},", name, ",[203,146623,146575],{"class":318},[203,146625,146626],{"class":213},", age)\n",[19,146628,146629],{},"修改分隔符：",[194,146631,146633],{"className":30436,"code":146632,"language":30438,"meta":27,"style":27},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[200,146634,146635],{"__ignoreMap":27},[203,146636,146637,146639,146641,146644,146646,146648,146650,146652,146654,146657,146659,146661],{"class":205,"line":206},[203,146638,30473],{"class":262},[203,146640,214],{"class":213},[203,146642,146643],{"class":318},"\"2024\"",[203,146645,12525],{"class":213},[203,146647,54374],{"class":318},[203,146649,12525],{"class":213},[203,146651,54374],{"class":318},[203,146653,12525],{"class":213},[203,146655,146656],{"class":5306},"sep",[203,146658,259],{"class":209},[203,146660,32541],{"class":318},[203,146662,220],{"class":213},[19,146664,146665],{},"修改结尾符：",[194,146667,146669],{"className":30436,"code":146668,"language":30438,"meta":27,"style":27},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[200,146670,146671,146689],{"__ignoreMap":27},[203,146672,146673,146675,146677,146679,146681,146683,146685,146687],{"class":205,"line":206},[203,146674,30473],{"class":262},[203,146676,214],{"class":213},[203,146678,5934],{"class":318},[203,146680,12525],{"class":213},[203,146682,45859],{"class":5306},[203,146684,259],{"class":209},[203,146686,4448],{"class":318},[203,146688,220],{"class":213},[203,146690,146691,146693,146695,146698],{"class":205,"line":124},[203,146692,30473],{"class":262},[203,146694,214],{"class":213},[203,146696,146697],{"class":318},"\"python\"",[203,146699,220],{"class":213},[14,146701,146703],{"id":146702},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,146705,146706],{},"交互运行适合临时验证：",[194,146708,146710],{"className":30436,"code":146709,"language":30438,"meta":27,"style":27},">>> 10 * 3\n30\n",[200,146711,146712,146722],{"__ignoreMap":27},[203,146713,146714,146716,146718,146720],{"class":205,"line":206},[203,146715,145911],{"class":209},[203,146717,2127],{"class":262},[203,146719,6608],{"class":209},[203,146721,120094],{"class":262},[203,146723,146724],{"class":205,"line":124},[203,146725,146726],{"class":262},"30\n",[19,146728,146729],{},"脚本运行适合保存程序：",[194,146731,146733],{"className":30436,"code":146732,"language":30438,"meta":27,"style":27},"price = 8\ncount = 5\nprint(price * count)\n",[200,146734,146735,146745,146754],{"__ignoreMap":27},[203,146736,146737,146740,146742],{"class":205,"line":206},[203,146738,146739],{"class":213},"price ",[203,146741,259],{"class":209},[203,146743,146744],{"class":262}," 8\n",[203,146746,146747,146750,146752],{"class":205,"line":124},[203,146748,146749],{"class":213},"count ",[203,146751,259],{"class":209},[203,146753,54485],{"class":262},[203,146755,146756,146758,146761,146763],{"class":205,"line":1269},[203,146757,30473],{"class":262},[203,146759,146760],{"class":213},"(price ",[203,146762,669],{"class":209},[203,146764,146765],{"class":213}," count)\n",[19,146767,146768],{},"实际学习中推荐：",[157,146770,146771,146774,146779],{},[160,146772,146773],{},"临时试一个语法，用交互模式。",[160,146775,146776,146777,126041],{},"写完整练习，用 ",[200,146778,146410],{},[160,146780,146781],{},"写项目，用独立目录和虚拟环境。",[14,146783,146785],{"id":146784},"_110-常见错误","1.10 常见错误",[174,146787,146789],{"id":146788},"_1101-命令找不到","1.10.1 命令找不到",[194,146791,146794],{"className":146792,"code":146793,"language":5277,"meta":27},[5275],"python: command not found\n",[200,146795,146793],{"__ignoreMap":27},[19,146797,146798],{},"原因：",[157,146800,146801,146804,146807],{},[160,146802,146803],{},"没安装 Python。",[160,146805,146806],{},"PATH 没配置。",[160,146808,146809,146810,28443],{},"Linux\u002FmacOS 应该使用 ",[200,146811,100937],{},[174,146813,146815],{"id":146814},"_1102-文件名冲突","1.10.2 文件名冲突",[19,146817,146818],{},"不要把文件命名为：",[194,146820,146823],{"className":146821,"code":146822,"language":5277,"meta":27},[5275],"random.py\njson.py\ntime.py\nrequests.py\n",[200,146824,146822],{"__ignoreMap":27},[19,146826,146827],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[174,146829,146831],{"id":146830},"_1103-中文乱码","1.10.3 中文乱码",[19,146833,146834],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,146836,146837],{},"如果读写文件出现乱码，要明确指定编码：",[194,146839,146841],{"className":30436,"code":146840,"language":30438,"meta":27,"style":27},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[200,146842,146843,146877],{"__ignoreMap":27},[203,146844,146845,146847,146850,146852,146855,146857,146860,146862,146865,146867,146870,146872,146874],{"class":205,"line":206},[203,146846,107891],{"class":209},[203,146848,146849],{"class":262}," open",[203,146851,214],{"class":213},[203,146853,146854],{"class":318},"\"data.txt\"",[203,146856,12525],{"class":213},[203,146858,146859],{"class":318},"\"r\"",[203,146861,12525],{"class":213},[203,146863,146864],{"class":5306},"encoding",[203,146866,259],{"class":209},[203,146868,146869],{"class":318},"\"utf-8\"",[203,146871,13804],{"class":213},[203,146873,31441],{"class":209},[203,146875,146876],{"class":213}," f:\n",[203,146878,146879,146882,146884],{"class":205,"line":124},[203,146880,146881],{"class":213},"    content ",[203,146883,259],{"class":209},[203,146885,146886],{"class":213}," f.read()\n",[14,146888,146890],{"id":146889},"_111-本章练习","1.11 本章练习",[157,146892,146893,146896,146902],{},[160,146894,146895],{},"安装 Python，并在终端输出版本号。",[160,146897,146898,146899,146901],{},"新建 ",[200,146900,146456],{},"，输出自己的姓名、年龄、学习目标。",[160,146903,104424,146904,146906],{},[200,146905,146530],{}," 输出下面格式：",[194,146908,146911],{"className":146909,"code":146910,"language":5277,"meta":27},[5275],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[200,146912,146910],{"__ignoreMap":27},[157,146914,146915],{"start":1284},[160,146916,104424,146917,146919],{},[200,146918,146656],{}," 输出日期：",[194,146921,146924],{"className":146922,"code":146923,"language":5277,"meta":27},[5275],"2024-10-10\n",[200,146925,146923],{"__ignoreMap":27},[157,146927,146928],{"start":1290},[160,146929,104424,146930,146932,146933,146935],{},[200,146931,45859],{}," 让两次 ",[200,146934,146530],{}," 输出在同一行。",[5216,146937,146938],{},"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":27,"searchDepth":124,"depth":124,"links":146940},[146941,146942,146943,146948,146949,146950,146954,146955,146956,146957,146962],{"id":145823,"depth":124,"text":145824},{"id":145867,"depth":124,"text":145868},{"id":145968,"depth":124,"text":145969,"children":146944},[146945,146946,146947],{"id":145972,"depth":1269,"text":145973},{"id":146027,"depth":1269,"text":146028},{"id":146063,"depth":1269,"text":146064},{"id":146136,"depth":124,"text":146137},{"id":146281,"depth":124,"text":146282},{"id":146386,"depth":124,"text":146387,"children":146951},[146952,146953],{"id":146390,"depth":1269,"text":146391},{"id":146419,"depth":1269,"text":146420},{"id":146449,"depth":124,"text":146450},{"id":146524,"depth":124,"text":146525},{"id":146702,"depth":124,"text":146703},{"id":146784,"depth":124,"text":146785,"children":146958},[146959,146960,146961],{"id":146788,"depth":1269,"text":146789},{"id":146814,"depth":1269,"text":146815},{"id":146830,"depth":1269,"text":146831},{"id":146889,"depth":124,"text":146890},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145815,"description":23467},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146969,"title":146970,"body":146971,"description":23467,"extension":129,"meta":149375,"navigation":131,"path":149376,"seo":149377,"stem":149378,"__hash__":149379},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146972,"toc":149360},[146973,146976,146980,146983,146986,147003,147006,147048,147051,147055,147058,147061,147098,147101,147135,147138,147230,147234,147248,147251,147278,147281,147285,147388,147395,147398,147415,147419,147426,147615,147618,147691,147695,147698,147782,147785,147817,147821,148025,148028,148032,148038,148140,148143,148399,148403,148406,148409,148423,148425,148611,148615,148977,148983,148987,148990,149114,149117,149296,149299,149303,149336,149340,149357],[10,146974,146970],{"id":146975},"_10-json与pyecharts折线图",[14,146977,146979],{"id":146978},"_101-数据可视化","10.1 数据可视化",[19,146981,146982],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,146984,146985],{},"常见图表：",[157,146987,146988,146991,146994,146997,147000],{},[160,146989,146990],{},"折线图：看趋势。",[160,146992,146993],{},"柱状图：看分类对比。",[160,146995,146996],{},"饼图：看占比。",[160,146998,146999],{},"地图：看地域分布。",[160,147001,147002],{},"散点图：看两个变量之间的关系。",[19,147004,147005],{},"Python 可视化常用库：",[351,147007,147008,147016],{},[354,147009,147010],{},[357,147011,147012,147014],{},[360,147013,146219],{},[360,147015,23831],{},[398,147017,147018,147025,147033,147040],{},[357,147019,147020,147022],{},[403,147021,146251],{},[403,147023,147024],{},"基础、经典、可定制",[357,147026,147027,147030],{},[403,147028,147029],{},"seaborn",[403,147031,147032],{},"统计图表更美观",[357,147034,147035,147037],{},[403,147036,146259],{},[403,147038,147039],{},"生成交互式网页图表",[357,147041,147042,147045],{},[403,147043,147044],{},"plotly",[403,147046,147047],{},"交互图表能力强",[19,147049,147050],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147052,147054],{"id":147053},"_102-json回顾","10.2 JSON回顾",[19,147056,147057],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147059,147060],{},"Python 字典：",[194,147062,147064],{"className":30436,"code":147063,"language":30438,"meta":27,"style":27},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[200,147065,147066,147074,147085,147094],{"__ignoreMap":27},[203,147067,147068,147070,147072],{"class":205,"line":206},[203,147069,101716],{"class":213},[203,147071,259],{"class":209},[203,147073,15662],{"class":213},[203,147075,147076,147079,147081,147083],{"class":205,"line":124},[203,147077,147078],{"class":318},"    \"name\"",[203,147080,51495],{"class":213},[203,147082,69327],{"class":318},[203,147084,31524],{"class":213},[203,147086,147087,147090,147092],{"class":205,"line":1269},[203,147088,147089],{"class":318},"    \"value\"",[203,147091,51495],{"class":213},[203,147093,97516],{"class":262},[203,147095,147096],{"class":205,"line":1284},[203,147097,1654],{"class":213},[19,147099,147100],{},"JSON 字符串：",[194,147102,147105],{"className":147103,"code":147104,"language":145850,"meta":27,"style":27},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[200,147106,147107,147111,147122,147131],{"__ignoreMap":27},[203,147108,147109],{"class":205,"line":206},[203,147110,1635],{"class":213},[203,147112,147113,147116,147118,147120],{"class":205,"line":124},[203,147114,147115],{"class":262},"  \"name\"",[203,147117,51495],{"class":213},[203,147119,69327],{"class":318},[203,147121,31524],{"class":213},[203,147123,147124,147127,147129],{"class":205,"line":1269},[203,147125,147126],{"class":262},"  \"value\"",[203,147128,51495],{"class":213},[203,147130,97516],{"class":262},[203,147132,147133],{"class":205,"line":1284},[203,147134,1654],{"class":213},[19,147136,147137],{},"Python 与 JSON 的转换：",[194,147139,147141],{"className":30436,"code":147140,"language":30438,"meta":27,"style":27},"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",[200,147142,147143,147150,147154,147179,147183,147202,147209,147213,147223],{"__ignoreMap":27},[203,147144,147145,147147],{"class":205,"line":206},[203,147146,30450],{"class":209},[203,147148,147149],{"class":213}," json\n",[203,147151,147152],{"class":205,"line":124},[203,147153,2489],{"emptyLinePlaceholder":131},[203,147155,147156,147158,147160,147162,147164,147166,147168,147170,147173,147175,147177],{"class":205,"line":1269},[203,147157,101716],{"class":213},[203,147159,259],{"class":209},[203,147161,4537],{"class":213},[203,147163,62737],{"class":318},[203,147165,51495],{"class":213},[203,147167,69327],{"class":318},[203,147169,12525],{"class":213},[203,147171,147172],{"class":318},"\"value\"",[203,147174,51495],{"class":213},[203,147176,525],{"class":262},[203,147178,1654],{"class":213},[203,147180,147181],{"class":205,"line":1284},[203,147182,2489],{"emptyLinePlaceholder":131},[203,147184,147185,147188,147190,147193,147196,147198,147200],{"class":205,"line":1290},[203,147186,147187],{"class":213},"json_text ",[203,147189,259],{"class":209},[203,147191,147192],{"class":213}," json.dumps(data, ",[203,147194,147195],{"class":5306},"ensure_ascii",[203,147197,259],{"class":209},[203,147199,34045],{"class":262},[203,147201,220],{"class":213},[203,147203,147204,147206],{"class":205,"line":1304},[203,147205,30473],{"class":262},[203,147207,147208],{"class":213},"(json_text)\n",[203,147210,147211],{"class":205,"line":1310},[203,147212,2489],{"emptyLinePlaceholder":131},[203,147214,147215,147218,147220],{"class":205,"line":1401},[203,147216,147217],{"class":213},"new_data ",[203,147219,259],{"class":209},[203,147221,147222],{"class":213}," json.loads(json_text)\n",[203,147224,147225,147227],{"class":205,"line":1407},[203,147226,30473],{"class":262},[203,147228,147229],{"class":213},"(new_data)\n",[14,147231,147233],{"id":147232},"_103-安装pyecharts","10.3 安装pyecharts",[194,147235,147237],{"className":23913,"code":147236,"language":23915,"meta":27,"style":27},"pip install pyecharts\n",[200,147238,147239],{"__ignoreMap":27},[203,147240,147241,147243,147245],{"class":205,"line":206},[203,147242,23922],{"class":2052},[203,147244,23925],{"class":318},[203,147246,147247],{"class":318}," pyecharts\n",[19,147249,147250],{},"验证：",[194,147252,147254],{"className":30436,"code":147253,"language":30438,"meta":27,"style":27},"import pyecharts\n\nprint(pyecharts.__version__)\n",[200,147255,147256,147262,147266],{"__ignoreMap":27},[203,147257,147258,147260],{"class":205,"line":206},[203,147259,30450],{"class":209},[203,147261,147247],{"class":213},[203,147263,147264],{"class":205,"line":124},[203,147265,2489],{"emptyLinePlaceholder":131},[203,147267,147268,147270,147273,147276],{"class":205,"line":1269},[203,147269,30473],{"class":262},[203,147271,147272],{"class":213},"(pyecharts.",[203,147274,147275],{"class":262},"__version__",[203,147277,220],{"class":213},[19,147279,147280],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147282,147284],{"id":147283},"_104-第一个折线图","10.4 第一个折线图",[194,147286,147288],{"className":30436,"code":147287,"language":30438,"meta":27,"style":27},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[200,147289,147290,147302,147306,147316,147346,147378],{"__ignoreMap":27},[203,147291,147292,147294,147297,147299],{"class":205,"line":206},[203,147293,30795],{"class":209},[203,147295,147296],{"class":213}," pyecharts.charts ",[203,147298,30450],{"class":209},[203,147300,147301],{"class":213}," Line\n",[203,147303,147304],{"class":205,"line":124},[203,147305,2489],{"emptyLinePlaceholder":131},[203,147307,147308,147311,147313],{"class":205,"line":1269},[203,147309,147310],{"class":213},"line ",[203,147312,259],{"class":209},[203,147314,147315],{"class":213}," Line()\n",[203,147317,147318,147321,147324,147326,147329,147331,147334,147336,147339,147341,147344],{"class":205,"line":1284},[203,147319,147320],{"class":213},"line.add_xaxis([",[203,147322,147323],{"class":318},"\"周一\"",[203,147325,12525],{"class":213},[203,147327,147328],{"class":318},"\"周二\"",[203,147330,12525],{"class":213},[203,147332,147333],{"class":318},"\"周三\"",[203,147335,12525],{"class":213},[203,147337,147338],{"class":318},"\"周四\"",[203,147340,12525],{"class":213},[203,147342,147343],{"class":318},"\"周五\"",[203,147345,4746],{"class":213},[203,147347,147348,147351,147354,147356,147358,147360,147362,147364,147366,147368,147371,147373,147376],{"class":205,"line":1290},[203,147349,147350],{"class":213},"line.add_yaxis(",[203,147352,147353],{"class":318},"\"销售额\"",[203,147355,77576],{"class":213},[203,147357,525],{"class":262},[203,147359,12525],{"class":213},[203,147361,1031],{"class":262},[203,147363,12525],{"class":213},[203,147365,1076],{"class":262},[203,147367,12525],{"class":213},[203,147369,147370],{"class":262},"150",[203,147372,12525],{"class":213},[203,147374,147375],{"class":262},"180",[203,147377,4746],{"class":213},[203,147379,147380,147383,147386],{"class":205,"line":1304},[203,147381,147382],{"class":213},"line.render(",[203,147384,147385],{"class":318},"\"line.html\"",[203,147387,220],{"class":213},[19,147389,147390,147391,147394],{},"运行后会生成 ",[200,147392,147393],{},"line.html","，用浏览器打开即可看到图表。",[19,147396,147397],{},"核心步骤：",[157,147399,147400,147403,147406,147409,147412],{},[160,147401,147402],{},"导入图表类。",[160,147404,147405],{},"创建图表对象。",[160,147407,147408],{},"添加 x 轴数据。",[160,147410,147411],{},"添加 y 轴数据。",[160,147413,147414],{},"渲染为 HTML。",[14,147416,147418],{"id":147417},"_105-全局配置","10.5 全局配置",[19,147420,147421,147422,147425],{},"常用配置在 ",[200,147423,147424],{},"pyecharts.options"," 中。",[194,147427,147429],{"className":30436,"code":147428,"language":30438,"meta":27,"style":27},"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",[200,147430,147431,147448,147458,147462,147470,147494,147522,147527,147546,147565,147583,147603,147607],{"__ignoreMap":27},[203,147432,147433,147435,147438,147440,147443,147445],{"class":205,"line":206},[203,147434,30795],{"class":209},[203,147436,147437],{"class":213}," pyecharts ",[203,147439,30450],{"class":209},[203,147441,147442],{"class":213}," options ",[203,147444,31441],{"class":209},[203,147446,147447],{"class":213}," opts\n",[203,147449,147450,147452,147454,147456],{"class":205,"line":124},[203,147451,30795],{"class":209},[203,147453,147296],{"class":213},[203,147455,30450],{"class":209},[203,147457,147301],{"class":213},[203,147459,147460],{"class":205,"line":1269},[203,147461,2489],{"emptyLinePlaceholder":131},[203,147463,147464,147466,147468],{"class":205,"line":1284},[203,147465,147310],{"class":213},[203,147467,259],{"class":209},[203,147469,147315],{"class":213},[203,147471,147472,147474,147476,147478,147480,147482,147484,147486,147488,147490,147492],{"class":205,"line":1290},[203,147473,147320],{"class":213},[203,147475,147323],{"class":318},[203,147477,12525],{"class":213},[203,147479,147328],{"class":318},[203,147481,12525],{"class":213},[203,147483,147333],{"class":318},[203,147485,12525],{"class":213},[203,147487,147338],{"class":318},[203,147489,12525],{"class":213},[203,147491,147343],{"class":318},[203,147493,4746],{"class":213},[203,147495,147496,147498,147500,147502,147504,147506,147508,147510,147512,147514,147516,147518,147520],{"class":205,"line":1304},[203,147497,147350],{"class":213},[203,147499,147353],{"class":318},[203,147501,77576],{"class":213},[203,147503,525],{"class":262},[203,147505,12525],{"class":213},[203,147507,1031],{"class":262},[203,147509,12525],{"class":213},[203,147511,1076],{"class":262},[203,147513,12525],{"class":213},[203,147515,147370],{"class":262},[203,147517,12525],{"class":213},[203,147519,147375],{"class":262},[203,147521,4746],{"class":213},[203,147523,147524],{"class":205,"line":1310},[203,147525,147526],{"class":213},"line.set_global_opts(\n",[203,147528,147529,147532,147534,147537,147539,147541,147544],{"class":205,"line":1401},[203,147530,147531],{"class":5306},"    title_opts",[203,147533,259],{"class":209},[203,147535,147536],{"class":213},"opts.TitleOpts(",[203,147538,51465],{"class":5306},[203,147540,259],{"class":209},[203,147542,147543],{"class":318},"\"一周销售额\"",[203,147545,38105],{"class":213},[203,147547,147548,147551,147553,147556,147558,147560,147563],{"class":205,"line":1407},[203,147549,147550],{"class":5306},"    xaxis_opts",[203,147552,259],{"class":209},[203,147554,147555],{"class":213},"opts.AxisOpts(",[203,147557,79868],{"class":5306},[203,147559,259],{"class":209},[203,147561,147562],{"class":318},"\"日期\"",[203,147564,38105],{"class":213},[203,147566,147567,147570,147572,147574,147576,147578,147581],{"class":205,"line":1419},[203,147568,147569],{"class":5306},"    yaxis_opts",[203,147571,259],{"class":209},[203,147573,147555],{"class":213},[203,147575,79868],{"class":5306},[203,147577,259],{"class":209},[203,147579,147580],{"class":318},"\"金额\"",[203,147582,38105],{"class":213},[203,147584,147585,147588,147590,147593,147596,147598,147601],{"class":205,"line":1701},[203,147586,147587],{"class":5306},"    tooltip_opts",[203,147589,259],{"class":209},[203,147591,147592],{"class":213},"opts.TooltipOpts(",[203,147594,147595],{"class":5306},"trigger",[203,147597,259],{"class":209},[203,147599,147600],{"class":318},"\"axis\"",[203,147602,38105],{"class":213},[203,147604,147605],{"class":205,"line":1706},[203,147606,220],{"class":213},[203,147608,147609,147611,147613],{"class":205,"line":1712},[203,147610,147382],{"class":213},[203,147612,147385],{"class":318},[203,147614,220],{"class":213},[19,147616,147617],{},"常见全局配置：",[351,147619,147620,147629],{},[354,147621,147622],{},[357,147623,147624,147627],{},[360,147625,147626],{},"配置",[360,147628,102754],{},[398,147630,147631,147641,147651,147661,147671,147681],{},[357,147632,147633,147638],{},[403,147634,147635],{},[200,147636,147637],{},"TitleOpts",[403,147639,147640],{},"标题",[357,147642,147643,147648],{},[403,147644,147645],{},[200,147646,147647],{},"LegendOpts",[403,147649,147650],{},"图例",[357,147652,147653,147658],{},[403,147654,147655],{},[200,147656,147657],{},"TooltipOpts",[403,147659,147660],{},"提示框",[357,147662,147663,147668],{},[403,147664,147665],{},[200,147666,147667],{},"AxisOpts",[403,147669,147670],{},"坐标轴",[357,147672,147673,147678],{},[403,147674,147675],{},[200,147676,147677],{},"VisualMapOpts",[403,147679,147680],{},"视觉映射",[357,147682,147683,147688],{},[403,147684,147685],{},[200,147686,147687],{},"DataZoomOpts",[403,147689,147690],{},"区域缩放",[14,147692,147694],{"id":147693},"_106-系列配置","10.6 系列配置",[19,147696,147697],{},"系列配置作用于某一组数据。",[194,147699,147701],{"className":30436,"code":147700,"language":30438,"meta":27,"style":27},"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",[200,147702,147703,147708,147719,147748,147759,147778],{"__ignoreMap":27},[203,147704,147705],{"class":205,"line":206},[203,147706,147707],{"class":213},"line.add_yaxis(\n",[203,147709,147710,147713,147715,147717],{"class":205,"line":124},[203,147711,147712],{"class":5306},"    series_name",[203,147714,259],{"class":209},[203,147716,147353],{"class":318},[203,147718,31524],{"class":213},[203,147720,147721,147724,147726,147728,147730,147732,147734,147736,147738,147740,147742,147744,147746],{"class":205,"line":1269},[203,147722,147723],{"class":5306},"    y_axis",[203,147725,259],{"class":209},[203,147727,1104],{"class":213},[203,147729,525],{"class":262},[203,147731,12525],{"class":213},[203,147733,1031],{"class":262},[203,147735,12525],{"class":213},[203,147737,1076],{"class":262},[203,147739,12525],{"class":213},[203,147741,147370],{"class":262},[203,147743,12525],{"class":213},[203,147745,147375],{"class":262},[203,147747,87894],{"class":213},[203,147749,147750,147753,147755,147757],{"class":205,"line":1284},[203,147751,147752],{"class":5306},"    is_smooth",[203,147754,259],{"class":209},[203,147756,31534],{"class":262},[203,147758,31524],{"class":213},[203,147760,147761,147764,147766,147769,147772,147774,147776],{"class":205,"line":1290},[203,147762,147763],{"class":5306},"    label_opts",[203,147765,259],{"class":209},[203,147767,147768],{"class":213},"opts.LabelOpts(",[203,147770,147771],{"class":5306},"is_show",[203,147773,259],{"class":209},[203,147775,31534],{"class":262},[203,147777,38105],{"class":213},[203,147779,147780],{"class":205,"line":1304},[203,147781,220],{"class":213},[19,147783,147784],{},"常用参数：",[157,147786,147787,147793,147799,147805,147811],{},[160,147788,147789,147792],{},[200,147790,147791],{},"series_name","：系列名称。",[160,147794,147795,147798],{},[200,147796,147797],{},"y_axis","：y 轴数据。",[160,147800,147801,147804],{},[200,147802,147803],{},"is_smooth","：是否平滑曲线。",[160,147806,147807,147810],{},[200,147808,147809],{},"label_opts","：标签配置。",[160,147812,147813,147816],{},[200,147814,147815],{},"symbol_size","：标记点大小。",[14,147818,147820],{"id":147819},"_107-多条折线","10.7 多条折线",[194,147822,147824],{"className":30436,"code":147823,"language":30438,"meta":27,"style":27},"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",[200,147825,147826,147840,147850,147854,147883,147887,147895,147900,147938,147975,147979,147996,148012,148016],{"__ignoreMap":27},[203,147827,147828,147830,147832,147834,147836,147838],{"class":205,"line":206},[203,147829,30795],{"class":209},[203,147831,147437],{"class":213},[203,147833,30450],{"class":209},[203,147835,147442],{"class":213},[203,147837,31441],{"class":209},[203,147839,147447],{"class":213},[203,147841,147842,147844,147846,147848],{"class":205,"line":124},[203,147843,30795],{"class":209},[203,147845,147296],{"class":213},[203,147847,30450],{"class":209},[203,147849,147301],{"class":213},[203,147851,147852],{"class":205,"line":1269},[203,147853,2489],{"emptyLinePlaceholder":131},[203,147855,147856,147859,147861,147863,147865,147867,147869,147871,147873,147875,147877,147879,147881],{"class":205,"line":1284},[203,147857,147858],{"class":213},"dates ",[203,147860,259],{"class":209},[203,147862,52284],{"class":213},[203,147864,147323],{"class":318},[203,147866,12525],{"class":213},[203,147868,147328],{"class":318},[203,147870,12525],{"class":213},[203,147872,147333],{"class":318},[203,147874,12525],{"class":213},[203,147876,147338],{"class":318},[203,147878,12525],{"class":213},[203,147880,147343],{"class":318},[203,147882,33304],{"class":213},[203,147884,147885],{"class":205,"line":1290},[203,147886,2489],{"emptyLinePlaceholder":131},[203,147888,147889,147891,147893],{"class":205,"line":1304},[203,147890,147310],{"class":213},[203,147892,259],{"class":209},[203,147894,147315],{"class":213},[203,147896,147897],{"class":205,"line":1310},[203,147898,147899],{"class":213},"line.add_xaxis(dates)\n",[203,147901,147902,147904,147907,147909,147911,147913,147916,147918,147920,147922,147924,147926,147928,147930,147932,147934,147936],{"class":205,"line":1401},[203,147903,147350],{"class":213},[203,147905,147906],{"class":318},"\"线上销售\"",[203,147908,77576],{"class":213},[203,147910,525],{"class":262},[203,147912,12525],{"class":213},[203,147914,147915],{"class":262},"130",[203,147917,12525],{"class":213},[203,147919,1031],{"class":262},[203,147921,12525],{"class":213},[203,147923,21138],{"class":262},[203,147925,12525],{"class":213},[203,147927,1811],{"class":262},[203,147929,112260],{"class":213},[203,147931,147803],{"class":5306},[203,147933,259],{"class":209},[203,147935,31534],{"class":262},[203,147937,220],{"class":213},[203,147939,147940,147942,147945,147947,147949,147951,147953,147955,147957,147959,147961,147963,147965,147967,147969,147971,147973],{"class":205,"line":1407},[203,147941,147350],{"class":213},[203,147943,147944],{"class":318},"\"线下销售\"",[203,147946,77576],{"class":213},[203,147948,826],{"class":262},[203,147950,12525],{"class":213},[203,147952,1076],{"class":262},[203,147954,12525],{"class":213},[203,147956,525],{"class":262},[203,147958,12525],{"class":213},[203,147960,1031],{"class":262},[203,147962,12525],{"class":213},[203,147964,147370],{"class":262},[203,147966,112260],{"class":213},[203,147968,147803],{"class":5306},[203,147970,259],{"class":209},[203,147972,31534],{"class":262},[203,147974,220],{"class":213},[203,147976,147977],{"class":205,"line":1419},[203,147978,147526],{"class":213},[203,147980,147981,147983,147985,147987,147989,147991,147994],{"class":205,"line":1701},[203,147982,147531],{"class":5306},[203,147984,259],{"class":209},[203,147986,147536],{"class":213},[203,147988,51465],{"class":5306},[203,147990,259],{"class":209},[203,147992,147993],{"class":318},"\"线上线下销售趋势\"",[203,147995,38105],{"class":213},[203,147997,147998,148000,148002,148004,148006,148008,148010],{"class":205,"line":1706},[203,147999,147587],{"class":5306},[203,148001,259],{"class":209},[203,148003,147592],{"class":213},[203,148005,147595],{"class":5306},[203,148007,259],{"class":209},[203,148009,147600],{"class":318},[203,148011,38105],{"class":213},[203,148013,148014],{"class":205,"line":1712},[203,148015,220],{"class":213},[203,148017,148018,148020,148023],{"class":205,"line":1717},[203,148019,147382],{"class":213},[203,148021,148022],{"class":318},"\"sales.html\"",[203,148024,220],{"class":213},[19,148026,148027],{},"多条折线适合比较不同指标或不同地区。",[14,148029,148031],{"id":148030},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148033,148034,148035,24676],{},"假设 ",[200,148036,148037],{},"sales.json",[194,148039,148041],{"className":147103,"code":148040,"language":145850,"meta":27,"style":27},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[200,148042,148043,148048,148080,148108,148136],{"__ignoreMap":27},[203,148044,148045],{"class":205,"line":206},[203,148046,148047],{"class":213},"[\n",[203,148049,148050,148053,148056,148058,148060,148062,148065,148067,148069,148071,148074,148076,148078],{"class":205,"line":124},[203,148051,148052],{"class":213},"  {",[203,148054,148055],{"class":262},"\"date\"",[203,148057,51495],{"class":213},[203,148059,147323],{"class":318},[203,148061,12525],{"class":213},[203,148063,148064],{"class":262},"\"online\"",[203,148066,51495],{"class":213},[203,148068,525],{"class":262},[203,148070,12525],{"class":213},[203,148072,148073],{"class":262},"\"offline\"",[203,148075,51495],{"class":213},[203,148077,826],{"class":262},[203,148079,5019],{"class":213},[203,148081,148082,148084,148086,148088,148090,148092,148094,148096,148098,148100,148102,148104,148106],{"class":205,"line":1269},[203,148083,148052],{"class":213},[203,148085,148055],{"class":262},[203,148087,51495],{"class":213},[203,148089,147328],{"class":318},[203,148091,12525],{"class":213},[203,148093,148064],{"class":262},[203,148095,51495],{"class":213},[203,148097,147915],{"class":262},[203,148099,12525],{"class":213},[203,148101,148073],{"class":262},[203,148103,51495],{"class":213},[203,148105,1076],{"class":262},[203,148107,5019],{"class":213},[203,148109,148110,148112,148114,148116,148118,148120,148122,148124,148126,148128,148130,148132,148134],{"class":205,"line":1284},[203,148111,148052],{"class":213},[203,148113,148055],{"class":262},[203,148115,51495],{"class":213},[203,148117,147333],{"class":318},[203,148119,12525],{"class":213},[203,148121,148064],{"class":262},[203,148123,51495],{"class":213},[203,148125,1031],{"class":262},[203,148127,12525],{"class":213},[203,148129,148073],{"class":262},[203,148131,51495],{"class":213},[203,148133,525],{"class":262},[203,148135,1654],{"class":213},[203,148137,148138],{"class":205,"line":1290},[203,148139,33304],{"class":213},[19,148141,148142],{},"读取并绘图：",[194,148144,148146],{"className":30436,"code":148145,"language":30438,"meta":27,"style":27},"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",[200,148147,148148,148154,148168,148178,148182,148214,148227,148231,148239,148248,148257,148261,148273,148282,148291,148300,148304,148312,148316,148333,148350,148354,148371,148387,148391],{"__ignoreMap":27},[203,148149,148150,148152],{"class":205,"line":206},[203,148151,30450],{"class":209},[203,148153,147149],{"class":213},[203,148155,148156,148158,148160,148162,148164,148166],{"class":205,"line":124},[203,148157,30795],{"class":209},[203,148159,147437],{"class":213},[203,148161,30450],{"class":209},[203,148163,147442],{"class":213},[203,148165,31441],{"class":209},[203,148167,147447],{"class":213},[203,148169,148170,148172,148174,148176],{"class":205,"line":1269},[203,148171,30795],{"class":209},[203,148173,147296],{"class":213},[203,148175,30450],{"class":209},[203,148177,147301],{"class":213},[203,148179,148180],{"class":205,"line":1284},[203,148181,2489],{"emptyLinePlaceholder":131},[203,148183,148184,148186,148188,148190,148193,148195,148197,148199,148201,148203,148205,148207,148209,148212],{"class":205,"line":1290},[203,148185,107891],{"class":209},[203,148187,146849],{"class":262},[203,148189,214],{"class":213},[203,148191,148192],{"class":318},"\"sales.json\"",[203,148194,12525],{"class":213},[203,148196,146859],{"class":318},[203,148198,12525],{"class":213},[203,148200,146864],{"class":5306},[203,148202,259],{"class":209},[203,148204,146869],{"class":318},[203,148206,13804],{"class":213},[203,148208,31441],{"class":209},[203,148210,148211],{"class":5306}," file",[203,148213,3828],{"class":213},[203,148215,148216,148218,148220,148223,148225],{"class":205,"line":1304},[203,148217,101479],{"class":213},[203,148219,259],{"class":209},[203,148221,148222],{"class":213}," json.load(",[203,148224,45412],{"class":5306},[203,148226,220],{"class":213},[203,148228,148229],{"class":205,"line":1310},[203,148230,2489],{"emptyLinePlaceholder":131},[203,148232,148233,148235,148237],{"class":205,"line":1401},[203,148234,147858],{"class":213},[203,148236,259],{"class":209},[203,148238,51896],{"class":213},[203,148240,148241,148244,148246],{"class":205,"line":1407},[203,148242,148243],{"class":213},"online_sales ",[203,148245,259],{"class":209},[203,148247,51896],{"class":213},[203,148249,148250,148253,148255],{"class":205,"line":1419},[203,148251,148252],{"class":213},"offline_sales ",[203,148254,259],{"class":209},[203,148256,51896],{"class":213},[203,148258,148259],{"class":205,"line":1701},[203,148260,2489],{"emptyLinePlaceholder":131},[203,148262,148263,148265,148268,148270],{"class":205,"line":1706},[203,148264,3114],{"class":209},[203,148266,148267],{"class":213}," item ",[203,148269,26101],{"class":209},[203,148271,148272],{"class":213}," data:\n",[203,148274,148275,148278,148280],{"class":205,"line":1712},[203,148276,148277],{"class":213},"    dates.append(item[",[203,148279,148055],{"class":318},[203,148281,4746],{"class":213},[203,148283,148284,148287,148289],{"class":205,"line":1717},[203,148285,148286],{"class":213},"    online_sales.append(item[",[203,148288,148064],{"class":318},[203,148290,4746],{"class":213},[203,148292,148293,148296,148298],{"class":205,"line":1731},[203,148294,148295],{"class":213},"    offline_sales.append(item[",[203,148297,148073],{"class":318},[203,148299,4746],{"class":213},[203,148301,148302],{"class":205,"line":1736},[203,148303,2489],{"emptyLinePlaceholder":131},[203,148305,148306,148308,148310],{"class":205,"line":1742},[203,148307,147310],{"class":213},[203,148309,259],{"class":209},[203,148311,147315],{"class":213},[203,148313,148314],{"class":205,"line":1763},[203,148315,147899],{"class":213},[203,148317,148318,148320,148322,148325,148327,148329,148331],{"class":205,"line":1768},[203,148319,147350],{"class":213},[203,148321,147906],{"class":318},[203,148323,148324],{"class":213},", online_sales, ",[203,148326,147803],{"class":5306},[203,148328,259],{"class":209},[203,148330,31534],{"class":262},[203,148332,220],{"class":213},[203,148334,148335,148337,148339,148342,148344,148346,148348],{"class":205,"line":1782},[203,148336,147350],{"class":213},[203,148338,147944],{"class":318},[203,148340,148341],{"class":213},", offline_sales, ",[203,148343,147803],{"class":5306},[203,148345,259],{"class":209},[203,148347,31534],{"class":262},[203,148349,220],{"class":213},[203,148351,148352],{"class":205,"line":1787},[203,148353,147526],{"class":213},[203,148355,148356,148358,148360,148362,148364,148366,148369],{"class":205,"line":1816},[203,148357,147531],{"class":5306},[203,148359,259],{"class":209},[203,148361,147536],{"class":213},[203,148363,51465],{"class":5306},[203,148365,259],{"class":209},[203,148367,148368],{"class":318},"\"销售趋势\"",[203,148370,38105],{"class":213},[203,148372,148373,148375,148377,148379,148381,148383,148385],{"class":205,"line":1821},[203,148374,147587],{"class":5306},[203,148376,259],{"class":209},[203,148378,147592],{"class":213},[203,148380,147595],{"class":5306},[203,148382,259],{"class":209},[203,148384,147600],{"class":318},[203,148386,38105],{"class":213},[203,148388,148389],{"class":205,"line":1838},[203,148390,220],{"class":213},[203,148392,148393,148395,148397],{"class":205,"line":1843},[203,148394,147382],{"class":213},[203,148396,148022],{"class":318},[203,148398,220],{"class":213},[14,148400,148402],{"id":148401},"_109-数据清洗","10.9 数据清洗",[19,148404,148405],{},"真实数据经常不整齐，需要清洗。",[19,148407,148408],{},"常见问题：",[157,148410,148411,148414,148417,148420],{},[160,148412,148413],{},"数字是字符串。",[160,148415,148416],{},"字段缺失。",[160,148418,148419],{},"空值。",[160,148421,148422],{},"日期格式不统一。",[19,148424,15225],{},[194,148426,148428],{"className":30436,"code":148427,"language":30438,"meta":27,"style":27},"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",[200,148429,148430,148439,148462,148482,148503,148507,148511,148519,148528,148532,148543,148557,148566,148571,148575,148583,148593,148597,148604],{"__ignoreMap":27},[203,148431,148432,148435,148437],{"class":205,"line":206},[203,148433,148434],{"class":213},"raw_data ",[203,148436,259],{"class":209},[203,148438,55505],{"class":213},[203,148440,148441,148444,148446,148448,148450,148452,148455,148457,148460],{"class":205,"line":124},[203,148442,148443],{"class":213},"    {",[203,148445,148055],{"class":318},[203,148447,51495],{"class":213},[203,148449,147323],{"class":318},[203,148451,12525],{"class":213},[203,148453,148454],{"class":318},"\"sales\"",[203,148456,51495],{"class":213},[203,148458,148459],{"class":318},"\"100\"",[203,148461,5019],{"class":213},[203,148463,148464,148466,148468,148470,148472,148474,148476,148478,148480],{"class":205,"line":1269},[203,148465,148443],{"class":213},[203,148467,148055],{"class":318},[203,148469,51495],{"class":213},[203,148471,147328],{"class":318},[203,148473,12525],{"class":213},[203,148475,148454],{"class":318},[203,148477,51495],{"class":213},[203,148479,7742],{"class":318},[203,148481,5019],{"class":213},[203,148483,148484,148486,148488,148490,148492,148494,148496,148498,148501],{"class":205,"line":1284},[203,148485,148443],{"class":213},[203,148487,148055],{"class":318},[203,148489,51495],{"class":213},[203,148491,147333],{"class":318},[203,148493,12525],{"class":213},[203,148495,148454],{"class":318},[203,148497,51495],{"class":213},[203,148499,148500],{"class":318},"\"120\"",[203,148502,5019],{"class":213},[203,148504,148505],{"class":205,"line":1290},[203,148506,33304],{"class":213},[203,148508,148509],{"class":205,"line":1304},[203,148510,2489],{"emptyLinePlaceholder":131},[203,148512,148513,148515,148517],{"class":205,"line":1310},[203,148514,147858],{"class":213},[203,148516,259],{"class":209},[203,148518,51896],{"class":213},[203,148520,148521,148524,148526],{"class":205,"line":1401},[203,148522,148523],{"class":213},"sales ",[203,148525,259],{"class":209},[203,148527,51896],{"class":213},[203,148529,148530],{"class":205,"line":1407},[203,148531,2489],{"emptyLinePlaceholder":131},[203,148533,148534,148536,148538,148540],{"class":205,"line":1419},[203,148535,3114],{"class":209},[203,148537,148267],{"class":213},[203,148539,26101],{"class":209},[203,148541,148542],{"class":213}," raw_data:\n",[203,148544,148545,148548,148550,148553,148555],{"class":205,"line":1701},[203,148546,148547],{"class":213},"    value ",[203,148549,259],{"class":209},[203,148551,148552],{"class":213}," item.get(",[203,148554,148454],{"class":318},[203,148556,220],{"class":213},[203,148558,148559,148561,148563],{"class":205,"line":1706},[203,148560,3190],{"class":209},[203,148562,38988],{"class":209},[203,148564,148565],{"class":213}," value:\n",[203,148567,148568],{"class":205,"line":1712},[203,148569,148570],{"class":209},"        continue\n",[203,148572,148573],{"class":205,"line":1717},[203,148574,2489],{"emptyLinePlaceholder":131},[203,148576,148577,148579,148581],{"class":205,"line":1731},[203,148578,148277],{"class":213},[203,148580,148055],{"class":318},[203,148582,4746],{"class":213},[203,148584,148585,148588,148590],{"class":205,"line":1736},[203,148586,148587],{"class":213},"    sales.append(",[203,148589,217],{"class":262},[203,148591,148592],{"class":213},"(value))\n",[203,148594,148595],{"class":205,"line":1742},[203,148596,2489],{"emptyLinePlaceholder":131},[203,148598,148599,148601],{"class":205,"line":1763},[203,148600,30473],{"class":262},[203,148602,148603],{"class":213},"(dates)\n",[203,148605,148606,148608],{"class":205,"line":1768},[203,148607,30473],{"class":262},[203,148609,148610],{"class":213},"(sales)\n",[14,148612,148614],{"id":148613},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[194,148616,148618],{"className":30436,"code":148617,"language":30438,"meta":27,"style":27},"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",[200,148619,148620,148634,148644,148648,148656,148677,148699,148721,148743,148765,148769,148773,148795,148816,148820,148828,148832,148836,148846,148855,148865,148881,148885,148889,148906,148922,148938,148954,148964,148968],{"__ignoreMap":27},[203,148621,148622,148624,148626,148628,148630,148632],{"class":205,"line":206},[203,148623,30795],{"class":209},[203,148625,147437],{"class":213},[203,148627,30450],{"class":209},[203,148629,147442],{"class":213},[203,148631,31441],{"class":209},[203,148633,147447],{"class":213},[203,148635,148636,148638,148640,148642],{"class":205,"line":124},[203,148637,30795],{"class":209},[203,148639,147296],{"class":213},[203,148641,30450],{"class":209},[203,148643,147301],{"class":213},[203,148645,148646],{"class":205,"line":1269},[203,148647,2489],{"emptyLinePlaceholder":131},[203,148649,148650,148652,148654],{"class":205,"line":1284},[203,148651,148523],{"class":213},[203,148653,259],{"class":209},[203,148655,55505],{"class":213},[203,148657,148658,148660,148662,148664,148667,148669,148671,148673,148675],{"class":205,"line":1290},[203,148659,148443],{"class":213},[203,148661,148055],{"class":318},[203,148663,51495],{"class":213},[203,148665,148666],{"class":318},"\"2024-10-01\"",[203,148668,12525],{"class":213},[203,148670,84142],{"class":318},[203,148672,51495],{"class":213},[203,148674,92081],{"class":262},[203,148676,5019],{"class":213},[203,148678,148679,148681,148683,148685,148688,148690,148692,148694,148697],{"class":205,"line":1304},[203,148680,148443],{"class":213},[203,148682,148055],{"class":318},[203,148684,51495],{"class":213},[203,148686,148687],{"class":318},"\"2024-10-02\"",[203,148689,12525],{"class":213},[203,148691,84142],{"class":318},[203,148693,51495],{"class":213},[203,148695,148696],{"class":262},"1800",[203,148698,5019],{"class":213},[203,148700,148701,148703,148705,148707,148710,148712,148714,148716,148719],{"class":205,"line":1310},[203,148702,148443],{"class":213},[203,148704,148055],{"class":318},[203,148706,51495],{"class":213},[203,148708,148709],{"class":318},"\"2024-10-03\"",[203,148711,12525],{"class":213},[203,148713,84142],{"class":318},[203,148715,51495],{"class":213},[203,148717,148718],{"class":262},"1500",[203,148720,5019],{"class":213},[203,148722,148723,148725,148727,148729,148732,148734,148736,148738,148741],{"class":205,"line":1401},[203,148724,148443],{"class":213},[203,148726,148055],{"class":318},[203,148728,51495],{"class":213},[203,148730,148731],{"class":318},"\"2024-10-04\"",[203,148733,12525],{"class":213},[203,148735,84142],{"class":318},[203,148737,51495],{"class":213},[203,148739,148740],{"class":262},"2100",[203,148742,5019],{"class":213},[203,148744,148745,148747,148749,148751,148754,148756,148758,148760,148763],{"class":205,"line":1407},[203,148746,148443],{"class":213},[203,148748,148055],{"class":318},[203,148750,51495],{"class":213},[203,148752,148753],{"class":318},"\"2024-10-05\"",[203,148755,12525],{"class":213},[203,148757,84142],{"class":318},[203,148759,51495],{"class":213},[203,148761,148762],{"class":262},"2600",[203,148764,5019],{"class":213},[203,148766,148767],{"class":205,"line":1419},[203,148768,33304],{"class":213},[203,148770,148771],{"class":205,"line":1701},[203,148772,2489],{"emptyLinePlaceholder":131},[203,148774,148775,148777,148779,148782,148784,148786,148788,148790,148792],{"class":205,"line":1706},[203,148776,147858],{"class":213},[203,148778,259],{"class":209},[203,148780,148781],{"class":213}," [item[",[203,148783,148055],{"class":318},[203,148785,4532],{"class":213},[203,148787,3114],{"class":209},[203,148789,148267],{"class":213},[203,148791,26101],{"class":209},[203,148793,148794],{"class":213}," sales]\n",[203,148796,148797,148800,148802,148804,148806,148808,148810,148812,148814],{"class":205,"line":1712},[203,148798,148799],{"class":213},"amounts ",[203,148801,259],{"class":209},[203,148803,148781],{"class":213},[203,148805,84142],{"class":318},[203,148807,4532],{"class":213},[203,148809,3114],{"class":209},[203,148811,148267],{"class":213},[203,148813,26101],{"class":209},[203,148815,148794],{"class":213},[203,148817,148818],{"class":205,"line":1717},[203,148819,2489],{"emptyLinePlaceholder":131},[203,148821,148822,148824,148826],{"class":205,"line":1731},[203,148823,147310],{"class":213},[203,148825,259],{"class":209},[203,148827,147315],{"class":213},[203,148829,148830],{"class":205,"line":1736},[203,148831,147899],{"class":213},[203,148833,148834],{"class":205,"line":1742},[203,148835,147707],{"class":213},[203,148837,148838,148840,148842,148844],{"class":205,"line":1763},[203,148839,147712],{"class":5306},[203,148841,259],{"class":209},[203,148843,147353],{"class":318},[203,148845,31524],{"class":213},[203,148847,148848,148850,148852],{"class":205,"line":1768},[203,148849,147723],{"class":5306},[203,148851,259],{"class":209},[203,148853,148854],{"class":213},"amounts,\n",[203,148856,148857,148859,148861,148863],{"class":205,"line":1782},[203,148858,147752],{"class":5306},[203,148860,259],{"class":209},[203,148862,31534],{"class":262},[203,148864,31524],{"class":213},[203,148866,148867,148869,148871,148873,148875,148877,148879],{"class":205,"line":1787},[203,148868,147763],{"class":5306},[203,148870,259],{"class":209},[203,148872,147768],{"class":213},[203,148874,147771],{"class":5306},[203,148876,259],{"class":209},[203,148878,31534],{"class":262},[203,148880,38105],{"class":213},[203,148882,148883],{"class":205,"line":1816},[203,148884,220],{"class":213},[203,148886,148887],{"class":205,"line":1821},[203,148888,147526],{"class":213},[203,148890,148891,148893,148895,148897,148899,148901,148904],{"class":205,"line":1838},[203,148892,147531],{"class":5306},[203,148894,259],{"class":209},[203,148896,147536],{"class":213},[203,148898,51465],{"class":5306},[203,148900,259],{"class":209},[203,148902,148903],{"class":318},"\"每日销售额\"",[203,148905,38105],{"class":213},[203,148907,148908,148910,148912,148914,148916,148918,148920],{"class":205,"line":1843},[203,148909,147550],{"class":5306},[203,148911,259],{"class":209},[203,148913,147555],{"class":213},[203,148915,79868],{"class":5306},[203,148917,259],{"class":209},[203,148919,147562],{"class":318},[203,148921,38105],{"class":213},[203,148923,148924,148926,148928,148930,148932,148934,148936],{"class":205,"line":1848},[203,148925,147569],{"class":5306},[203,148927,259],{"class":209},[203,148929,147555],{"class":213},[203,148931,79868],{"class":5306},[203,148933,259],{"class":209},[203,148935,147580],{"class":318},[203,148937,38105],{"class":213},[203,148939,148940,148942,148944,148946,148948,148950,148952],{"class":205,"line":1853},[203,148941,147587],{"class":5306},[203,148943,259],{"class":209},[203,148945,147592],{"class":213},[203,148947,147595],{"class":5306},[203,148949,259],{"class":209},[203,148951,147600],{"class":318},[203,148953,38105],{"class":213},[203,148955,148956,148959,148961],{"class":205,"line":1867},[203,148957,148958],{"class":5306},"    datazoom_opts",[203,148960,259],{"class":209},[203,148962,148963],{"class":213},"[opts.DataZoomOpts()],\n",[203,148965,148966],{"class":205,"line":1872},[203,148967,220],{"class":213},[203,148969,148970,148972,148975],{"class":205,"line":2666},[203,148971,147382],{"class":213},[203,148973,148974],{"class":318},"\"daily_sales.html\"",[203,148976,220],{"class":213},[19,148978,148979,148982],{},[200,148980,148981],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,148984,148986],{"id":148985},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,148988,148989],{},"如果数据结构如下：",[194,148991,148993],{"className":30436,"code":148992,"language":30438,"meta":27,"style":27},"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",[200,148994,148995,149003,149011,149033,149054,149059,149066,149086,149106,149110],{"__ignoreMap":27},[203,148996,148997,148999,149001],{"class":205,"line":206},[203,148998,101716],{"class":213},[203,149000,259],{"class":209},[203,149002,15662],{"class":213},[203,149004,149005,149008],{"class":205,"line":124},[203,149006,149007],{"class":318},"    \"北京\"",[203,149009,149010],{"class":213},": [\n",[203,149012,149013,149015,149017,149019,149022,149024,149027,149029,149031],{"class":205,"line":1269},[203,149014,5006],{"class":213},[203,149016,148055],{"class":318},[203,149018,51495],{"class":213},[203,149020,149021],{"class":318},"\"2024-01-01\"",[203,149023,12525],{"class":213},[203,149025,149026],{"class":318},"\"confirm\"",[203,149028,51495],{"class":213},[203,149030,660],{"class":262},[203,149032,5019],{"class":213},[203,149034,149035,149037,149039,149041,149044,149046,149048,149050,149052],{"class":205,"line":1284},[203,149036,5006],{"class":213},[203,149038,148055],{"class":318},[203,149040,51495],{"class":213},[203,149042,149043],{"class":318},"\"2024-01-02\"",[203,149045,12525],{"class":213},[203,149047,149026],{"class":318},[203,149049,51495],{"class":213},[203,149051,712],{"class":262},[203,149053,5019],{"class":213},[203,149055,149056],{"class":205,"line":1290},[203,149057,149058],{"class":213},"    ],\n",[203,149060,149061,149064],{"class":205,"line":1304},[203,149062,149063],{"class":318},"    \"上海\"",[203,149065,149010],{"class":213},[203,149067,149068,149070,149072,149074,149076,149078,149080,149082,149084],{"class":205,"line":1310},[203,149069,5006],{"class":213},[203,149071,148055],{"class":318},[203,149073,51495],{"class":213},[203,149075,149021],{"class":318},[203,149077,12525],{"class":213},[203,149079,149026],{"class":318},[203,149081,51495],{"class":213},[203,149083,609],{"class":262},[203,149085,5019],{"class":213},[203,149087,149088,149090,149092,149094,149096,149098,149100,149102,149104],{"class":205,"line":1401},[203,149089,5006],{"class":213},[203,149091,148055],{"class":318},[203,149093,51495],{"class":213},[203,149095,149043],{"class":318},[203,149097,12525],{"class":213},[203,149099,149026],{"class":318},[203,149101,51495],{"class":213},[203,149103,737],{"class":262},[203,149105,5019],{"class":213},[203,149107,149108],{"class":205,"line":1407},[203,149109,149058],{"class":213},[203,149111,149112],{"class":205,"line":1419},[203,149113,1654],{"class":213},[19,149115,149116],{},"绘制多地区趋势：",[194,149118,149120],{"className":30436,"code":149119,"language":30438,"meta":27,"style":27},"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",[200,149121,149122,149136,149146,149150,149175,149179,149187,149191,149195,149207,149229,149242,149246,149250,149267,149283,149287],{"__ignoreMap":27},[203,149123,149124,149126,149128,149130,149132,149134],{"class":205,"line":206},[203,149125,30795],{"class":209},[203,149127,147437],{"class":213},[203,149129,30450],{"class":209},[203,149131,147442],{"class":213},[203,149133,31441],{"class":209},[203,149135,147447],{"class":213},[203,149137,149138,149140,149142,149144],{"class":205,"line":124},[203,149139,30795],{"class":209},[203,149141,147296],{"class":213},[203,149143,30450],{"class":209},[203,149145,147301],{"class":213},[203,149147,149148],{"class":205,"line":1269},[203,149149,2489],{"emptyLinePlaceholder":131},[203,149151,149152,149154,149156,149158,149160,149162,149164,149166,149168,149171,149173],{"class":205,"line":1284},[203,149153,147858],{"class":213},[203,149155,259],{"class":209},[203,149157,148781],{"class":213},[203,149159,148055],{"class":318},[203,149161,4532],{"class":213},[203,149163,3114],{"class":209},[203,149165,148267],{"class":213},[203,149167,26101],{"class":209},[203,149169,149170],{"class":213}," data[",[203,149172,69327],{"class":318},[203,149174,77585],{"class":213},[203,149176,149177],{"class":205,"line":1290},[203,149178,2489],{"emptyLinePlaceholder":131},[203,149180,149181,149183,149185],{"class":205,"line":1304},[203,149182,147310],{"class":213},[203,149184,259],{"class":209},[203,149186,147315],{"class":213},[203,149188,149189],{"class":205,"line":1310},[203,149190,147899],{"class":213},[203,149192,149193],{"class":205,"line":1401},[203,149194,2489],{"emptyLinePlaceholder":131},[203,149196,149197,149199,149202,149204],{"class":205,"line":1407},[203,149198,3114],{"class":209},[203,149200,149201],{"class":213}," city, records ",[203,149203,26101],{"class":209},[203,149205,149206],{"class":213}," data.items():\n",[203,149208,149209,149212,149214,149216,149218,149220,149222,149224,149226],{"class":205,"line":1419},[203,149210,149211],{"class":213},"    values ",[203,149213,259],{"class":209},[203,149215,148781],{"class":213},[203,149217,149026],{"class":318},[203,149219,4532],{"class":213},[203,149221,3114],{"class":209},[203,149223,148267],{"class":213},[203,149225,26101],{"class":209},[203,149227,149228],{"class":213}," records]\n",[203,149230,149231,149234,149236,149238,149240],{"class":205,"line":1701},[203,149232,149233],{"class":213},"    line.add_yaxis(city, values, ",[203,149235,147803],{"class":5306},[203,149237,259],{"class":209},[203,149239,31534],{"class":262},[203,149241,220],{"class":213},[203,149243,149244],{"class":205,"line":1706},[203,149245,2489],{"emptyLinePlaceholder":131},[203,149247,149248],{"class":205,"line":1712},[203,149249,147526],{"class":213},[203,149251,149252,149254,149256,149258,149260,149262,149265],{"class":205,"line":1717},[203,149253,147531],{"class":5306},[203,149255,259],{"class":209},[203,149257,147536],{"class":213},[203,149259,51465],{"class":5306},[203,149261,259],{"class":209},[203,149263,149264],{"class":318},"\"多地区趋势图\"",[203,149266,38105],{"class":213},[203,149268,149269,149271,149273,149275,149277,149279,149281],{"class":205,"line":1731},[203,149270,147587],{"class":5306},[203,149272,259],{"class":209},[203,149274,147592],{"class":213},[203,149276,147595],{"class":5306},[203,149278,259],{"class":209},[203,149280,147600],{"class":318},[203,149282,38105],{"class":213},[203,149284,149285],{"class":205,"line":1736},[203,149286,220],{"class":213},[203,149288,149289,149291,149294],{"class":205,"line":1742},[203,149290,147382],{"class":213},[203,149292,149293],{"class":318},"\"trend.html\"",[203,149295,220],{"class":213},[19,149297,149298],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149300,149302],{"id":149301},"_1012-易错点","10.12 易错点",[157,149304,149305,149311,149317,149327,149333],{},[160,149306,149307,149310],{},[200,149308,149309],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[160,149312,149313,149316],{},[200,149314,149315],{},"render()"," 生成的是 HTML，不是图片。",[160,149318,149319,149320,149323,149324,28443],{},"JSON 字符串用 ",[200,149321,149322],{},"json.loads()","，JSON 文件用 ",[200,149325,149326],{},"json.load()",[160,149328,149329,149330,28443],{},"中文 JSON 保存时加 ",[200,149331,149332],{},"ensure_ascii=False",[160,149334,149335],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149337,149339],{"id":149338},"_1013-本章练习","10.13 本章练习",[157,149341,149342,149345,149348,149351,149354],{},[160,149343,149344],{},"安装 pyecharts 并生成第一个折线图。",[160,149346,149347],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[160,149349,149350],{},"绘制两条折线，对比线上和线下销售额。",[160,149352,149353],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[160,149355,149356],{},"对含有空值的销售数据进行清洗后再绘图。",[5216,149358,149359],{},"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":27,"searchDepth":124,"depth":124,"links":149361},[149362,149363,149364,149365,149366,149367,149368,149369,149370,149371,149372,149373,149374],{"id":146978,"depth":124,"text":146979},{"id":147053,"depth":124,"text":147054},{"id":147232,"depth":124,"text":147233},{"id":147283,"depth":124,"text":147284},{"id":147417,"depth":124,"text":147418},{"id":147693,"depth":124,"text":147694},{"id":147819,"depth":124,"text":147820},{"id":148030,"depth":124,"text":148031},{"id":148401,"depth":124,"text":148402},{"id":148613,"depth":124,"text":148614},{"id":148985,"depth":124,"text":148986},{"id":149301,"depth":124,"text":149302},{"id":149338,"depth":124,"text":149339},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146970,"description":23467},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149381,"title":149382,"body":149383,"description":23467,"extension":129,"meta":151743,"navigation":131,"path":151744,"seo":151745,"stem":151746,"__hash__":151747},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149384,"toc":151720},[149385,149388,149392,149395,149398,149474,149477,149568,149571,149575,149578,149622,149635,149639,149642,149709,149712,149716,149719,149803,149811,149815,149820,149961,149964,149975,149981,149987,150101,150105,150108,150111,150364,150367,150371,150374,150478,150481,150485,150636,150640,150647,150760,150764,150767,150873,150876,150880,150883,150914,150917,151022,151025,151029,151033,151043,151111,151115,151122,151186,151189,151193,151199,151295,151304,151308,151632,151641,151645,151673,151677,151717],[10,149386,149382],{"id":149387},"_11-面向对象基础",[14,149389,149391],{"id":149390},"_111-什么是面向对象","11.1 什么是面向对象",[19,149393,149394],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149396,149397],{},"面向过程：",[194,149399,149401],{"className":30436,"code":149400,"language":30438,"meta":27,"style":27},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[200,149402,149403,149412,149420,149424,149434,149465,149469],{"__ignoreMap":27},[203,149404,149405,149407,149409],{"class":205,"line":206},[203,149406,146594],{"class":213},[203,149408,259],{"class":209},[203,149410,149411],{"class":318}," \"小明\"\n",[203,149413,149414,149416,149418],{"class":205,"line":124},[203,149415,146604],{"class":213},[203,149417,259],{"class":209},[203,149419,146609],{"class":262},[203,149421,149422],{"class":205,"line":1269},[203,149423,2489],{"emptyLinePlaceholder":131},[203,149425,149426,149428,149431],{"class":205,"line":1284},[203,149427,32005],{"class":209},[203,149429,149430],{"class":2052}," introduce",[203,149432,149433],{"class":213},"(name, age):\n",[203,149435,149436,149438,149440,149442,149445,149447,149449,149451,149454,149456,149458,149460,149463],{"class":205,"line":1290},[203,149437,31357],{"class":262},[203,149439,214],{"class":213},[203,149441,266],{"class":209},[203,149443,149444],{"class":318},"\"我叫",[203,149446,1110],{"class":262},[203,149448,79868],{"class":213},[203,149450,1160],{"class":262},[203,149452,149453],{"class":318},"，今年",[203,149455,1110],{"class":262},[203,149457,70279],{"class":213},[203,149459,1160],{"class":262},[203,149461,149462],{"class":318},"岁\"",[203,149464,220],{"class":213},[203,149466,149467],{"class":205,"line":1304},[203,149468,2489],{"emptyLinePlaceholder":131},[203,149470,149471],{"class":205,"line":1310},[203,149472,149473],{"class":213},"introduce(name, age)\n",[19,149475,149476],{},"面向对象：",[194,149478,149480],{"className":30436,"code":149479,"language":30438,"meta":27,"style":27},"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",[200,149481,149482,149490,149498,149527,149531,149535,149545,149554,149563],{"__ignoreMap":27},[203,149483,149484,149486,149488],{"class":205,"line":206},[203,149485,14784],{"class":209},[203,149487,7988],{"class":2052},[203,149489,3828],{"class":213},[203,149491,149492,149494,149496],{"class":205,"line":124},[203,149493,30859],{"class":209},[203,149495,149430],{"class":2052},[203,149497,30865],{"class":213},[203,149499,149500,149502,149504,149506,149508,149511,149513,149515,149517,149519,149521,149523,149525],{"class":205,"line":1269},[203,149501,32509],{"class":262},[203,149503,214],{"class":213},[203,149505,266],{"class":209},[203,149507,149444],{"class":318},[203,149509,149510],{"class":262},"{self",[203,149512,80359],{"class":213},[203,149514,1160],{"class":262},[203,149516,149453],{"class":318},[203,149518,149510],{"class":262},[203,149520,80371],{"class":213},[203,149522,1160],{"class":262},[203,149524,149462],{"class":318},[203,149526,220],{"class":213},[203,149528,149529],{"class":205,"line":1284},[203,149530,2489],{"emptyLinePlaceholder":131},[203,149532,149533],{"class":205,"line":1290},[203,149534,2489],{"emptyLinePlaceholder":131},[203,149536,149537,149540,149542],{"class":205,"line":1304},[203,149538,149539],{"class":213},"student ",[203,149541,259],{"class":209},[203,149543,149544],{"class":213}," Student()\n",[203,149546,149547,149550,149552],{"class":205,"line":1310},[203,149548,149549],{"class":213},"student.name ",[203,149551,259],{"class":209},[203,149553,149411],{"class":318},[203,149555,149556,149559,149561],{"class":205,"line":1401},[203,149557,149558],{"class":213},"student.age ",[203,149560,259],{"class":209},[203,149562,146609],{"class":262},[203,149564,149565],{"class":205,"line":1407},[203,149566,149567],{"class":213},"student.introduce()\n",[19,149569,149570],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149572,149574],{"id":149573},"_112-类和对象","11.2 类和对象",[19,149576,149577],{},"类是模板，对象是根据模板创建出来的具体实例。",[194,149579,149581],{"className":30436,"code":149580,"language":30438,"meta":27,"style":27},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[200,149582,149583,149591,149596,149600,149604,149613],{"__ignoreMap":27},[203,149584,149585,149587,149589],{"class":205,"line":206},[203,149586,14784],{"class":209},[203,149588,7988],{"class":2052},[203,149590,3828],{"class":213},[203,149592,149593],{"class":205,"line":124},[203,149594,149595],{"class":209},"    pass\n",[203,149597,149598],{"class":205,"line":1269},[203,149599,2489],{"emptyLinePlaceholder":131},[203,149601,149602],{"class":205,"line":1284},[203,149603,2489],{"emptyLinePlaceholder":131},[203,149605,149606,149609,149611],{"class":205,"line":1290},[203,149607,149608],{"class":213},"student1 ",[203,149610,259],{"class":209},[203,149612,149544],{"class":213},[203,149614,149615,149618,149620],{"class":205,"line":1304},[203,149616,149617],{"class":213},"student2 ",[203,149619,259],{"class":209},[203,149621,149544],{"class":213},[19,149623,149624,149627,149628,101076,149631,149634],{},[200,149625,149626],{},"Student"," 是类，",[200,149629,149630],{},"student1",[200,149632,149633],{},"student2"," 是对象。",[14,149636,149638],{"id":149637},"_113-属性","11.3 属性",[19,149640,149641],{},"属性是对象保存的数据。",[194,149643,149645],{"className":30436,"code":149644,"language":30438,"meta":27,"style":27},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[200,149646,149647,149655,149659,149663,149667,149675,149683,149691,149695,149702],{"__ignoreMap":27},[203,149648,149649,149651,149653],{"class":205,"line":206},[203,149650,14784],{"class":209},[203,149652,7988],{"class":2052},[203,149654,3828],{"class":213},[203,149656,149657],{"class":205,"line":124},[203,149658,149595],{"class":209},[203,149660,149661],{"class":205,"line":1269},[203,149662,2489],{"emptyLinePlaceholder":131},[203,149664,149665],{"class":205,"line":1284},[203,149666,2489],{"emptyLinePlaceholder":131},[203,149668,149669,149671,149673],{"class":205,"line":1290},[203,149670,149539],{"class":213},[203,149672,259],{"class":209},[203,149674,149544],{"class":213},[203,149676,149677,149679,149681],{"class":205,"line":1304},[203,149678,149549],{"class":213},[203,149680,259],{"class":209},[203,149682,149411],{"class":318},[203,149684,149685,149687,149689],{"class":205,"line":1310},[203,149686,149558],{"class":213},[203,149688,259],{"class":209},[203,149690,146609],{"class":262},[203,149692,149693],{"class":205,"line":1401},[203,149694,2489],{"emptyLinePlaceholder":131},[203,149696,149697,149699],{"class":205,"line":1407},[203,149698,30473],{"class":262},[203,149700,149701],{"class":213},"(student.name)\n",[203,149703,149704,149706],{"class":205,"line":1419},[203,149705,30473],{"class":262},[203,149707,149708],{"class":213},"(student.age)\n",[19,149710,149711],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,149713,149715],{"id":149714},"_114-方法","11.4 方法",[19,149717,149718],{},"类中的函数叫方法。",[194,149720,149721],{"className":30436,"code":149479,"language":30438,"meta":27,"style":27},[200,149722,149723,149731,149739,149767,149771,149775,149783,149791,149799],{"__ignoreMap":27},[203,149724,149725,149727,149729],{"class":205,"line":206},[203,149726,14784],{"class":209},[203,149728,7988],{"class":2052},[203,149730,3828],{"class":213},[203,149732,149733,149735,149737],{"class":205,"line":124},[203,149734,30859],{"class":209},[203,149736,149430],{"class":2052},[203,149738,30865],{"class":213},[203,149740,149741,149743,149745,149747,149749,149751,149753,149755,149757,149759,149761,149763,149765],{"class":205,"line":1269},[203,149742,32509],{"class":262},[203,149744,214],{"class":213},[203,149746,266],{"class":209},[203,149748,149444],{"class":318},[203,149750,149510],{"class":262},[203,149752,80359],{"class":213},[203,149754,1160],{"class":262},[203,149756,149453],{"class":318},[203,149758,149510],{"class":262},[203,149760,80371],{"class":213},[203,149762,1160],{"class":262},[203,149764,149462],{"class":318},[203,149766,220],{"class":213},[203,149768,149769],{"class":205,"line":1284},[203,149770,2489],{"emptyLinePlaceholder":131},[203,149772,149773],{"class":205,"line":1290},[203,149774,2489],{"emptyLinePlaceholder":131},[203,149776,149777,149779,149781],{"class":205,"line":1304},[203,149778,149539],{"class":213},[203,149780,259],{"class":209},[203,149782,149544],{"class":213},[203,149784,149785,149787,149789],{"class":205,"line":1310},[203,149786,149549],{"class":213},[203,149788,259],{"class":209},[203,149790,149411],{"class":318},[203,149792,149793,149795,149797],{"class":205,"line":1401},[203,149794,149558],{"class":213},[203,149796,259],{"class":209},[203,149798,146609],{"class":262},[203,149800,149801],{"class":205,"line":1407},[203,149802,149567],{"class":213},[19,149804,149805,149807,149808,149810],{},[200,149806,30881],{}," 表示当前对象。调用方法时不需要手动传入 ",[200,149809,30881],{},"，Python 会自动传。",[14,149812,149814],{"id":149813},"_115-构造方法__init__","11.5 构造方法__init__",[19,149816,149817,149819],{},[200,149818,30887],{}," 在对象创建时自动执行，用于初始化属性。",[194,149821,149823],{"className":30436,"code":149822,"language":30438,"meta":27,"style":27},"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",[200,149824,149825,149833,149842,149854,149866,149877,149881,149889,149927,149931,149935,149957],{"__ignoreMap":27},[203,149826,149827,149829,149831],{"class":205,"line":206},[203,149828,14784],{"class":209},[203,149830,7988],{"class":2052},[203,149832,3828],{"class":213},[203,149834,149835,149837,149839],{"class":205,"line":124},[203,149836,30859],{"class":209},[203,149838,30862],{"class":262},[203,149840,149841],{"class":213},"(self, name, age, score):\n",[203,149843,149844,149846,149849,149851],{"class":205,"line":1269},[203,149845,30903],{"class":262},[203,149847,149848],{"class":213},".name ",[203,149850,259],{"class":209},[203,149852,149853],{"class":213}," name\n",[203,149855,149856,149858,149861,149863],{"class":205,"line":1284},[203,149857,30903],{"class":262},[203,149859,149860],{"class":213},".age ",[203,149862,259],{"class":209},[203,149864,149865],{"class":213}," age\n",[203,149867,149868,149870,149873,149875],{"class":205,"line":1290},[203,149869,30903],{"class":262},[203,149871,149872],{"class":213},".score ",[203,149874,259],{"class":209},[203,149876,1668],{"class":213},[203,149878,149879],{"class":205,"line":1304},[203,149880,2489],{"emptyLinePlaceholder":131},[203,149882,149883,149885,149887],{"class":205,"line":1310},[203,149884,30859],{"class":209},[203,149886,149430],{"class":2052},[203,149888,30865],{"class":213},[203,149890,149891,149893,149895,149897,149899,149901,149903,149905,149907,149909,149911,149913,149916,149918,149921,149923,149925],{"class":205,"line":1401},[203,149892,32509],{"class":262},[203,149894,214],{"class":213},[203,149896,266],{"class":209},[203,149898,149444],{"class":318},[203,149900,149510],{"class":262},[203,149902,80359],{"class":213},[203,149904,1160],{"class":262},[203,149906,149453],{"class":318},[203,149908,149510],{"class":262},[203,149910,80371],{"class":213},[203,149912,1160],{"class":262},[203,149914,149915],{"class":318},"岁，成绩",[203,149917,149510],{"class":262},[203,149919,149920],{"class":213},".score",[203,149922,1160],{"class":262},[203,149924,465],{"class":318},[203,149926,220],{"class":213},[203,149928,149929],{"class":205,"line":1407},[203,149930,2489],{"emptyLinePlaceholder":131},[203,149932,149933],{"class":205,"line":1419},[203,149934,2489],{"emptyLinePlaceholder":131},[203,149936,149937,149939,149941,149944,149947,149949,149951,149953,149955],{"class":205,"line":1701},[203,149938,149539],{"class":213},[203,149940,259],{"class":209},[203,149942,149943],{"class":213}," Student(",[203,149945,149946],{"class":318},"\"小明\"",[203,149948,12525],{"class":213},[203,149950,864],{"class":262},[203,149952,12525],{"class":213},[203,149954,1203],{"class":262},[203,149956,220],{"class":213},[203,149958,149959],{"class":205,"line":1706},[203,149960,149567],{"class":213},[19,149962,149963],{},"构造方法的好处：",[157,149965,149966,149969,149972],{},[160,149967,149968],{},"创建对象时必须提供必要数据。",[160,149970,149971],{},"属性初始化集中，不容易漏。",[160,149973,149974],{},"对象状态更完整。",[14,149976,149978,149979],{"id":149977},"_116-str","11.6 ",[363,149980,1389],{},[19,149982,149983,149984,28443],{},"直接打印对象时，默认输出不直观。可以定义 ",[200,149985,149986],{},"__str__",[194,149988,149990],{"className":30436,"code":149989,"language":30438,"meta":27,"style":27},"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",[200,149991,149992,150000,150009,150019,150029,150033,150042,150070,150074,150078,150094],{"__ignoreMap":27},[203,149993,149994,149996,149998],{"class":205,"line":206},[203,149995,14784],{"class":209},[203,149997,7988],{"class":2052},[203,149999,3828],{"class":213},[203,150001,150002,150004,150006],{"class":205,"line":124},[203,150003,30859],{"class":209},[203,150005,30862],{"class":262},[203,150007,150008],{"class":213},"(self, name, age):\n",[203,150010,150011,150013,150015,150017],{"class":205,"line":1269},[203,150012,30903],{"class":262},[203,150014,149848],{"class":213},[203,150016,259],{"class":209},[203,150018,149853],{"class":213},[203,150020,150021,150023,150025,150027],{"class":205,"line":1284},[203,150022,30903],{"class":262},[203,150024,149860],{"class":213},[203,150026,259],{"class":209},[203,150028,149865],{"class":213},[203,150030,150031],{"class":205,"line":1290},[203,150032,2489],{"emptyLinePlaceholder":131},[203,150034,150035,150037,150040],{"class":205,"line":1304},[203,150036,30859],{"class":209},[203,150038,150039],{"class":262}," __str__",[203,150041,30865],{"class":213},[203,150043,150044,150046,150049,150052,150054,150056,150058,150061,150063,150065,150067],{"class":205,"line":1310},[203,150045,14842],{"class":209},[203,150047,150048],{"class":209}," f",[203,150050,150051],{"class":318},"\"Student(name=",[203,150053,149510],{"class":262},[203,150055,80359],{"class":213},[203,150057,1160],{"class":262},[203,150059,150060],{"class":318},", age=",[203,150062,149510],{"class":262},[203,150064,80371],{"class":213},[203,150066,1160],{"class":262},[203,150068,150069],{"class":318},")\"\n",[203,150071,150072],{"class":205,"line":1401},[203,150073,2489],{"emptyLinePlaceholder":131},[203,150075,150076],{"class":205,"line":1407},[203,150077,2489],{"emptyLinePlaceholder":131},[203,150079,150080,150082,150084,150086,150088,150090,150092],{"class":205,"line":1419},[203,150081,149539],{"class":213},[203,150083,259],{"class":209},[203,150085,149943],{"class":213},[203,150087,149946],{"class":318},[203,150089,12525],{"class":213},[203,150091,864],{"class":262},[203,150093,220],{"class":213},[203,150095,150096,150098],{"class":205,"line":1701},[203,150097,30473],{"class":262},[203,150099,150100],{"class":213},"(student)\n",[14,150102,150104],{"id":150103},"_117-封装","11.7 封装",[19,150106,150107],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150109,150110],{},"Python 中以双下划线开头的属性通常视为私有属性。",[194,150112,150114],{"className":30436,"code":150113,"language":30438,"meta":27,"style":27},"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",[200,150115,150116,150125,150134,150146,150158,150162,150171,150180,150184,150194,150207,150218,150223,150234,150238,150247,150259,150270,150274,150287,150298,150302,150313,150317,150321,150339,150348,150357],{"__ignoreMap":27},[203,150117,150118,150120,150123],{"class":205,"line":206},[203,150119,14784],{"class":209},[203,150121,150122],{"class":2052}," Account",[203,150124,3828],{"class":213},[203,150126,150127,150129,150131],{"class":205,"line":124},[203,150128,30859],{"class":209},[203,150130,30862],{"class":262},[203,150132,150133],{"class":213},"(self, owner, balance):\n",[203,150135,150136,150138,150141,150143],{"class":205,"line":1269},[203,150137,30903],{"class":262},[203,150139,150140],{"class":213},".owner ",[203,150142,259],{"class":209},[203,150144,150145],{"class":213}," owner\n",[203,150147,150148,150150,150153,150155],{"class":205,"line":1284},[203,150149,30903],{"class":262},[203,150151,150152],{"class":213},".__balance ",[203,150154,259],{"class":209},[203,150156,150157],{"class":213}," balance\n",[203,150159,150160],{"class":205,"line":1290},[203,150161,2489],{"emptyLinePlaceholder":131},[203,150163,150164,150166,150169],{"class":205,"line":1304},[203,150165,30859],{"class":209},[203,150167,150168],{"class":2052}," get_balance",[203,150170,30865],{"class":213},[203,150172,150173,150175,150177],{"class":205,"line":1310},[203,150174,14842],{"class":209},[203,150176,38931],{"class":262},[203,150178,150179],{"class":213},".__balance\n",[203,150181,150182],{"class":205,"line":1401},[203,150183,2489],{"emptyLinePlaceholder":131},[203,150185,150186,150188,150191],{"class":205,"line":1407},[203,150187,30859],{"class":209},[203,150189,150190],{"class":2052}," deposit",[203,150192,150193],{"class":213},"(self, money):\n",[203,150195,150196,150198,150201,150203,150205],{"class":205,"line":1419},[203,150197,2586],{"class":209},[203,150199,150200],{"class":213}," money ",[203,150202,1677],{"class":209},[203,150204,4182],{"class":262},[203,150206,3828],{"class":213},[203,150208,150209,150211,150213,150216],{"class":205,"line":1701},[203,150210,34708],{"class":262},[203,150212,214],{"class":213},[203,150214,150215],{"class":318},"\"存款金额必须大于0\"",[203,150217,220],{"class":213},[203,150219,150220],{"class":205,"line":1706},[203,150221,150222],{"class":209},"            return\n",[203,150224,150225,150227,150229,150231],{"class":205,"line":1712},[203,150226,30903],{"class":262},[203,150228,150152],{"class":213},[203,150230,9567],{"class":209},[203,150232,150233],{"class":213}," money\n",[203,150235,150236],{"class":205,"line":1717},[203,150237,2489],{"emptyLinePlaceholder":131},[203,150239,150240,150242,150245],{"class":205,"line":1731},[203,150241,30859],{"class":209},[203,150243,150244],{"class":2052}," withdraw",[203,150246,150193],{"class":213},[203,150248,150249,150251,150253,150255,150257],{"class":205,"line":1736},[203,150250,2586],{"class":209},[203,150252,150200],{"class":213},[203,150254,1677],{"class":209},[203,150256,4182],{"class":262},[203,150258,3828],{"class":213},[203,150260,150261,150263,150265,150268],{"class":205,"line":1742},[203,150262,34708],{"class":262},[203,150264,214],{"class":213},[203,150266,150267],{"class":318},"\"取款金额必须大于0\"",[203,150269,220],{"class":213},[203,150271,150272],{"class":205,"line":1763},[203,150273,150222],{"class":209},[203,150275,150276,150278,150280,150282,150284],{"class":205,"line":1768},[203,150277,2586],{"class":209},[203,150279,150200],{"class":213},[203,150281,1174],{"class":209},[203,150283,38931],{"class":262},[203,150285,150286],{"class":213},".__balance:\n",[203,150288,150289,150291,150293,150296],{"class":205,"line":1782},[203,150290,34708],{"class":262},[203,150292,214],{"class":213},[203,150294,150295],{"class":318},"\"余额不足\"",[203,150297,220],{"class":213},[203,150299,150300],{"class":205,"line":1787},[203,150301,150222],{"class":209},[203,150303,150304,150306,150308,150311],{"class":205,"line":1816},[203,150305,30903],{"class":262},[203,150307,150152],{"class":213},[203,150309,150310],{"class":209},"-=",[203,150312,150233],{"class":213},[203,150314,150315],{"class":205,"line":1821},[203,150316,2489],{"emptyLinePlaceholder":131},[203,150318,150319],{"class":205,"line":1838},[203,150320,2489],{"emptyLinePlaceholder":131},[203,150322,150323,150326,150328,150331,150333,150335,150337],{"class":205,"line":1843},[203,150324,150325],{"class":213},"account ",[203,150327,259],{"class":209},[203,150329,150330],{"class":213}," Account(",[203,150332,149946],{"class":318},[203,150334,12525],{"class":213},[203,150336,6500],{"class":262},[203,150338,220],{"class":213},[203,150340,150341,150344,150346],{"class":205,"line":1848},[203,150342,150343],{"class":213},"account.deposit(",[203,150345,1811],{"class":262},[203,150347,220],{"class":213},[203,150349,150350,150353,150355],{"class":205,"line":1853},[203,150351,150352],{"class":213},"account.withdraw(",[203,150354,525],{"class":262},[203,150356,220],{"class":213},[203,150358,150359,150361],{"class":205,"line":1867},[203,150360,30473],{"class":262},[203,150362,150363],{"class":213},"(account.get_balance())\n",[19,150365,150366],{},"封装的意义是避免外部随意修改内部状态。",[14,150368,150370],{"id":150369},"_118-继承","11.8 继承",[19,150372,150373],{},"继承可以让子类复用父类的属性和方法。",[194,150375,150377],{"className":30436,"code":150376,"language":30438,"meta":27,"style":27},"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",[200,150378,150379,150388,150397,150408,150412,150416,150430,150439,150450,150454,150458,150468,150473],{"__ignoreMap":27},[203,150380,150381,150383,150386],{"class":205,"line":206},[203,150382,14784],{"class":209},[203,150384,150385],{"class":2052}," Animal",[203,150387,3828],{"class":213},[203,150389,150390,150392,150395],{"class":205,"line":124},[203,150391,30859],{"class":209},[203,150393,150394],{"class":2052}," eat",[203,150396,30865],{"class":213},[203,150398,150399,150401,150403,150406],{"class":205,"line":1269},[203,150400,32509],{"class":262},[203,150402,214],{"class":213},[203,150404,150405],{"class":318},"\"吃东西\"",[203,150407,220],{"class":213},[203,150409,150410],{"class":205,"line":1284},[203,150411,2489],{"emptyLinePlaceholder":131},[203,150413,150414],{"class":205,"line":1290},[203,150415,2489],{"emptyLinePlaceholder":131},[203,150417,150418,150420,150423,150425,150428],{"class":205,"line":1304},[203,150419,14784],{"class":209},[203,150421,150422],{"class":2052}," Dog",[203,150424,214],{"class":213},[203,150426,150427],{"class":2052},"Animal",[203,150429,30844],{"class":213},[203,150431,150432,150434,150437],{"class":205,"line":1310},[203,150433,30859],{"class":209},[203,150435,150436],{"class":2052}," bark",[203,150438,30865],{"class":213},[203,150440,150441,150443,150445,150448],{"class":205,"line":1401},[203,150442,32509],{"class":262},[203,150444,214],{"class":213},[203,150446,150447],{"class":318},"\"汪汪\"",[203,150449,220],{"class":213},[203,150451,150452],{"class":205,"line":1407},[203,150453,2489],{"emptyLinePlaceholder":131},[203,150455,150456],{"class":205,"line":1419},[203,150457,2489],{"emptyLinePlaceholder":131},[203,150459,150460,150463,150465],{"class":205,"line":1701},[203,150461,150462],{"class":213},"dog ",[203,150464,259],{"class":209},[203,150466,150467],{"class":213}," Dog()\n",[203,150469,150470],{"class":205,"line":1706},[203,150471,150472],{"class":213},"dog.eat()\n",[203,150474,150475],{"class":205,"line":1712},[203,150476,150477],{"class":213},"dog.bark()\n",[19,150479,150480],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150482,150484],{"id":150483},"_119-方法重写","11.9 方法重写",[194,150486,150488],{"className":30436,"code":150487,"language":30438,"meta":27,"style":27},"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",[200,150489,150490,150498,150507,150518,150522,150526,150538,150546,150556,150560,150564,150577,150585,150596,150600,150604,150612,150622,150626,150631],{"__ignoreMap":27},[203,150491,150492,150494,150496],{"class":205,"line":206},[203,150493,14784],{"class":209},[203,150495,150385],{"class":2052},[203,150497,3828],{"class":213},[203,150499,150500,150502,150505],{"class":205,"line":124},[203,150501,30859],{"class":209},[203,150503,150504],{"class":2052}," speak",[203,150506,30865],{"class":213},[203,150508,150509,150511,150513,150516],{"class":205,"line":1269},[203,150510,32509],{"class":262},[203,150512,214],{"class":213},[203,150514,150515],{"class":318},"\"动物叫\"",[203,150517,220],{"class":213},[203,150519,150520],{"class":205,"line":1284},[203,150521,2489],{"emptyLinePlaceholder":131},[203,150523,150524],{"class":205,"line":1290},[203,150525,2489],{"emptyLinePlaceholder":131},[203,150527,150528,150530,150532,150534,150536],{"class":205,"line":1304},[203,150529,14784],{"class":209},[203,150531,150422],{"class":2052},[203,150533,214],{"class":213},[203,150535,150427],{"class":2052},[203,150537,30844],{"class":213},[203,150539,150540,150542,150544],{"class":205,"line":1310},[203,150541,30859],{"class":209},[203,150543,150504],{"class":2052},[203,150545,30865],{"class":213},[203,150547,150548,150550,150552,150554],{"class":205,"line":1401},[203,150549,32509],{"class":262},[203,150551,214],{"class":213},[203,150553,150447],{"class":318},[203,150555,220],{"class":213},[203,150557,150558],{"class":205,"line":1407},[203,150559,2489],{"emptyLinePlaceholder":131},[203,150561,150562],{"class":205,"line":1419},[203,150563,2489],{"emptyLinePlaceholder":131},[203,150565,150566,150568,150571,150573,150575],{"class":205,"line":1701},[203,150567,14784],{"class":209},[203,150569,150570],{"class":2052}," Cat",[203,150572,214],{"class":213},[203,150574,150427],{"class":2052},[203,150576,30844],{"class":213},[203,150578,150579,150581,150583],{"class":205,"line":1706},[203,150580,30859],{"class":209},[203,150582,150504],{"class":2052},[203,150584,30865],{"class":213},[203,150586,150587,150589,150591,150594],{"class":205,"line":1712},[203,150588,32509],{"class":262},[203,150590,214],{"class":213},[203,150592,150593],{"class":318},"\"喵喵\"",[203,150595,220],{"class":213},[203,150597,150598],{"class":205,"line":1717},[203,150599,2489],{"emptyLinePlaceholder":131},[203,150601,150602],{"class":205,"line":1731},[203,150603,2489],{"emptyLinePlaceholder":131},[203,150605,150606,150608,150610],{"class":205,"line":1736},[203,150607,150462],{"class":213},[203,150609,259],{"class":209},[203,150611,150467],{"class":213},[203,150613,150614,150617,150619],{"class":205,"line":1742},[203,150615,150616],{"class":213},"cat ",[203,150618,259],{"class":209},[203,150620,150621],{"class":213}," Cat()\n",[203,150623,150624],{"class":205,"line":1763},[203,150625,2489],{"emptyLinePlaceholder":131},[203,150627,150628],{"class":205,"line":1768},[203,150629,150630],{"class":213},"dog.speak()\n",[203,150632,150633],{"class":205,"line":1782},[203,150634,150635],{"class":213},"cat.speak()\n",[14,150637,150639],{"id":150638},"_1110-super","11.10 super",[19,150641,150642,150643,150646],{},"子类可以通过 ",[200,150644,150645],{},"super()"," 调用父类方法。",[194,150648,150650],{"className":30436,"code":150649,"language":30438,"meta":27,"style":27},"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",[200,150651,150652,150660,150669,150679,150683,150687,150699,150708,150719,150729,150733,150737,150753],{"__ignoreMap":27},[203,150653,150654,150656,150658],{"class":205,"line":206},[203,150655,14784],{"class":209},[203,150657,15659],{"class":2052},[203,150659,3828],{"class":213},[203,150661,150662,150664,150666],{"class":205,"line":124},[203,150663,30859],{"class":209},[203,150665,30862],{"class":262},[203,150667,150668],{"class":213},"(self, name):\n",[203,150670,150671,150673,150675,150677],{"class":205,"line":1269},[203,150672,30903],{"class":262},[203,150674,149848],{"class":213},[203,150676,259],{"class":209},[203,150678,149853],{"class":213},[203,150680,150681],{"class":205,"line":1284},[203,150682,2489],{"emptyLinePlaceholder":131},[203,150684,150685],{"class":205,"line":1290},[203,150686,2489],{"emptyLinePlaceholder":131},[203,150688,150689,150691,150693,150695,150697],{"class":205,"line":1304},[203,150690,14784],{"class":209},[203,150692,7988],{"class":2052},[203,150694,214],{"class":213},[203,150696,19136],{"class":2052},[203,150698,30844],{"class":213},[203,150700,150701,150703,150705],{"class":205,"line":1310},[203,150702,30859],{"class":209},[203,150704,30862],{"class":262},[203,150706,150707],{"class":213},"(self, name, score):\n",[203,150709,150710,150712,150714,150716],{"class":205,"line":1401},[203,150711,30875],{"class":262},[203,150713,17351],{"class":213},[203,150715,30887],{"class":262},[203,150717,150718],{"class":213},"(name)\n",[203,150720,150721,150723,150725,150727],{"class":205,"line":1407},[203,150722,30903],{"class":262},[203,150724,149872],{"class":213},[203,150726,259],{"class":209},[203,150728,1668],{"class":213},[203,150730,150731],{"class":205,"line":1419},[203,150732,2489],{"emptyLinePlaceholder":131},[203,150734,150735],{"class":205,"line":1701},[203,150736,2489],{"emptyLinePlaceholder":131},[203,150738,150739,150741,150743,150745,150747,150749,150751],{"class":205,"line":1706},[203,150740,149539],{"class":213},[203,150742,259],{"class":209},[203,150744,149943],{"class":213},[203,150746,149946],{"class":318},[203,150748,12525],{"class":213},[203,150750,1203],{"class":262},[203,150752,220],{"class":213},[203,150754,150755,150757],{"class":205,"line":1712},[203,150756,30473],{"class":262},[203,150758,150759],{"class":213},"(student.name, student.score)\n",[14,150761,150763],{"id":150762},"_1111-多态","11.11 多态",[19,150765,150766],{},"多态指不同对象响应同一个方法，表现出不同结果。",[194,150768,150770],{"className":30436,"code":150769,"language":30438,"meta":27,"style":27},"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",[200,150771,150772,150780,150788,150798,150802,150806,150814,150822,150832,150836,150840,150850,150855,150859,150863,150868],{"__ignoreMap":27},[203,150773,150774,150776,150778],{"class":205,"line":206},[203,150775,14784],{"class":209},[203,150777,150422],{"class":2052},[203,150779,3828],{"class":213},[203,150781,150782,150784,150786],{"class":205,"line":124},[203,150783,30859],{"class":209},[203,150785,150504],{"class":2052},[203,150787,30865],{"class":213},[203,150789,150790,150792,150794,150796],{"class":205,"line":1269},[203,150791,32509],{"class":262},[203,150793,214],{"class":213},[203,150795,150447],{"class":318},[203,150797,220],{"class":213},[203,150799,150800],{"class":205,"line":1284},[203,150801,2489],{"emptyLinePlaceholder":131},[203,150803,150804],{"class":205,"line":1290},[203,150805,2489],{"emptyLinePlaceholder":131},[203,150807,150808,150810,150812],{"class":205,"line":1304},[203,150809,14784],{"class":209},[203,150811,150570],{"class":2052},[203,150813,3828],{"class":213},[203,150815,150816,150818,150820],{"class":205,"line":1310},[203,150817,30859],{"class":209},[203,150819,150504],{"class":2052},[203,150821,30865],{"class":213},[203,150823,150824,150826,150828,150830],{"class":205,"line":1401},[203,150825,32509],{"class":262},[203,150827,214],{"class":213},[203,150829,150593],{"class":318},[203,150831,220],{"class":213},[203,150833,150834],{"class":205,"line":1407},[203,150835,2489],{"emptyLinePlaceholder":131},[203,150837,150838],{"class":205,"line":1419},[203,150839,2489],{"emptyLinePlaceholder":131},[203,150841,150842,150844,150847],{"class":205,"line":1701},[203,150843,32005],{"class":209},[203,150845,150846],{"class":2052}," make_sound",[203,150848,150849],{"class":213},"(animal):\n",[203,150851,150852],{"class":205,"line":1706},[203,150853,150854],{"class":213},"    animal.speak()\n",[203,150856,150857],{"class":205,"line":1712},[203,150858,2489],{"emptyLinePlaceholder":131},[203,150860,150861],{"class":205,"line":1717},[203,150862,2489],{"emptyLinePlaceholder":131},[203,150864,150865],{"class":205,"line":1731},[203,150866,150867],{"class":213},"make_sound(Dog())\n",[203,150869,150870],{"class":205,"line":1736},[203,150871,150872],{"class":213},"make_sound(Cat())\n",[19,150874,150875],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,150877,150879],{"id":150878},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,150881,150882],{},"实例属性属于对象：",[194,150884,150886],{"className":30436,"code":150885,"language":30438,"meta":27,"style":27},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[200,150887,150888,150896,150904],{"__ignoreMap":27},[203,150889,150890,150892,150894],{"class":205,"line":206},[203,150891,14784],{"class":209},[203,150893,7988],{"class":2052},[203,150895,3828],{"class":213},[203,150897,150898,150900,150902],{"class":205,"line":124},[203,150899,30859],{"class":209},[203,150901,30862],{"class":262},[203,150903,150668],{"class":213},[203,150905,150906,150908,150910,150912],{"class":205,"line":1269},[203,150907,30903],{"class":262},[203,150909,149848],{"class":213},[203,150911,259],{"class":209},[203,150913,149853],{"class":213},[19,150915,150916],{},"类属性属于类，所有对象共享：",[194,150918,150920],{"className":30436,"code":150919,"language":30438,"meta":27,"style":27},"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",[200,150921,150922,150930,150940,150944,150952,150962,150966,150970,150983,150997,151001,151008,151015],{"__ignoreMap":27},[203,150923,150924,150926,150928],{"class":205,"line":206},[203,150925,14784],{"class":209},[203,150927,7988],{"class":2052},[203,150929,3828],{"class":213},[203,150931,150932,150935,150937],{"class":205,"line":124},[203,150933,150934],{"class":213},"    school ",[203,150936,259],{"class":209},[203,150938,150939],{"class":318}," \"黑马学校\"\n",[203,150941,150942],{"class":205,"line":1269},[203,150943,2489],{"emptyLinePlaceholder":131},[203,150945,150946,150948,150950],{"class":205,"line":1284},[203,150947,30859],{"class":209},[203,150949,30862],{"class":262},[203,150951,150668],{"class":213},[203,150953,150954,150956,150958,150960],{"class":205,"line":1290},[203,150955,30903],{"class":262},[203,150957,149848],{"class":213},[203,150959,259],{"class":209},[203,150961,149853],{"class":213},[203,150963,150964],{"class":205,"line":1304},[203,150965,2489],{"emptyLinePlaceholder":131},[203,150967,150968],{"class":205,"line":1310},[203,150969,2489],{"emptyLinePlaceholder":131},[203,150971,150972,150975,150977,150979,150981],{"class":205,"line":1401},[203,150973,150974],{"class":213},"s1 ",[203,150976,259],{"class":209},[203,150978,149943],{"class":213},[203,150980,149946],{"class":318},[203,150982,220],{"class":213},[203,150984,150985,150988,150990,150992,150995],{"class":205,"line":1407},[203,150986,150987],{"class":213},"s2 ",[203,150989,259],{"class":209},[203,150991,149943],{"class":213},[203,150993,150994],{"class":318},"\"小红\"",[203,150996,220],{"class":213},[203,150998,150999],{"class":205,"line":1419},[203,151000,2489],{"emptyLinePlaceholder":131},[203,151002,151003,151005],{"class":205,"line":1701},[203,151004,30473],{"class":262},[203,151006,151007],{"class":213},"(s1.school)\n",[203,151009,151010,151012],{"class":205,"line":1706},[203,151011,30473],{"class":262},[203,151013,151014],{"class":213},"(s2.school)\n",[203,151016,151017,151019],{"class":205,"line":1712},[203,151018,30473],{"class":262},[203,151020,151021],{"class":213},"(Student.school)\n",[19,151023,151024],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151026,151028],{"id":151027},"_1113-类方法和静态方法","11.13 类方法和静态方法",[174,151030,151032],{"id":151031},"_11131-类方法","11.13.1 类方法",[19,151034,151035,151036,151039,151040,28443],{},"类方法使用 ",[200,151037,151038],{},"@classmethod","，第一个参数通常是 ",[200,151041,151042],{},"cls",[194,151044,151046],{"className":30436,"code":151045,"language":30438,"meta":27,"style":27},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[200,151047,151048,151056,151064,151068,151076,151086,151096,151100,151104],{"__ignoreMap":27},[203,151049,151050,151052,151054],{"class":205,"line":206},[203,151051,14784],{"class":209},[203,151053,7988],{"class":2052},[203,151055,3828],{"class":213},[203,151057,151058,151060,151062],{"class":205,"line":124},[203,151059,150934],{"class":213},[203,151061,259],{"class":209},[203,151063,150939],{"class":318},[203,151065,151066],{"class":205,"line":1269},[203,151067,2489],{"emptyLinePlaceholder":131},[203,151069,151070,151073],{"class":205,"line":1284},[203,151071,151072],{"class":2052},"    @",[203,151074,151075],{"class":262},"classmethod\n",[203,151077,151078,151080,151083],{"class":205,"line":1290},[203,151079,30859],{"class":209},[203,151081,151082],{"class":2052}," get_school",[203,151084,151085],{"class":213},"(cls):\n",[203,151087,151088,151090,151093],{"class":205,"line":1304},[203,151089,14842],{"class":209},[203,151091,151092],{"class":262}," cls",[203,151094,151095],{"class":213},".school\n",[203,151097,151098],{"class":205,"line":1310},[203,151099,2489],{"emptyLinePlaceholder":131},[203,151101,151102],{"class":205,"line":1401},[203,151103,2489],{"emptyLinePlaceholder":131},[203,151105,151106,151108],{"class":205,"line":1407},[203,151107,30473],{"class":262},[203,151109,151110],{"class":213},"(Student.get_school())\n",[174,151112,151114],{"id":151113},"_11132-静态方法","11.13.2 静态方法",[19,151116,151117,151118,151121],{},"静态方法使用 ",[200,151119,151120],{},"@staticmethod","，不需要访问实例和类。",[194,151123,151125],{"className":30436,"code":151124,"language":30438,"meta":27,"style":27},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[200,151126,151127,151136,151143,151152,151163,151167,151171],{"__ignoreMap":27},[203,151128,151129,151131,151134],{"class":205,"line":206},[203,151130,14784],{"class":209},[203,151132,151133],{"class":2052}," MathUtils",[203,151135,3828],{"class":213},[203,151137,151138,151140],{"class":205,"line":124},[203,151139,151072],{"class":2052},[203,151141,151142],{"class":262},"staticmethod\n",[203,151144,151145,151147,151149],{"class":205,"line":1269},[203,151146,30859],{"class":209},[203,151148,5299],{"class":2052},[203,151150,151151],{"class":213},"(a, b):\n",[203,151153,151154,151156,151158,151160],{"class":205,"line":1284},[203,151155,14842],{"class":209},[203,151157,10959],{"class":213},[203,151159,695],{"class":209},[203,151161,151162],{"class":213}," b\n",[203,151164,151165],{"class":205,"line":1290},[203,151166,2489],{"emptyLinePlaceholder":131},[203,151168,151169],{"class":205,"line":1304},[203,151170,2489],{"emptyLinePlaceholder":131},[203,151172,151173,151175,151178,151180,151182,151184],{"class":205,"line":1310},[203,151174,30473],{"class":262},[203,151176,151177],{"class":213},"(MathUtils.add(",[203,151179,431],{"class":262},[203,151181,12525],{"class":213},[203,151183,291],{"class":262},[203,151185,30555],{"class":213},[19,151187,151188],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151190,151192],{"id":151191},"_1114-dataclass","11.14 dataclass",[19,151194,151195,151198],{},[200,151196,151197],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[194,151200,151202],{"className":30436,"code":151201,"language":30438,"meta":27,"style":27},"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",[200,151203,151204,151216,151220,151224,151229,151237,151245,151253,151261,151265,151269,151289],{"__ignoreMap":27},[203,151205,151206,151208,151211,151213],{"class":205,"line":206},[203,151207,30795],{"class":209},[203,151209,151210],{"class":213}," dataclasses ",[203,151212,30450],{"class":209},[203,151214,151215],{"class":213}," dataclass\n",[203,151217,151218],{"class":205,"line":124},[203,151219,2489],{"emptyLinePlaceholder":131},[203,151221,151222],{"class":205,"line":1269},[203,151223,2489],{"emptyLinePlaceholder":131},[203,151225,151226],{"class":205,"line":1284},[203,151227,151228],{"class":2052},"@dataclass\n",[203,151230,151231,151233,151235],{"class":205,"line":1290},[203,151232,14784],{"class":209},[203,151234,7988],{"class":2052},[203,151236,3828],{"class":213},[203,151238,151239,151242],{"class":205,"line":1304},[203,151240,151241],{"class":213},"    name: ",[203,151243,151244],{"class":262},"str\n",[203,151246,151247,151250],{"class":205,"line":1310},[203,151248,151249],{"class":213},"    age: ",[203,151251,151252],{"class":262},"int\n",[203,151254,151255,151258],{"class":205,"line":1401},[203,151256,151257],{"class":213},"    score: ",[203,151259,151260],{"class":262},"float\n",[203,151262,151263],{"class":205,"line":1407},[203,151264,2489],{"emptyLinePlaceholder":131},[203,151266,151267],{"class":205,"line":1419},[203,151268,2489],{"emptyLinePlaceholder":131},[203,151270,151271,151273,151275,151277,151279,151281,151283,151285,151287],{"class":205,"line":1701},[203,151272,149539],{"class":213},[203,151274,259],{"class":209},[203,151276,149943],{"class":213},[203,151278,149946],{"class":318},[203,151280,12525],{"class":213},[203,151282,864],{"class":262},[203,151284,12525],{"class":213},[203,151286,1203],{"class":262},[203,151288,220],{"class":213},[203,151290,151291,151293],{"class":205,"line":1706},[203,151292,30473],{"class":262},[203,151294,150100],{"class":213},[19,151296,151297,151298,426,151300,151303],{},"它会自动生成 ",[200,151299,30887],{},[200,151301,151302],{},"__repr__"," 等方法。适合数据模型类。",[14,151305,151307],{"id":151306},"_1115-小案例学生类","11.15 小案例：学生类",[194,151309,151311],{"className":30436,"code":151310,"language":30438,"meta":27,"style":27},"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",[200,151312,151313,151321,151330,151342,151352,151362,151372,151376,151385,151398,151402,151411,151417,151429,151441,151453,151465,151469,151473,151479,151489,151498,151508,151516,151524,151533,151537,151541,151549,151585,151589,151593,151618,151625],{"__ignoreMap":27},[203,151314,151315,151317,151319],{"class":205,"line":206},[203,151316,14784],{"class":209},[203,151318,7988],{"class":2052},[203,151320,3828],{"class":213},[203,151322,151323,151325,151327],{"class":205,"line":124},[203,151324,30859],{"class":209},[203,151326,30862],{"class":262},[203,151328,151329],{"class":213},"(self, student_id, name, age, score):\n",[203,151331,151332,151334,151337,151339],{"class":205,"line":1269},[203,151333,30903],{"class":262},[203,151335,151336],{"class":213},".student_id ",[203,151338,259],{"class":209},[203,151340,151341],{"class":213}," student_id\n",[203,151343,151344,151346,151348,151350],{"class":205,"line":1284},[203,151345,30903],{"class":262},[203,151347,149848],{"class":213},[203,151349,259],{"class":209},[203,151351,149853],{"class":213},[203,151353,151354,151356,151358,151360],{"class":205,"line":1290},[203,151355,30903],{"class":262},[203,151357,149860],{"class":213},[203,151359,259],{"class":209},[203,151361,149865],{"class":213},[203,151363,151364,151366,151368,151370],{"class":205,"line":1304},[203,151365,30903],{"class":262},[203,151367,149872],{"class":213},[203,151369,259],{"class":209},[203,151371,1668],{"class":213},[203,151373,151374],{"class":205,"line":1310},[203,151375,2489],{"emptyLinePlaceholder":131},[203,151377,151378,151380,151383],{"class":205,"line":1401},[203,151379,30859],{"class":209},[203,151381,151382],{"class":2052}," is_passed",[203,151384,30865],{"class":213},[203,151386,151387,151389,151391,151393,151395],{"class":205,"line":1407},[203,151388,14842],{"class":209},[203,151390,38931],{"class":262},[203,151392,149872],{"class":213},[203,151394,1799],{"class":209},[203,151396,151397],{"class":262}," 60\n",[203,151399,151400],{"class":205,"line":1419},[203,151401,2489],{"emptyLinePlaceholder":131},[203,151403,151404,151406,151409],{"class":205,"line":1701},[203,151405,30859],{"class":209},[203,151407,151408],{"class":2052}," to_dict",[203,151410,30865],{"class":213},[203,151412,151413,151415],{"class":205,"line":1706},[203,151414,14842],{"class":209},[203,151416,15662],{"class":213},[203,151418,151419,151422,151424,151426],{"class":205,"line":1712},[203,151420,151421],{"class":318},"            \"student_id\"",[203,151423,51495],{"class":213},[203,151425,30881],{"class":262},[203,151427,151428],{"class":213},".student_id,\n",[203,151430,151431,151434,151436,151438],{"class":205,"line":1717},[203,151432,151433],{"class":318},"            \"name\"",[203,151435,51495],{"class":213},[203,151437,30881],{"class":262},[203,151439,151440],{"class":213},".name,\n",[203,151442,151443,151446,151448,151450],{"class":205,"line":1731},[203,151444,151445],{"class":318},"            \"age\"",[203,151447,51495],{"class":213},[203,151449,30881],{"class":262},[203,151451,151452],{"class":213},".age,\n",[203,151454,151455,151458,151460,151462],{"class":205,"line":1736},[203,151456,151457],{"class":318},"            \"score\"",[203,151459,51495],{"class":213},[203,151461,30881],{"class":262},[203,151463,151464],{"class":213},".score,\n",[203,151466,151467],{"class":205,"line":1742},[203,151468,2618],{"class":213},[203,151470,151471],{"class":205,"line":1763},[203,151472,2489],{"emptyLinePlaceholder":131},[203,151474,151475,151477],{"class":205,"line":1768},[203,151476,151072],{"class":2052},[203,151478,151075],{"class":262},[203,151480,151481,151483,151486],{"class":205,"line":1782},[203,151482,30859],{"class":209},[203,151484,151485],{"class":2052}," from_dict",[203,151487,151488],{"class":213},"(cls, data):\n",[203,151490,151491,151493,151495],{"class":205,"line":1787},[203,151492,14842],{"class":209},[203,151494,151092],{"class":262},[203,151496,151497],{"class":213},"(\n",[203,151499,151500,151503,151506],{"class":205,"line":1816},[203,151501,151502],{"class":213},"            data[",[203,151504,151505],{"class":318},"\"student_id\"",[203,151507,87894],{"class":213},[203,151509,151510,151512,151514],{"class":205,"line":1821},[203,151511,151502],{"class":213},[203,151513,62737],{"class":318},[203,151515,87894],{"class":213},[203,151517,151518,151520,151522],{"class":205,"line":1838},[203,151519,151502],{"class":213},[203,151521,69182],{"class":318},[203,151523,87894],{"class":213},[203,151525,151526,151528,151531],{"class":205,"line":1843},[203,151527,151502],{"class":213},[203,151529,151530],{"class":318},"\"score\"",[203,151532,87894],{"class":213},[203,151534,151535],{"class":205,"line":1848},[203,151536,38184],{"class":213},[203,151538,151539],{"class":205,"line":1853},[203,151540,2489],{"emptyLinePlaceholder":131},[203,151542,151543,151545,151547],{"class":205,"line":1867},[203,151544,30859],{"class":209},[203,151546,150039],{"class":262},[203,151548,30865],{"class":213},[203,151550,151551,151553,151555,151557,151559,151562,151564,151567,151569,151571,151573,151575,151577,151579,151581,151583],{"class":205,"line":1872},[203,151552,14842],{"class":209},[203,151554,150048],{"class":209},[203,151556,465],{"class":318},[203,151558,149510],{"class":262},[203,151560,151561],{"class":213},".student_id",[203,151563,1160],{"class":262},[203,151565,151566],{"class":262}," {self",[203,151568,80359],{"class":213},[203,151570,1160],{"class":262},[203,151572,151566],{"class":262},[203,151574,80371],{"class":213},[203,151576,1160],{"class":262},[203,151578,151566],{"class":262},[203,151580,149920],{"class":213},[203,151582,1160],{"class":262},[203,151584,25191],{"class":318},[203,151586,151587],{"class":205,"line":2666},[203,151588,2489],{"emptyLinePlaceholder":131},[203,151590,151591],{"class":205,"line":2680},[203,151592,2489],{"emptyLinePlaceholder":131},[203,151594,151595,151597,151599,151601,151604,151606,151608,151610,151612,151614,151616],{"class":205,"line":2688},[203,151596,149539],{"class":213},[203,151598,259],{"class":209},[203,151600,149943],{"class":213},[203,151602,151603],{"class":318},"\"001\"",[203,151605,12525],{"class":213},[203,151607,149946],{"class":318},[203,151609,12525],{"class":213},[203,151611,864],{"class":262},[203,151613,12525],{"class":213},[203,151615,1203],{"class":262},[203,151617,220],{"class":213},[203,151619,151620,151622],{"class":205,"line":2693},[203,151621,30473],{"class":262},[203,151623,151624],{"class":213},"(student.is_passed())\n",[203,151626,151627,151629],{"class":205,"line":2699},[203,151628,30473],{"class":262},[203,151630,151631],{"class":213},"(student.to_dict())\n",[19,151633,151634,101076,151637,151640],{},[200,151635,151636],{},"to_dict()",[200,151638,151639],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151642,151644],{"id":151643},"_1116-易错点","11.16 易错点",[157,151646,151647,151653,151659,151664,151667,151670],{},[160,151648,151649,151650,28443],{},"类名推荐使用大驼峰，如 ",[200,151651,151652],{},"StudentManager",[160,151654,151655,151656,151658],{},"方法第一个参数必须写 ",[200,151657,30881],{},"，调用时不用传。",[160,151660,151661,151663],{},[200,151662,30887],{}," 不是普通方法，它在创建对象时自动执行。",[160,151665,151666],{},"私有属性不是绝对安全，只是约定和名称改写。",[160,151668,151669],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[160,151671,151672],{},"类中方法太多时，说明职责可能过重。",[14,151674,151676],{"id":151675},"_1117-本章练习","11.17 本章练习",[157,151678,151679,151685,151691,151696,151709],{},[160,151680,151681,151682,151684],{},"定义 ",[200,151683,149626],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[160,151686,151681,151687,151690],{},[200,151688,151689],{},"Account"," 类，实现存款、取款、查询余额。",[160,151692,151681,151693,151695],{},[200,151694,17316],{}," 类，计算圆的周长和面积。",[160,151697,151681,151698,426,151701,151704,151705,151708],{},[200,151699,151700],{},"Dog",[200,151702,151703],{},"Cat"," 类，并用同一个函数调用它们的 ",[200,151706,151707],{},"speak()"," 方法。",[160,151710,104424,151711,151713,151714,28443],{},[200,151712,151197],{}," 定义一个商品类 ",[200,151715,151716],{},"Product",[5216,151718,151719],{},"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":27,"searchDepth":124,"depth":124,"links":151721},[151722,151723,151724,151725,151726,151727,151729,151730,151731,151732,151733,151734,151735,151739,151740,151741,151742],{"id":149390,"depth":124,"text":149391},{"id":149573,"depth":124,"text":149574},{"id":149637,"depth":124,"text":149638},{"id":149714,"depth":124,"text":149715},{"id":149813,"depth":124,"text":149814},{"id":149977,"depth":124,"text":151728},"11.6 str",{"id":150103,"depth":124,"text":150104},{"id":150369,"depth":124,"text":150370},{"id":150483,"depth":124,"text":150484},{"id":150638,"depth":124,"text":150639},{"id":150762,"depth":124,"text":150763},{"id":150878,"depth":124,"text":150879},{"id":151027,"depth":124,"text":151028,"children":151736},[151737,151738],{"id":151031,"depth":1269,"text":151032},{"id":151113,"depth":1269,"text":151114},{"id":151191,"depth":124,"text":151192},{"id":151306,"depth":124,"text":151307},{"id":151643,"depth":124,"text":151644},{"id":151675,"depth":124,"text":151676},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149382,"description":23467},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151749,"title":151750,"body":151751,"description":23467,"extension":129,"meta":155064,"navigation":131,"path":155065,"seo":155066,"stem":155067,"__hash__":155068},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151752,"toc":155040},[151753,151756,151760,151763,151766,151795,151798,151806,151810,151814,151817,151840,151843,151849,151853,153299,153302,153323,153327,153330,153342,153345,153529,153532,153658,153661,153665,153669,153805,153809,153895,153899,153981,153985,154022,154026,154215,154219,154222,154452,154456,154459,154640,154643,154647,154650,154656,154659,154685,154689,154692,154706,154709,154734,154737,154751,154754,154771,154774,154791,154794,154811,154815,154841,154845,154868,154872,154875,154877,154883,154885,154906,154909,154915,154921,154925,154928,155004,155007,155011,155037],[10,151754,151750],{"id":151755},"_12-综合案例与复习路线",[14,151757,151759],{"id":151758},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,151761,151762],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,151764,151765],{},"一个合格的入门综合项目最好覆盖：",[157,151767,151768,151771,151774,151777,151780,151783,151786,151789,151792],{},[160,151769,151770],{},"输入输出。",[160,151772,151773],{},"判断和循环。",[160,151775,151776],{},"函数拆分。",[160,151778,151779],{},"列表、字典等容器。",[160,151781,151782],{},"文件持久化。",[160,151784,151785],{},"异常处理。",[160,151787,151788],{},"模块拆分。",[160,151790,151791],{},"可选：面向对象。",[160,151793,151794],{},"可选：数据可视化。",[19,151796,151797],{},"本章整理两个方向：",[157,151799,151800,151803],{},[160,151801,151802],{},"学生管理系统。",[160,151804,151805],{},"销售数据统计和可视化。",[14,151807,151809],{"id":151808},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[174,151811,151813],{"id":151812},"_1221-需求","12.2.1 需求",[19,151815,151816],{},"实现一个命令行学生管理系统：",[157,151818,151819,151822,151825,151828,151831,151834,151837],{},[160,151820,151821],{},"添加学生。",[160,151823,151824],{},"删除学生。",[160,151826,151827],{},"修改学生。",[160,151829,151830],{},"查询学生。",[160,151832,151833],{},"显示所有学生。",[160,151835,151836],{},"保存到 JSON 文件。",[160,151838,151839],{},"程序启动时自动读取 JSON 文件。",[19,151841,151842],{},"学生字段：",[194,151844,151847],{"className":151845,"code":151846,"language":5277,"meta":27},[5275],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[200,151848,151846],{"__ignoreMap":27},[14,151850,151852],{"id":151851},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[194,151854,151856],{"className":30436,"code":151855,"language":30438,"meta":27,"style":27},"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",[200,151857,151858,151864,151874,151878,151892,151896,151900,151909,151921,151927,151931,151937,151968,151978,151985,151996,152002,152006,152010,152020,152051,152077,152081,152085,152094,152105,152116,152127,152138,152149,152160,152171,152175,152179,152189,152201,152217,152224,152231,152235,152239,152249,152257,152264,152277,152287,152298,152302,152306,152315,152323,152329,152341,152349,152360,152364,152368,152377,152393,152397,152404,152415,152420,152424,152440,152455,152470,152474,152479,152487,152495,152503,152511,152515,152520,152531,152535,152539,152548,152563,152573,152577,152589,152600,152604,152608,152613,152617,152628,152632,152636,152645,152660,152668,152672,152684,152694,152698,152702,152717,152730,152743,152747,152760,152772,152784,152788,152792,152803,152807,152811,152820,152835,152843,152847,152859,152869,152873,152877,152882,152886,152890,152900,152906,152928,152947,152966,152985,152990,152994,152998,153007,153015,153026,153030,153034,153060,153070,153075,153079,153083,153091,153101,153105,153113,153118,153134,153138,153152,153157,153171,153176,153189,153194,153207,153212,153225,153230,153243,153254,153258,153264,153275,153279,153283,153295],{"__ignoreMap":27},[203,151859,151860,151862],{"class":205,"line":206},[203,151861,30450],{"class":209},[203,151863,147149],{"class":213},[203,151865,151866,151868,151870,151872],{"class":205,"line":124},[203,151867,30795],{"class":209},[203,151869,108369],{"class":213},[203,151871,30450],{"class":209},[203,151873,108374],{"class":213},[203,151875,151876],{"class":205,"line":1269},[203,151877,2489],{"emptyLinePlaceholder":131},[203,151879,151880,151883,151885,151887,151890],{"class":205,"line":1284},[203,151881,151882],{"class":262},"DATA_FILE",[203,151884,13654],{"class":209},[203,151886,108603],{"class":213},[203,151888,151889],{"class":318},"\"students.json\"",[203,151891,220],{"class":213},[203,151893,151894],{"class":205,"line":1290},[203,151895,2489],{"emptyLinePlaceholder":131},[203,151897,151898],{"class":205,"line":1304},[203,151899,2489],{"emptyLinePlaceholder":131},[203,151901,151902,151904,151907],{"class":205,"line":1310},[203,151903,32005],{"class":209},[203,151905,151906],{"class":2052}," load_students",[203,151908,32011],{"class":213},[203,151910,151911,151913,151915,151918],{"class":205,"line":1401},[203,151912,3190],{"class":209},[203,151914,38988],{"class":209},[203,151916,151917],{"class":262}," DATA_FILE",[203,151919,151920],{"class":213},".exists():\n",[203,151922,151923,151925],{"class":205,"line":1407},[203,151924,14842],{"class":209},[203,151926,51896],{"class":213},[203,151928,151929],{"class":205,"line":1419},[203,151930,2489],{"emptyLinePlaceholder":131},[203,151932,151933,151935],{"class":205,"line":1701},[203,151934,125842],{"class":209},[203,151936,3828],{"class":213},[203,151938,151939,151942,151944,151946,151948,151950,151952,151954,151956,151958,151960,151962,151964,151966],{"class":205,"line":1706},[203,151940,151941],{"class":209},"        with",[203,151943,146849],{"class":262},[203,151945,214],{"class":213},[203,151947,151882],{"class":262},[203,151949,12525],{"class":213},[203,151951,146859],{"class":318},[203,151953,12525],{"class":213},[203,151955,146864],{"class":5306},[203,151957,259],{"class":209},[203,151959,146869],{"class":318},[203,151961,13804],{"class":213},[203,151963,31441],{"class":209},[203,151965,148211],{"class":5306},[203,151967,3828],{"class":213},[203,151969,151970,151972,151974,151976],{"class":205,"line":1712},[203,151971,15822],{"class":209},[203,151973,148222],{"class":213},[203,151975,45412],{"class":5306},[203,151977,220],{"class":213},[203,151979,151980,151982],{"class":205,"line":1717},[203,151981,125870],{"class":209},[203,151983,151984],{"class":213}," json.JSONDecodeError:\n",[203,151986,151987,151989,151991,151994],{"class":205,"line":1731},[203,151988,32509],{"class":262},[203,151990,214],{"class":213},[203,151992,151993],{"class":318},"\"数据文件格式错误，已使用空数据启动\"",[203,151995,220],{"class":213},[203,151997,151998,152000],{"class":205,"line":1736},[203,151999,14842],{"class":209},[203,152001,51896],{"class":213},[203,152003,152004],{"class":205,"line":1742},[203,152005,2489],{"emptyLinePlaceholder":131},[203,152007,152008],{"class":205,"line":1763},[203,152009,2489],{"emptyLinePlaceholder":131},[203,152011,152012,152014,152017],{"class":205,"line":1768},[203,152013,32005],{"class":209},[203,152015,152016],{"class":2052}," save_students",[203,152018,152019],{"class":213},"(students):\n",[203,152021,152022,152024,152026,152028,152030,152032,152035,152037,152039,152041,152043,152045,152047,152049],{"class":205,"line":1782},[203,152023,34236],{"class":209},[203,152025,146849],{"class":262},[203,152027,214],{"class":213},[203,152029,151882],{"class":262},[203,152031,12525],{"class":213},[203,152033,152034],{"class":318},"\"w\"",[203,152036,12525],{"class":213},[203,152038,146864],{"class":5306},[203,152040,259],{"class":209},[203,152042,146869],{"class":318},[203,152044,13804],{"class":213},[203,152046,31441],{"class":209},[203,152048,148211],{"class":5306},[203,152050,3828],{"class":213},[203,152052,152053,152056,152058,152060,152062,152064,152066,152068,152071,152073,152075],{"class":205,"line":1787},[203,152054,152055],{"class":213},"        json.dump(students, ",[203,152057,45412],{"class":5306},[203,152059,12525],{"class":213},[203,152061,147195],{"class":5306},[203,152063,259],{"class":209},[203,152065,34045],{"class":262},[203,152067,12525],{"class":213},[203,152069,152070],{"class":5306},"indent",[203,152072,259],{"class":209},[203,152074,291],{"class":262},[203,152076,220],{"class":213},[203,152078,152079],{"class":205,"line":1816},[203,152080,2489],{"emptyLinePlaceholder":131},[203,152082,152083],{"class":205,"line":1821},[203,152084,2489],{"emptyLinePlaceholder":131},[203,152086,152087,152089,152092],{"class":205,"line":1838},[203,152088,32005],{"class":209},[203,152090,152091],{"class":2052}," show_menu",[203,152093,32011],{"class":213},[203,152095,152096,152098,152100,152103],{"class":205,"line":1843},[203,152097,31357],{"class":262},[203,152099,214],{"class":213},[203,152101,152102],{"class":318},"\"====== 学生管理系统 ======\"",[203,152104,220],{"class":213},[203,152106,152107,152109,152111,152114],{"class":205,"line":1848},[203,152108,31357],{"class":262},[203,152110,214],{"class":213},[203,152112,152113],{"class":318},"\"1. 添加学生\"",[203,152115,220],{"class":213},[203,152117,152118,152120,152122,152125],{"class":205,"line":1853},[203,152119,31357],{"class":262},[203,152121,214],{"class":213},[203,152123,152124],{"class":318},"\"2. 删除学生\"",[203,152126,220],{"class":213},[203,152128,152129,152131,152133,152136],{"class":205,"line":1867},[203,152130,31357],{"class":262},[203,152132,214],{"class":213},[203,152134,152135],{"class":318},"\"3. 修改学生\"",[203,152137,220],{"class":213},[203,152139,152140,152142,152144,152147],{"class":205,"line":1872},[203,152141,31357],{"class":262},[203,152143,214],{"class":213},[203,152145,152146],{"class":318},"\"4. 查询学生\"",[203,152148,220],{"class":213},[203,152150,152151,152153,152155,152158],{"class":205,"line":2666},[203,152152,31357],{"class":262},[203,152154,214],{"class":213},[203,152156,152157],{"class":318},"\"5. 显示所有学生\"",[203,152159,220],{"class":213},[203,152161,152162,152164,152166,152169],{"class":205,"line":2680},[203,152163,31357],{"class":262},[203,152165,214],{"class":213},[203,152167,152168],{"class":318},"\"0. 退出系统\"",[203,152170,220],{"class":213},[203,152172,152173],{"class":205,"line":2688},[203,152174,2489],{"emptyLinePlaceholder":131},[203,152176,152177],{"class":205,"line":2693},[203,152178,2489],{"emptyLinePlaceholder":131},[203,152180,152181,152183,152186],{"class":205,"line":2699},[203,152182,32005],{"class":209},[203,152184,152185],{"class":2052}," find_student",[203,152187,152188],{"class":213},"(students, student_id):\n",[203,152190,152191,152193,152196,152198],{"class":205,"line":2705},[203,152192,3290],{"class":209},[203,152194,152195],{"class":213}," student ",[203,152197,26101],{"class":209},[203,152199,152200],{"class":213}," students:\n",[203,152202,152203,152205,152208,152210,152212,152214],{"class":205,"line":2710},[203,152204,2586],{"class":209},[203,152206,152207],{"class":213}," student[",[203,152209,151505],{"class":318},[203,152211,4532],{"class":213},[203,152213,3038],{"class":209},[203,152215,152216],{"class":213}," student_id:\n",[203,152218,152219,152221],{"class":205,"line":8038},[203,152220,15822],{"class":209},[203,152222,152223],{"class":213}," student\n",[203,152225,152226,152228],{"class":205,"line":8062},[203,152227,4179],{"class":209},[203,152229,152230],{"class":262}," None\n",[203,152232,152233],{"class":205,"line":8067},[203,152234,2489],{"emptyLinePlaceholder":131},[203,152236,152237],{"class":205,"line":8073},[203,152238,2489],{"emptyLinePlaceholder":131},[203,152240,152241,152243,152246],{"class":205,"line":8100},[203,152242,32005],{"class":209},[203,152244,152245],{"class":2052}," input_int",[203,152247,152248],{"class":213},"(prompt):\n",[203,152250,152251,152253,152255],{"class":205,"line":8105},[203,152252,2340],{"class":209},[203,152254,95350],{"class":262},[203,152256,3828],{"class":213},[203,152258,152259,152262],{"class":205,"line":8111},[203,152260,152261],{"class":209},"        try",[203,152263,3828],{"class":213},[203,152265,152266,152268,152270,152272,152274],{"class":205,"line":8123},[203,152267,15822],{"class":209},[203,152269,2471],{"class":262},[203,152271,214],{"class":213},[203,152273,53879],{"class":262},[203,152275,152276],{"class":213},"(prompt))\n",[203,152278,152279,152282,152285],{"class":205,"line":8135},[203,152280,152281],{"class":209},"        except",[203,152283,152284],{"class":262}," ValueError",[203,152286,3828],{"class":213},[203,152288,152289,152291,152293,152296],{"class":205,"line":8147},[203,152290,34708],{"class":262},[203,152292,214],{"class":213},[203,152294,152295],{"class":318},"\"请输入整数\"",[203,152297,220],{"class":213},[203,152299,152300],{"class":205,"line":9806},[203,152301,2489],{"emptyLinePlaceholder":131},[203,152303,152304],{"class":205,"line":9831},[203,152305,2489],{"emptyLinePlaceholder":131},[203,152307,152308,152310,152313],{"class":205,"line":9854},[203,152309,32005],{"class":209},[203,152311,152312],{"class":2052}," input_float",[203,152314,152248],{"class":213},[203,152316,152317,152319,152321],{"class":205,"line":9878},[203,152318,2340],{"class":209},[203,152320,95350],{"class":262},[203,152322,3828],{"class":213},[203,152324,152325,152327],{"class":205,"line":9883},[203,152326,152261],{"class":209},[203,152328,3828],{"class":213},[203,152330,152331,152333,152335,152337,152339],{"class":205,"line":9888},[203,152332,15822],{"class":209},[203,152334,109855],{"class":262},[203,152336,214],{"class":213},[203,152338,53879],{"class":262},[203,152340,152276],{"class":213},[203,152342,152343,152345,152347],{"class":205,"line":9893},[203,152344,152281],{"class":209},[203,152346,152284],{"class":262},[203,152348,3828],{"class":213},[203,152350,152351,152353,152355,152358],{"class":205,"line":9902},[203,152352,34708],{"class":262},[203,152354,214],{"class":213},[203,152356,152357],{"class":318},"\"请输入数字\"",[203,152359,220],{"class":213},[203,152361,152362],{"class":205,"line":9907},[203,152363,2489],{"emptyLinePlaceholder":131},[203,152365,152366],{"class":205,"line":9913},[203,152367,2489],{"emptyLinePlaceholder":131},[203,152369,152370,152372,152375],{"class":205,"line":9934},[203,152371,32005],{"class":209},[203,152373,152374],{"class":2052}," add_student",[203,152376,152019],{"class":213},[203,152378,152379,152382,152384,152386,152388,152391],{"class":205,"line":9940},[203,152380,152381],{"class":213},"    student_id ",[203,152383,259],{"class":209},[203,152385,60663],{"class":262},[203,152387,214],{"class":213},[203,152389,152390],{"class":318},"\"请输入学号:\"",[203,152392,220],{"class":213},[203,152394,152395],{"class":205,"line":9954},[203,152396,2489],{"emptyLinePlaceholder":131},[203,152398,152399,152401],{"class":205,"line":9960},[203,152400,3190],{"class":209},[203,152402,152403],{"class":213}," find_student(students, student_id):\n",[203,152405,152406,152408,152410,152413],{"class":205,"line":9987},[203,152407,32509],{"class":262},[203,152409,214],{"class":213},[203,152411,152412],{"class":318},"\"学号已存在\"",[203,152414,220],{"class":213},[203,152416,152417],{"class":205,"line":9996},[203,152418,152419],{"class":209},"        return\n",[203,152421,152422],{"class":205,"line":10002},[203,152423,2489],{"emptyLinePlaceholder":131},[203,152425,152426,152429,152431,152433,152435,152438],{"class":205,"line":10010},[203,152427,152428],{"class":213},"    name ",[203,152430,259],{"class":209},[203,152432,60663],{"class":262},[203,152434,214],{"class":213},[203,152436,152437],{"class":318},"\"请输入姓名:\"",[203,152439,220],{"class":213},[203,152441,152442,152445,152447,152450,152453],{"class":205,"line":10015},[203,152443,152444],{"class":213},"    age ",[203,152446,259],{"class":209},[203,152448,152449],{"class":213}," input_int(",[203,152451,152452],{"class":318},"\"请输入年龄:\"",[203,152454,220],{"class":213},[203,152456,152457,152460,152462,152465,152468],{"class":205,"line":16694},[203,152458,152459],{"class":213},"    score ",[203,152461,259],{"class":209},[203,152463,152464],{"class":213}," input_float(",[203,152466,152467],{"class":318},"\"请输入成绩:\"",[203,152469,220],{"class":213},[203,152471,152472],{"class":205,"line":16700},[203,152473,2489],{"emptyLinePlaceholder":131},[203,152475,152476],{"class":205,"line":16723},[203,152477,152478],{"class":213},"    students.append({\n",[203,152480,152481,152484],{"class":205,"line":16729},[203,152482,152483],{"class":318},"        \"student_id\"",[203,152485,152486],{"class":213},": student_id,\n",[203,152488,152489,152492],{"class":205,"line":16752},[203,152490,152491],{"class":318},"        \"name\"",[203,152493,152494],{"class":213},": name,\n",[203,152496,152497,152500],{"class":205,"line":16766},[203,152498,152499],{"class":318},"        \"age\"",[203,152501,152502],{"class":213},": age,\n",[203,152504,152505,152508],{"class":205,"line":16786},[203,152506,152507],{"class":318},"        \"score\"",[203,152509,152510],{"class":213},": score,\n",[203,152512,152513],{"class":205,"line":16792},[203,152514,33519],{"class":213},[203,152516,152517],{"class":205,"line":16803},[203,152518,152519],{"class":213},"    save_students(students)\n",[203,152521,152522,152524,152526,152529],{"class":205,"line":16826},[203,152523,31357],{"class":262},[203,152525,214],{"class":213},[203,152527,152528],{"class":318},"\"添加成功\"",[203,152530,220],{"class":213},[203,152532,152533],{"class":205,"line":16848},[203,152534,2489],{"emptyLinePlaceholder":131},[203,152536,152537],{"class":205,"line":16853},[203,152538,2489],{"emptyLinePlaceholder":131},[203,152540,152541,152543,152546],{"class":205,"line":16859},[203,152542,32005],{"class":209},[203,152544,152545],{"class":2052}," delete_student",[203,152547,152019],{"class":213},[203,152549,152550,152552,152554,152556,152558,152561],{"class":205,"line":16873},[203,152551,152381],{"class":213},[203,152553,259],{"class":209},[203,152555,60663],{"class":262},[203,152557,214],{"class":213},[203,152559,152560],{"class":318},"\"请输入要删除的学号:\"",[203,152562,220],{"class":213},[203,152564,152565,152568,152570],{"class":205,"line":16886},[203,152566,152567],{"class":213},"    student ",[203,152569,259],{"class":209},[203,152571,152572],{"class":213}," find_student(students, student_id)\n",[203,152574,152575],{"class":205,"line":16891},[203,152576,2489],{"emptyLinePlaceholder":131},[203,152578,152579,152581,152583,152585,152587],{"class":205,"line":16905},[203,152580,3190],{"class":209},[203,152582,152195],{"class":213},[203,152584,38985],{"class":209},[203,152586,38991],{"class":262},[203,152588,3828],{"class":213},[203,152590,152591,152593,152595,152598],{"class":205,"line":16910},[203,152592,32509],{"class":262},[203,152594,214],{"class":213},[203,152596,152597],{"class":318},"\"学生不存在\"",[203,152599,220],{"class":213},[203,152601,152602],{"class":205,"line":16916},[203,152603,152419],{"class":209},[203,152605,152606],{"class":205,"line":16921},[203,152607,2489],{"emptyLinePlaceholder":131},[203,152609,152610],{"class":205,"line":16935},[203,152611,152612],{"class":213},"    students.remove(student)\n",[203,152614,152615],{"class":205,"line":16940},[203,152616,152519],{"class":213},[203,152618,152619,152621,152623,152626],{"class":205,"line":16945},[203,152620,31357],{"class":262},[203,152622,214],{"class":213},[203,152624,152625],{"class":318},"\"删除成功\"",[203,152627,220],{"class":213},[203,152629,152630],{"class":205,"line":16959},[203,152631,2489],{"emptyLinePlaceholder":131},[203,152633,152634],{"class":205,"line":16971},[203,152635,2489],{"emptyLinePlaceholder":131},[203,152637,152638,152640,152643],{"class":205,"line":16976},[203,152639,32005],{"class":209},[203,152641,152642],{"class":2052}," update_student",[203,152644,152019],{"class":213},[203,152646,152647,152649,152651,152653,152655,152658],{"class":205,"line":16989},[203,152648,152381],{"class":213},[203,152650,259],{"class":209},[203,152652,60663],{"class":262},[203,152654,214],{"class":213},[203,152656,152657],{"class":318},"\"请输入要修改的学号:\"",[203,152659,220],{"class":213},[203,152661,152662,152664,152666],{"class":205,"line":16994},[203,152663,152567],{"class":213},[203,152665,259],{"class":209},[203,152667,152572],{"class":213},[203,152669,152670],{"class":205,"line":16999},[203,152671,2489],{"emptyLinePlaceholder":131},[203,152673,152674,152676,152678,152680,152682],{"class":205,"line":17004},[203,152675,3190],{"class":209},[203,152677,152195],{"class":213},[203,152679,38985],{"class":209},[203,152681,38991],{"class":262},[203,152683,3828],{"class":213},[203,152685,152686,152688,152690,152692],{"class":205,"line":17017},[203,152687,32509],{"class":262},[203,152689,214],{"class":213},[203,152691,152597],{"class":318},[203,152693,220],{"class":213},[203,152695,152696],{"class":205,"line":17022},[203,152697,152419],{"class":209},[203,152699,152700],{"class":205,"line":32691},[203,152701,2489],{"emptyLinePlaceholder":131},[203,152703,152704,152706,152708,152710,152712,152715],{"class":205,"line":32697},[203,152705,152428],{"class":213},[203,152707,259],{"class":209},[203,152709,60663],{"class":262},[203,152711,214],{"class":213},[203,152713,152714],{"class":318},"\"请输入新姓名:\"",[203,152716,220],{"class":213},[203,152718,152719,152721,152723,152725,152728],{"class":205,"line":32703},[203,152720,152444],{"class":213},[203,152722,259],{"class":209},[203,152724,152449],{"class":213},[203,152726,152727],{"class":318},"\"请输入新年龄:\"",[203,152729,220],{"class":213},[203,152731,152732,152734,152736,152738,152741],{"class":205,"line":32709},[203,152733,152459],{"class":213},[203,152735,259],{"class":209},[203,152737,152464],{"class":213},[203,152739,152740],{"class":318},"\"请输入新成绩:\"",[203,152742,220],{"class":213},[203,152744,152745],{"class":205,"line":32715},[203,152746,2489],{"emptyLinePlaceholder":131},[203,152748,152749,152752,152754,152756,152758],{"class":205,"line":32726},[203,152750,152751],{"class":213},"    student[",[203,152753,62737],{"class":318},[203,152755,4532],{"class":213},[203,152757,259],{"class":209},[203,152759,149853],{"class":213},[203,152761,152762,152764,152766,152768,152770],{"class":205,"line":32732},[203,152763,152751],{"class":213},[203,152765,69182],{"class":318},[203,152767,4532],{"class":213},[203,152769,259],{"class":209},[203,152771,149865],{"class":213},[203,152773,152774,152776,152778,152780,152782],{"class":205,"line":32752},[203,152775,152751],{"class":213},[203,152777,151530],{"class":318},[203,152779,4532],{"class":213},[203,152781,259],{"class":209},[203,152783,1668],{"class":213},[203,152785,152786],{"class":205,"line":32758},[203,152787,2489],{"emptyLinePlaceholder":131},[203,152789,152790],{"class":205,"line":32769},[203,152791,152519],{"class":213},[203,152793,152794,152796,152798,152801],{"class":205,"line":32775},[203,152795,31357],{"class":262},[203,152797,214],{"class":213},[203,152799,152800],{"class":318},"\"修改成功\"",[203,152802,220],{"class":213},[203,152804,152805],{"class":205,"line":32781},[203,152806,2489],{"emptyLinePlaceholder":131},[203,152808,152809],{"class":205,"line":32787},[203,152810,2489],{"emptyLinePlaceholder":131},[203,152812,152813,152815,152818],{"class":205,"line":32793},[203,152814,32005],{"class":209},[203,152816,152817],{"class":2052}," query_student",[203,152819,152019],{"class":213},[203,152821,152822,152824,152826,152828,152830,152833],{"class":205,"line":32799},[203,152823,152381],{"class":213},[203,152825,259],{"class":209},[203,152827,60663],{"class":262},[203,152829,214],{"class":213},[203,152831,152832],{"class":318},"\"请输入要查询的学号:\"",[203,152834,220],{"class":213},[203,152836,152837,152839,152841],{"class":205,"line":32805},[203,152838,152567],{"class":213},[203,152840,259],{"class":209},[203,152842,152572],{"class":213},[203,152844,152845],{"class":205,"line":32811},[203,152846,2489],{"emptyLinePlaceholder":131},[203,152848,152849,152851,152853,152855,152857],{"class":205,"line":32831},[203,152850,3190],{"class":209},[203,152852,152195],{"class":213},[203,152854,38985],{"class":209},[203,152856,38991],{"class":262},[203,152858,3828],{"class":213},[203,152860,152861,152863,152865,152867],{"class":205,"line":32837},[203,152862,32509],{"class":262},[203,152864,214],{"class":213},[203,152866,152597],{"class":318},[203,152868,220],{"class":213},[203,152870,152871],{"class":205,"line":32853},[203,152872,152419],{"class":209},[203,152874,152875],{"class":205,"line":32859},[203,152876,2489],{"emptyLinePlaceholder":131},[203,152878,152879],{"class":205,"line":32873},[203,152880,152881],{"class":213},"    print_student(student)\n",[203,152883,152884],{"class":205,"line":32879},[203,152885,2489],{"emptyLinePlaceholder":131},[203,152887,152888],{"class":205,"line":32894},[203,152889,2489],{"emptyLinePlaceholder":131},[203,152891,152892,152894,152897],{"class":205,"line":32900},[203,152893,32005],{"class":209},[203,152895,152896],{"class":2052}," print_student",[203,152898,152899],{"class":213},"(student):\n",[203,152901,152902,152904],{"class":205,"line":32909},[203,152903,31357],{"class":262},[203,152905,151497],{"class":213},[203,152907,152908,152911,152913,152915,152918,152921,152923,152926],{"class":205,"line":32915},[203,152909,152910],{"class":209},"        f",[203,152912,465],{"class":318},[203,152914,1110],{"class":262},[203,152916,152917],{"class":213},"student[",[203,152919,152920],{"class":318},"'student_id'",[203,152922,1154],{"class":213},[203,152924,152925],{"class":262},"}\\t",[203,152927,25191],{"class":318},[203,152929,152930,152932,152934,152936,152938,152941,152943,152945],{"class":205,"line":32924},[203,152931,152910],{"class":209},[203,152933,465],{"class":318},[203,152935,1110],{"class":262},[203,152937,152917],{"class":213},[203,152939,152940],{"class":318},"'name'",[203,152942,1154],{"class":213},[203,152944,152925],{"class":262},[203,152946,25191],{"class":318},[203,152948,152949,152951,152953,152955,152957,152960,152962,152964],{"class":205,"line":32930},[203,152950,152910],{"class":209},[203,152952,465],{"class":318},[203,152954,1110],{"class":262},[203,152956,152917],{"class":213},[203,152958,152959],{"class":318},"'age'",[203,152961,1154],{"class":213},[203,152963,152925],{"class":262},[203,152965,25191],{"class":318},[203,152967,152968,152970,152972,152974,152976,152979,152981,152983],{"class":205,"line":32936},[203,152969,152910],{"class":209},[203,152971,465],{"class":318},[203,152973,1110],{"class":262},[203,152975,152917],{"class":213},[203,152977,152978],{"class":318},"'score'",[203,152980,1154],{"class":213},[203,152982,1160],{"class":262},[203,152984,25191],{"class":318},[203,152986,152987],{"class":205,"line":32945},[203,152988,152989],{"class":213},"    )\n",[203,152991,152992],{"class":205,"line":32951},[203,152993,2489],{"emptyLinePlaceholder":131},[203,152995,152996],{"class":205,"line":32962},[203,152997,2489],{"emptyLinePlaceholder":131},[203,152999,153000,153002,153005],{"class":205,"line":32968},[203,153001,32005],{"class":209},[203,153003,153004],{"class":2052}," show_all_students",[203,153006,152019],{"class":213},[203,153008,153009,153011,153013],{"class":205,"line":32987},[203,153010,3190],{"class":209},[203,153012,38988],{"class":209},[203,153014,152200],{"class":213},[203,153016,153017,153019,153021,153024],{"class":205,"line":32993},[203,153018,32509],{"class":262},[203,153020,214],{"class":213},[203,153022,153023],{"class":318},"\"暂无学生\"",[203,153025,220],{"class":213},[203,153027,153028],{"class":205,"line":33004},[203,153029,152419],{"class":209},[203,153031,153032],{"class":205,"line":33010},[203,153033,2489],{"emptyLinePlaceholder":131},[203,153035,153036,153038,153040,153043,153045,153048,153050,153053,153055,153058],{"class":205,"line":33030},[203,153037,31357],{"class":262},[203,153039,214],{"class":213},[203,153041,153042],{"class":318},"\"学号",[203,153044,1320],{"class":262},[203,153046,153047],{"class":318},"姓名",[203,153049,1320],{"class":262},[203,153051,153052],{"class":318},"年龄",[203,153054,1320],{"class":262},[203,153056,153057],{"class":318},"成绩\"",[203,153059,220],{"class":213},[203,153061,153062,153064,153066,153068],{"class":205,"line":33046},[203,153063,3290],{"class":209},[203,153065,152195],{"class":213},[203,153067,26101],{"class":209},[203,153069,152200],{"class":213},[203,153071,153072],{"class":205,"line":33052},[203,153073,153074],{"class":213},"        print_student(student)\n",[203,153076,153077],{"class":205,"line":33066},[203,153078,2489],{"emptyLinePlaceholder":131},[203,153080,153081],{"class":205,"line":33072},[203,153082,2489],{"emptyLinePlaceholder":131},[203,153084,153085,153087,153089],{"class":205,"line":33078},[203,153086,32005],{"class":209},[203,153088,2062],{"class":2052},[203,153090,32011],{"class":213},[203,153092,153093,153096,153098],{"class":205,"line":33089},[203,153094,153095],{"class":213},"    students ",[203,153097,259],{"class":209},[203,153099,153100],{"class":213}," load_students()\n",[203,153102,153103],{"class":205,"line":33095},[203,153104,2489],{"emptyLinePlaceholder":131},[203,153106,153107,153109,153111],{"class":205,"line":33101},[203,153108,2340],{"class":209},[203,153110,95350],{"class":262},[203,153112,3828],{"class":213},[203,153114,153115],{"class":205,"line":33111},[203,153116,153117],{"class":213},"        show_menu()\n",[203,153119,153120,153123,153125,153127,153129,153132],{"class":205,"line":33117},[203,153121,153122],{"class":213},"        choice ",[203,153124,259],{"class":209},[203,153126,60663],{"class":262},[203,153128,214],{"class":213},[203,153130,153131],{"class":318},"\"请输入操作:\"",[203,153133,220],{"class":213},[203,153135,153136],{"class":205,"line":33128},[203,153137,2489],{"emptyLinePlaceholder":131},[203,153139,153140,153142,153145,153147,153150],{"class":205,"line":33134},[203,153141,2586],{"class":209},[203,153143,153144],{"class":213}," choice ",[203,153146,3038],{"class":209},[203,153148,153149],{"class":318}," \"1\"",[203,153151,3828],{"class":213},[203,153153,153154],{"class":205,"line":33144},[203,153155,153156],{"class":213},"            add_student(students)\n",[203,153158,153159,153162,153164,153166,153169],{"class":205,"line":33149},[203,153160,153161],{"class":209},"        elif",[203,153163,153144],{"class":213},[203,153165,3038],{"class":209},[203,153167,153168],{"class":318}," \"2\"",[203,153170,3828],{"class":213},[203,153172,153173],{"class":205,"line":33155},[203,153174,153175],{"class":213},"            delete_student(students)\n",[203,153177,153178,153180,153182,153184,153187],{"class":205,"line":33204},[203,153179,153161],{"class":209},[203,153181,153144],{"class":213},[203,153183,3038],{"class":209},[203,153185,153186],{"class":318}," \"3\"",[203,153188,3828],{"class":213},[203,153190,153191],{"class":205,"line":33251},[203,153192,153193],{"class":213},"            update_student(students)\n",[203,153195,153196,153198,153200,153202,153205],{"class":205,"line":33256},[203,153197,153161],{"class":209},[203,153199,153144],{"class":213},[203,153201,3038],{"class":209},[203,153203,153204],{"class":318}," \"4\"",[203,153206,3828],{"class":213},[203,153208,153209],{"class":205,"line":33262},[203,153210,153211],{"class":213},"            query_student(students)\n",[203,153213,153214,153216,153218,153220,153223],{"class":205,"line":33281},[203,153215,153161],{"class":209},[203,153217,153144],{"class":213},[203,153219,3038],{"class":209},[203,153221,153222],{"class":318}," \"5\"",[203,153224,3828],{"class":213},[203,153226,153227],{"class":205,"line":33287},[203,153228,153229],{"class":213},"            show_all_students(students)\n",[203,153231,153232,153234,153236,153238,153241],{"class":205,"line":33307},[203,153233,153161],{"class":209},[203,153235,153144],{"class":213},[203,153237,3038],{"class":209},[203,153239,153240],{"class":318}," \"0\"",[203,153242,3828],{"class":213},[203,153244,153245,153247,153249,153252],{"class":205,"line":33313},[203,153246,34708],{"class":262},[203,153248,214],{"class":213},[203,153250,153251],{"class":318},"\"退出系统\"",[203,153253,220],{"class":213},[203,153255,153256],{"class":205,"line":33319},[203,153257,115156],{"class":209},[203,153259,153260,153262],{"class":205,"line":33329},[203,153261,2623],{"class":209},[203,153263,3828],{"class":213},[203,153265,153266,153268,153270,153273],{"class":205,"line":33334},[203,153267,34708],{"class":262},[203,153269,214],{"class":213},[203,153271,153272],{"class":318},"\"输入错误\"",[203,153274,220],{"class":213},[203,153276,153277],{"class":205,"line":33340},[203,153278,2489],{"emptyLinePlaceholder":131},[203,153280,153281],{"class":205,"line":33356},[203,153282,2489],{"emptyLinePlaceholder":131},[203,153284,153285,153287,153289,153291,153293],{"class":205,"line":33401},[203,153286,1620],{"class":209},[203,153288,31278],{"class":262},[203,153290,101617],{"class":209},[203,153292,101620],{"class":318},[203,153294,3828],{"class":213},[203,153296,153297],{"class":205,"line":33407},[203,153298,101627],{"class":213},[19,153300,153301],{},"这个项目串联了：",[157,153303,153304,153307,153310,153313,153316,153318],{},[160,153305,153306],{},"菜单循环。",[160,153308,153309],{},"函数封装。",[160,153311,153312],{},"列表字典。",[160,153314,153315],{},"JSON 读写。",[160,153317,151785],{},[160,153319,153320,28443],{},[200,153321,153322],{},"if __name__ == \"__main__\"",[14,153324,153326],{"id":153325},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153328,153329],{},"可以进一步拆成两个类：",[157,153331,153332,153337],{},[160,153333,153334,153336],{},[200,153335,149626],{},"：表示单个学生。",[160,153338,153339,153341],{},[200,153340,151652],{},"：负责学生增删改查和文件保存。",[19,153343,153344],{},"示意代码：",[194,153346,153348],{"className":30436,"code":153347,"language":30438,"meta":27,"style":27},"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",[200,153349,153350,153360,153364,153368,153372,153380,153387,153393,153399,153405,153409,153417,153423,153433,153443,153453,153463,153467,153471,153477,153485,153493,153501,153509,153517,153525],{"__ignoreMap":27},[203,153351,153352,153354,153356,153358],{"class":205,"line":206},[203,153353,30795],{"class":209},[203,153355,151210],{"class":213},[203,153357,30450],{"class":209},[203,153359,151215],{"class":213},[203,153361,153362],{"class":205,"line":124},[203,153363,2489],{"emptyLinePlaceholder":131},[203,153365,153366],{"class":205,"line":1269},[203,153367,2489],{"emptyLinePlaceholder":131},[203,153369,153370],{"class":205,"line":1284},[203,153371,151228],{"class":2052},[203,153373,153374,153376,153378],{"class":205,"line":1290},[203,153375,14784],{"class":209},[203,153377,7988],{"class":2052},[203,153379,3828],{"class":213},[203,153381,153382,153385],{"class":205,"line":1304},[203,153383,153384],{"class":213},"    student_id: ",[203,153386,151244],{"class":262},[203,153388,153389,153391],{"class":205,"line":1310},[203,153390,151241],{"class":213},[203,153392,151244],{"class":262},[203,153394,153395,153397],{"class":205,"line":1401},[203,153396,151249],{"class":213},[203,153398,151252],{"class":262},[203,153400,153401,153403],{"class":205,"line":1407},[203,153402,151257],{"class":213},[203,153404,151260],{"class":262},[203,153406,153407],{"class":205,"line":1419},[203,153408,2489],{"emptyLinePlaceholder":131},[203,153410,153411,153413,153415],{"class":205,"line":1701},[203,153412,30859],{"class":209},[203,153414,151408],{"class":2052},[203,153416,30865],{"class":213},[203,153418,153419,153421],{"class":205,"line":1706},[203,153420,14842],{"class":209},[203,153422,15662],{"class":213},[203,153424,153425,153427,153429,153431],{"class":205,"line":1712},[203,153426,151421],{"class":318},[203,153428,51495],{"class":213},[203,153430,30881],{"class":262},[203,153432,151428],{"class":213},[203,153434,153435,153437,153439,153441],{"class":205,"line":1717},[203,153436,151433],{"class":318},[203,153438,51495],{"class":213},[203,153440,30881],{"class":262},[203,153442,151440],{"class":213},[203,153444,153445,153447,153449,153451],{"class":205,"line":1731},[203,153446,151445],{"class":318},[203,153448,51495],{"class":213},[203,153450,30881],{"class":262},[203,153452,151452],{"class":213},[203,153454,153455,153457,153459,153461],{"class":205,"line":1736},[203,153456,151457],{"class":318},[203,153458,51495],{"class":213},[203,153460,30881],{"class":262},[203,153462,151464],{"class":213},[203,153464,153465],{"class":205,"line":1742},[203,153466,2618],{"class":213},[203,153468,153469],{"class":205,"line":1763},[203,153470,2489],{"emptyLinePlaceholder":131},[203,153472,153473,153475],{"class":205,"line":1768},[203,153474,151072],{"class":2052},[203,153476,151075],{"class":262},[203,153478,153479,153481,153483],{"class":205,"line":1782},[203,153480,30859],{"class":209},[203,153482,151485],{"class":2052},[203,153484,151488],{"class":213},[203,153486,153487,153489,153491],{"class":205,"line":1787},[203,153488,14842],{"class":209},[203,153490,151092],{"class":262},[203,153492,151497],{"class":213},[203,153494,153495,153497,153499],{"class":205,"line":1816},[203,153496,151502],{"class":213},[203,153498,151505],{"class":318},[203,153500,87894],{"class":213},[203,153502,153503,153505,153507],{"class":205,"line":1821},[203,153504,151502],{"class":213},[203,153506,62737],{"class":318},[203,153508,87894],{"class":213},[203,153510,153511,153513,153515],{"class":205,"line":1838},[203,153512,151502],{"class":213},[203,153514,69182],{"class":318},[203,153516,87894],{"class":213},[203,153518,153519,153521,153523],{"class":205,"line":1843},[203,153520,151502],{"class":213},[203,153522,151530],{"class":318},[203,153524,87894],{"class":213},[203,153526,153527],{"class":205,"line":1848},[203,153528,38184],{"class":213},[19,153530,153531],{},"管理器示意：",[194,153533,153535],{"className":30436,"code":153534,"language":30438,"meta":27,"style":27},"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",[200,153536,153537,153546,153554,153565,153569,153579,153592,153603,153610,153616,153620,153629,153638,153644,153651],{"__ignoreMap":27},[203,153538,153539,153541,153544],{"class":205,"line":206},[203,153540,14784],{"class":209},[203,153542,153543],{"class":2052}," StudentManager",[203,153545,3828],{"class":213},[203,153547,153548,153550,153552],{"class":205,"line":124},[203,153549,30859],{"class":209},[203,153551,30862],{"class":262},[203,153553,30865],{"class":213},[203,153555,153556,153558,153561,153563],{"class":205,"line":1269},[203,153557,30903],{"class":262},[203,153559,153560],{"class":213},".students ",[203,153562,259],{"class":209},[203,153564,51896],{"class":213},[203,153566,153567],{"class":205,"line":1284},[203,153568,2489],{"emptyLinePlaceholder":131},[203,153570,153571,153573,153576],{"class":205,"line":1290},[203,153572,30859],{"class":209},[203,153574,153575],{"class":2052}," find_by_id",[203,153577,153578],{"class":213},"(self, student_id):\n",[203,153580,153581,153583,153585,153587,153589],{"class":205,"line":1304},[203,153582,3492],{"class":209},[203,153584,152195],{"class":213},[203,153586,26101],{"class":209},[203,153588,38931],{"class":262},[203,153590,153591],{"class":213},".students:\n",[203,153593,153594,153596,153599,153601],{"class":205,"line":1310},[203,153595,4731],{"class":209},[203,153597,153598],{"class":213}," student.student_id ",[203,153600,3038],{"class":209},[203,153602,152216],{"class":213},[203,153604,153605,153608],{"class":205,"line":1401},[203,153606,153607],{"class":209},"                return",[203,153609,152223],{"class":213},[203,153611,153612,153614],{"class":205,"line":1407},[203,153613,14842],{"class":209},[203,153615,152230],{"class":262},[203,153617,153618],{"class":205,"line":1419},[203,153619,2489],{"emptyLinePlaceholder":131},[203,153621,153622,153624,153626],{"class":205,"line":1701},[203,153623,30859],{"class":209},[203,153625,5299],{"class":2052},[203,153627,153628],{"class":213},"(self, student):\n",[203,153630,153631,153633,153635],{"class":205,"line":1706},[203,153632,2586],{"class":209},[203,153634,38931],{"class":262},[203,153636,153637],{"class":213},".find_by_id(student.student_id):\n",[203,153639,153640,153642],{"class":205,"line":1712},[203,153641,15822],{"class":209},[203,153643,125865],{"class":262},[203,153645,153646,153648],{"class":205,"line":1717},[203,153647,30903],{"class":262},[203,153649,153650],{"class":213},".students.append(student)\n",[203,153652,153653,153655],{"class":205,"line":1731},[203,153654,14842],{"class":209},[203,153656,153657],{"class":262}," True\n",[19,153659,153660],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,153662,153664],{"id":153663},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[174,153666,153668],{"id":153667},"_1251-数据结构","12.5.1 数据结构",[194,153670,153672],{"className":30436,"code":153671,"language":30438,"meta":27,"style":27},"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",[200,153673,153674,153682,153713,153743,153772,153801],{"__ignoreMap":27},[203,153675,153676,153678,153680],{"class":205,"line":206},[203,153677,148523],{"class":213},[203,153679,259],{"class":209},[203,153681,55505],{"class":213},[203,153683,153684,153686,153688,153690,153692,153694,153697,153699,153702,153704,153706,153708,153711],{"class":205,"line":124},[203,153685,148443],{"class":213},[203,153687,148055],{"class":318},[203,153689,51495],{"class":213},[203,153691,148666],{"class":318},[203,153693,12525],{"class":213},[203,153695,153696],{"class":318},"\"category\"",[203,153698,51495],{"class":213},[203,153700,153701],{"class":318},"\"手机\"",[203,153703,12525],{"class":213},[203,153705,84142],{"class":318},[203,153707,51495],{"class":213},[203,153709,153710],{"class":262},"12000",[203,153712,5019],{"class":213},[203,153714,153715,153717,153719,153721,153723,153725,153727,153729,153732,153734,153736,153738,153741],{"class":205,"line":1269},[203,153716,148443],{"class":213},[203,153718,148055],{"class":318},[203,153720,51495],{"class":213},[203,153722,148666],{"class":318},[203,153724,12525],{"class":213},[203,153726,153696],{"class":318},[203,153728,51495],{"class":213},[203,153730,153731],{"class":318},"\"电脑\"",[203,153733,12525],{"class":213},[203,153735,84142],{"class":318},[203,153737,51495],{"class":213},[203,153739,153740],{"class":262},"18000",[203,153742,5019],{"class":213},[203,153744,153745,153747,153749,153751,153753,153755,153757,153759,153761,153763,153765,153767,153770],{"class":205,"line":1284},[203,153746,148443],{"class":213},[203,153748,148055],{"class":318},[203,153750,51495],{"class":213},[203,153752,148687],{"class":318},[203,153754,12525],{"class":213},[203,153756,153696],{"class":318},[203,153758,51495],{"class":213},[203,153760,153701],{"class":318},[203,153762,12525],{"class":213},[203,153764,84142],{"class":318},[203,153766,51495],{"class":213},[203,153768,153769],{"class":262},"15000",[203,153771,5019],{"class":213},[203,153773,153774,153776,153778,153780,153782,153784,153786,153788,153790,153792,153794,153796,153799],{"class":205,"line":1290},[203,153775,148443],{"class":213},[203,153777,148055],{"class":318},[203,153779,51495],{"class":213},[203,153781,148687],{"class":318},[203,153783,12525],{"class":213},[203,153785,153696],{"class":318},[203,153787,51495],{"class":213},[203,153789,153731],{"class":318},[203,153791,12525],{"class":213},[203,153793,84142],{"class":318},[203,153795,51495],{"class":213},[203,153797,153798],{"class":262},"16000",[203,153800,5019],{"class":213},[203,153802,153803],{"class":205,"line":1304},[203,153804,33304],{"class":213},[174,153806,153808],{"id":153807},"_1252-按日期统计","12.5.2 按日期统计",[194,153810,153812],{"className":30436,"code":153811,"language":30438,"meta":27,"style":27},"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",[200,153813,153814,153823,153827,153838,153852,153865,153884,153888],{"__ignoreMap":27},[203,153815,153816,153819,153821],{"class":205,"line":206},[203,153817,153818],{"class":213},"daily_total ",[203,153820,259],{"class":209},[203,153822,87926],{"class":213},[203,153824,153825],{"class":205,"line":124},[203,153826,2489],{"emptyLinePlaceholder":131},[203,153828,153829,153831,153833,153835],{"class":205,"line":1269},[203,153830,3114],{"class":209},[203,153832,148267],{"class":213},[203,153834,26101],{"class":209},[203,153836,153837],{"class":213}," sales:\n",[203,153839,153840,153843,153845,153848,153850],{"class":205,"line":1284},[203,153841,153842],{"class":213},"    date ",[203,153844,259],{"class":209},[203,153846,153847],{"class":213}," item[",[203,153849,148055],{"class":318},[203,153851,33304],{"class":213},[203,153853,153854,153857,153859,153861,153863],{"class":205,"line":1290},[203,153855,153856],{"class":213},"    amount ",[203,153858,259],{"class":209},[203,153860,153847],{"class":213},[203,153862,84142],{"class":318},[203,153864,33304],{"class":213},[203,153866,153867,153870,153872,153875,153877,153879,153881],{"class":205,"line":1304},[203,153868,153869],{"class":213},"    daily_total[date] ",[203,153871,259],{"class":209},[203,153873,153874],{"class":213}," daily_total.get(date, ",[203,153876,405],{"class":262},[203,153878,13804],{"class":213},[203,153880,695],{"class":209},[203,153882,153883],{"class":213}," amount\n",[203,153885,153886],{"class":205,"line":1310},[203,153887,2489],{"emptyLinePlaceholder":131},[203,153889,153890,153892],{"class":205,"line":1401},[203,153891,30473],{"class":262},[203,153893,153894],{"class":213},"(daily_total)\n",[174,153896,153898],{"id":153897},"_1253-按类别统计","12.5.3 按类别统计",[194,153900,153902],{"className":30436,"code":153901,"language":30438,"meta":27,"style":27},"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",[200,153903,153904,153913,153917,153927,153940,153952,153970,153974],{"__ignoreMap":27},[203,153905,153906,153909,153911],{"class":205,"line":206},[203,153907,153908],{"class":213},"category_total ",[203,153910,259],{"class":209},[203,153912,87926],{"class":213},[203,153914,153915],{"class":205,"line":124},[203,153916,2489],{"emptyLinePlaceholder":131},[203,153918,153919,153921,153923,153925],{"class":205,"line":1269},[203,153920,3114],{"class":209},[203,153922,148267],{"class":213},[203,153924,26101],{"class":209},[203,153926,153837],{"class":213},[203,153928,153929,153932,153934,153936,153938],{"class":205,"line":1284},[203,153930,153931],{"class":213},"    category ",[203,153933,259],{"class":209},[203,153935,153847],{"class":213},[203,153937,153696],{"class":318},[203,153939,33304],{"class":213},[203,153941,153942,153944,153946,153948,153950],{"class":205,"line":1290},[203,153943,153856],{"class":213},[203,153945,259],{"class":209},[203,153947,153847],{"class":213},[203,153949,84142],{"class":318},[203,153951,33304],{"class":213},[203,153953,153954,153957,153959,153962,153964,153966,153968],{"class":205,"line":1304},[203,153955,153956],{"class":213},"    category_total[category] ",[203,153958,259],{"class":209},[203,153960,153961],{"class":213}," category_total.get(category, ",[203,153963,405],{"class":262},[203,153965,13804],{"class":213},[203,153967,695],{"class":209},[203,153969,153883],{"class":213},[203,153971,153972],{"class":205,"line":1310},[203,153973,2489],{"emptyLinePlaceholder":131},[203,153975,153976,153978],{"class":205,"line":1401},[203,153977,30473],{"class":262},[203,153979,153980],{"class":213},"(category_total)\n",[174,153982,153984],{"id":153983},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[194,153986,153988],{"className":30436,"code":153987,"language":30438,"meta":27,"style":27},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[200,153989,153990,154015],{"__ignoreMap":27},[203,153991,153992,153995,153997,153999,154002,154005,154008,154011,154013],{"class":205,"line":206},[203,153993,153994],{"class":213},"top_date, top_amount ",[203,153996,259],{"class":209},[203,153998,6041],{"class":262},[203,154000,154001],{"class":213},"(daily_total.items(), ",[203,154003,154004],{"class":5306},"key",[203,154006,154007],{"class":209},"=lambda",[203,154009,154010],{"class":213}," item: item[",[203,154012,431],{"class":262},[203,154014,4746],{"class":213},[203,154016,154017,154019],{"class":205,"line":124},[203,154018,30473],{"class":262},[203,154020,154021],{"class":213},"(top_date, top_amount)\n",[14,154023,154025],{"id":154024},"_126-绘制柱状图","12.6 绘制柱状图",[194,154027,154029],{"className":30436,"code":154028,"language":30438,"meta":27,"style":27},"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",[200,154030,154031,154045,154056,154060,154068,154080,154092,154103,154107,154111,154121,154132,154146,154151,154168,154185,154201,154205],{"__ignoreMap":27},[203,154032,154033,154035,154037,154039,154041,154043],{"class":205,"line":206},[203,154034,30795],{"class":209},[203,154036,147437],{"class":213},[203,154038,30450],{"class":209},[203,154040,147442],{"class":213},[203,154042,31441],{"class":209},[203,154044,147447],{"class":213},[203,154046,154047,154049,154051,154053],{"class":205,"line":124},[203,154048,30795],{"class":209},[203,154050,147296],{"class":213},[203,154052,30450],{"class":209},[203,154054,154055],{"class":213}," Bar\n",[203,154057,154058],{"class":205,"line":1269},[203,154059,2489],{"emptyLinePlaceholder":131},[203,154061,154062,154064,154066],{"class":205,"line":1284},[203,154063,153908],{"class":213},[203,154065,259],{"class":209},[203,154067,15662],{"class":213},[203,154069,154070,154073,154075,154078],{"class":205,"line":1290},[203,154071,154072],{"class":318},"    \"手机\"",[203,154074,51495],{"class":213},[203,154076,154077],{"class":262},"27000",[203,154079,31524],{"class":213},[203,154081,154082,154085,154087,154090],{"class":205,"line":1304},[203,154083,154084],{"class":318},"    \"电脑\"",[203,154086,51495],{"class":213},[203,154088,154089],{"class":262},"34000",[203,154091,31524],{"class":213},[203,154093,154094,154097,154099,154101],{"class":205,"line":1310},[203,154095,154096],{"class":318},"    \"耳机\"",[203,154098,51495],{"class":213},[203,154100,124457],{"class":262},[203,154102,31524],{"class":213},[203,154104,154105],{"class":205,"line":1401},[203,154106,1654],{"class":213},[203,154108,154109],{"class":205,"line":1407},[203,154110,2489],{"emptyLinePlaceholder":131},[203,154112,154113,154116,154118],{"class":205,"line":1419},[203,154114,154115],{"class":213},"bar ",[203,154117,259],{"class":209},[203,154119,154120],{"class":213}," Bar()\n",[203,154122,154123,154126,154129],{"class":205,"line":1701},[203,154124,154125],{"class":213},"bar.add_xaxis(",[203,154127,154128],{"class":262},"list",[203,154130,154131],{"class":213},"(category_total.keys()))\n",[203,154133,154134,154137,154139,154141,154143],{"class":205,"line":1706},[203,154135,154136],{"class":213},"bar.add_yaxis(",[203,154138,147353],{"class":318},[203,154140,12525],{"class":213},[203,154142,154128],{"class":262},[203,154144,154145],{"class":213},"(category_total.values()))\n",[203,154147,154148],{"class":205,"line":1712},[203,154149,154150],{"class":213},"bar.set_global_opts(\n",[203,154152,154153,154155,154157,154159,154161,154163,154166],{"class":205,"line":1717},[203,154154,147531],{"class":5306},[203,154156,259],{"class":209},[203,154158,147536],{"class":213},[203,154160,51465],{"class":5306},[203,154162,259],{"class":209},[203,154164,154165],{"class":318},"\"品类销售额\"",[203,154167,38105],{"class":213},[203,154169,154170,154172,154174,154176,154178,154180,154183],{"class":205,"line":1731},[203,154171,147550],{"class":5306},[203,154173,259],{"class":209},[203,154175,147555],{"class":213},[203,154177,79868],{"class":5306},[203,154179,259],{"class":209},[203,154181,154182],{"class":318},"\"品类\"",[203,154184,38105],{"class":213},[203,154186,154187,154189,154191,154193,154195,154197,154199],{"class":205,"line":1736},[203,154188,147569],{"class":5306},[203,154190,259],{"class":209},[203,154192,147555],{"class":213},[203,154194,79868],{"class":5306},[203,154196,259],{"class":209},[203,154198,147353],{"class":318},[203,154200,38105],{"class":213},[203,154202,154203],{"class":205,"line":1742},[203,154204,220],{"class":213},[203,154206,154207,154210,154213],{"class":205,"line":1763},[203,154208,154209],{"class":213},"bar.render(",[203,154211,154212],{"class":318},"\"category_sales.html\"",[203,154214,220],{"class":213},[14,154216,154218],{"id":154217},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154220,154221],{},"时间线适合展示不同日期、月份、年份的数据变化。",[194,154223,154225],{"className":30436,"code":154224,"language":30438,"meta":27,"style":27},"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",[200,154226,154227,154241,154252,154256,154264,154288,154311,154336,154340,154344,154354,154358,154369,154378,154388,154402,154433,154438,154442],{"__ignoreMap":27},[203,154228,154229,154231,154233,154235,154237,154239],{"class":205,"line":206},[203,154230,30795],{"class":209},[203,154232,147437],{"class":213},[203,154234,30450],{"class":209},[203,154236,147442],{"class":213},[203,154238,31441],{"class":209},[203,154240,147447],{"class":213},[203,154242,154243,154245,154247,154249],{"class":205,"line":124},[203,154244,30795],{"class":209},[203,154246,147296],{"class":213},[203,154248,30450],{"class":209},[203,154250,154251],{"class":213}," Bar, Timeline\n",[203,154253,154254],{"class":205,"line":1269},[203,154255,2489],{"emptyLinePlaceholder":131},[203,154257,154258,154260,154262],{"class":205,"line":1284},[203,154259,101716],{"class":213},[203,154261,259],{"class":209},[203,154263,15662],{"class":213},[203,154265,154266,154269,154272,154274,154276,154278,154280,154282,154284,154286],{"class":205,"line":1290},[203,154267,154268],{"class":318},"    \"2024-10-01\"",[203,154270,154271],{"class":213},": {",[203,154273,153701],{"class":318},[203,154275,51495],{"class":213},[203,154277,153710],{"class":262},[203,154279,12525],{"class":213},[203,154281,153731],{"class":318},[203,154283,51495],{"class":213},[203,154285,153740],{"class":262},[203,154287,5019],{"class":213},[203,154289,154290,154293,154295,154297,154299,154301,154303,154305,154307,154309],{"class":205,"line":1304},[203,154291,154292],{"class":318},"    \"2024-10-02\"",[203,154294,154271],{"class":213},[203,154296,153701],{"class":318},[203,154298,51495],{"class":213},[203,154300,153769],{"class":262},[203,154302,12525],{"class":213},[203,154304,153731],{"class":318},[203,154306,51495],{"class":213},[203,154308,153798],{"class":262},[203,154310,5019],{"class":213},[203,154312,154313,154316,154318,154320,154322,154325,154327,154329,154331,154334],{"class":205,"line":1310},[203,154314,154315],{"class":318},"    \"2024-10-03\"",[203,154317,154271],{"class":213},[203,154319,153701],{"class":318},[203,154321,51495],{"class":213},[203,154323,154324],{"class":262},"17000",[203,154326,12525],{"class":213},[203,154328,153731],{"class":318},[203,154330,51495],{"class":213},[203,154332,154333],{"class":262},"19000",[203,154335,5019],{"class":213},[203,154337,154338],{"class":205,"line":1401},[203,154339,1654],{"class":213},[203,154341,154342],{"class":205,"line":1407},[203,154343,2489],{"emptyLinePlaceholder":131},[203,154345,154346,154349,154351],{"class":205,"line":1419},[203,154347,154348],{"class":213},"timeline ",[203,154350,259],{"class":209},[203,154352,154353],{"class":213}," Timeline()\n",[203,154355,154356],{"class":205,"line":1701},[203,154357,2489],{"emptyLinePlaceholder":131},[203,154359,154360,154362,154365,154367],{"class":205,"line":1706},[203,154361,3114],{"class":209},[203,154363,154364],{"class":213}," date, category_data ",[203,154366,26101],{"class":209},[203,154368,149206],{"class":213},[203,154370,154371,154374,154376],{"class":205,"line":1712},[203,154372,154373],{"class":213},"    bar ",[203,154375,259],{"class":209},[203,154377,154120],{"class":213},[203,154379,154380,154383,154385],{"class":205,"line":1717},[203,154381,154382],{"class":213},"    bar.add_xaxis(",[203,154384,154128],{"class":262},[203,154386,154387],{"class":213},"(category_data.keys()))\n",[203,154389,154390,154393,154395,154397,154399],{"class":205,"line":1731},[203,154391,154392],{"class":213},"    bar.add_yaxis(",[203,154394,147353],{"class":318},[203,154396,12525],{"class":213},[203,154398,154128],{"class":262},[203,154400,154401],{"class":213},"(category_data.values()))\n",[203,154403,154404,154407,154410,154412,154414,154416,154418,154420,154422,154424,154426,154428,154431],{"class":205,"line":1736},[203,154405,154406],{"class":213},"    bar.set_global_opts(",[203,154408,154409],{"class":5306},"title_opts",[203,154411,259],{"class":209},[203,154413,147536],{"class":213},[203,154415,51465],{"class":5306},[203,154417,259],{"class":209},[203,154419,266],{"class":209},[203,154421,465],{"class":318},[203,154423,1110],{"class":262},[203,154425,73984],{"class":213},[203,154427,1160],{"class":262},[203,154429,154430],{"class":318},"销售额\"",[203,154432,30555],{"class":213},[203,154434,154435],{"class":205,"line":1742},[203,154436,154437],{"class":213},"    timeline.add(bar, date)\n",[203,154439,154440],{"class":205,"line":1763},[203,154441,2489],{"emptyLinePlaceholder":131},[203,154443,154444,154447,154450],{"class":205,"line":1768},[203,154445,154446],{"class":213},"timeline.render(",[203,154448,154449],{"class":318},"\"timeline_sales.html\"",[203,154451,220],{"class":213},[14,154453,154455],{"id":154454},"_128-绘制地图","12.8 绘制地图",[19,154457,154458],{},"地图适合展示地区数据。",[194,154460,154462],{"className":30436,"code":154461,"language":30438,"meta":27,"style":27},"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",[200,154463,154464,154478,154489,154493,154501,154514,154526,154539,154552,154556,154560,154570,154585,154590,154607,154626,154630],{"__ignoreMap":27},[203,154465,154466,154468,154470,154472,154474,154476],{"class":205,"line":206},[203,154467,30795],{"class":209},[203,154469,147437],{"class":213},[203,154471,30450],{"class":209},[203,154473,147442],{"class":213},[203,154475,31441],{"class":209},[203,154477,147447],{"class":213},[203,154479,154480,154482,154484,154486],{"class":205,"line":124},[203,154481,30795],{"class":209},[203,154483,147296],{"class":213},[203,154485,30450],{"class":209},[203,154487,154488],{"class":213}," Map\n",[203,154490,154491],{"class":205,"line":1269},[203,154492,2489],{"emptyLinePlaceholder":131},[203,154494,154495,154497,154499],{"class":205,"line":1284},[203,154496,101716],{"class":213},[203,154498,259],{"class":209},[203,154500,55505],{"class":213},[203,154502,154503,154506,154508,154510,154512],{"class":205,"line":1290},[203,154504,154505],{"class":213},"    (",[203,154507,69327],{"class":318},[203,154509,12525],{"class":213},[203,154511,1031],{"class":262},[203,154513,38105],{"class":213},[203,154515,154516,154518,154520,154522,154524],{"class":205,"line":1304},[203,154517,154505],{"class":213},[203,154519,69347],{"class":318},[203,154521,12525],{"class":213},[203,154523,147370],{"class":262},[203,154525,38105],{"class":213},[203,154527,154528,154530,154533,154535,154537],{"class":205,"line":1310},[203,154529,154505],{"class":213},[203,154531,154532],{"class":318},"\"广东\"",[203,154534,12525],{"class":213},[203,154536,1811],{"class":262},[203,154538,38105],{"class":213},[203,154540,154541,154543,154546,154548,154550],{"class":205,"line":1401},[203,154542,154505],{"class":213},[203,154544,154545],{"class":318},"\"浙江\"",[203,154547,12525],{"class":213},[203,154549,147375],{"class":262},[203,154551,38105],{"class":213},[203,154553,154554],{"class":205,"line":1407},[203,154555,33304],{"class":213},[203,154557,154558],{"class":205,"line":1419},[203,154559,2489],{"emptyLinePlaceholder":131},[203,154561,154562,154565,154567],{"class":205,"line":1701},[203,154563,154564],{"class":213},"map_chart ",[203,154566,259],{"class":209},[203,154568,154569],{"class":213}," Map()\n",[203,154571,154572,154575,154577,154580,154583],{"class":205,"line":1706},[203,154573,154574],{"class":213},"map_chart.add(",[203,154576,147353],{"class":318},[203,154578,154579],{"class":213},", data, ",[203,154581,154582],{"class":318},"\"china\"",[203,154584,220],{"class":213},[203,154586,154587],{"class":205,"line":1712},[203,154588,154589],{"class":213},"map_chart.set_global_opts(\n",[203,154591,154592,154594,154596,154598,154600,154602,154605],{"class":205,"line":1717},[203,154593,147531],{"class":5306},[203,154595,259],{"class":209},[203,154597,147536],{"class":213},[203,154599,51465],{"class":5306},[203,154601,259],{"class":209},[203,154603,154604],{"class":318},"\"地区销售额\"",[203,154606,38105],{"class":213},[203,154608,154609,154612,154614,154617,154620,154622,154624],{"class":205,"line":1731},[203,154610,154611],{"class":5306},"    visualmap_opts",[203,154613,259],{"class":209},[203,154615,154616],{"class":213},"opts.VisualMapOpts(",[203,154618,154619],{"class":5306},"max_",[203,154621,259],{"class":209},[203,154623,1811],{"class":262},[203,154625,38105],{"class":213},[203,154627,154628],{"class":205,"line":1736},[203,154629,220],{"class":213},[203,154631,154632,154635,154638],{"class":205,"line":1742},[203,154633,154634],{"class":213},"map_chart.render(",[203,154636,154637],{"class":318},"\"map_sales.html\"",[203,154639,220],{"class":213},[19,154641,154642],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154644,154646],{"id":154645},"_129-项目拆分建议","12.9 项目拆分建议",[19,154648,154649],{},"当代码超过一个文件时，可以这样组织：",[194,154651,154654],{"className":154652,"code":154653,"language":5277,"meta":27},[5275],"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",[200,154655,154653],{"__ignoreMap":27},[19,154657,154658],{},"职责：",[157,154660,154661,154667,154673,154679],{},[160,154662,154663,154666],{},[200,154664,154665],{},"main.py","：程序入口。",[160,154668,154669,154672],{},[200,154670,154671],{},"file_utils.py","：读写 JSON。",[160,154674,154675,154678],{},[200,154676,154677],{},"sales_service.py","：统计销售数据。",[160,154680,154681,154684],{},[200,154682,154683],{},"chart_builder.py","：生成图表。",[14,154686,154688],{"id":154687},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,154690,154691],{},"语法基础：",[157,154693,154694,154697,154700,154703],{},[160,154695,154696],{},"会写变量、注释、输入输出。",[160,154698,154699],{},"会使用 int、float、str、bool。",[160,154701,154702],{},"会做类型转换。",[160,154704,154705],{},"会使用 f-string 格式化输出。",[19,154707,154708],{},"流程控制：",[157,154710,154711,154717,154723,154731],{},[160,154712,154713,154714,28443],{},"会写 ",[200,154715,154716],{},"if elif else",[160,154718,154713,154719,101076,154721,28443],{},[200,154720,108721],{},[200,154722,3114],{},[160,154724,154725,154726,101076,154728,28443],{},"理解 ",[200,154727,2142],{},[200,154729,154730],{},"continue",[160,154732,154733],{},"能写嵌套循环。",[19,154735,154736],{},"函数：",[157,154738,154739,154742,154745,154748],{},[160,154740,154741],{},"会定义和调用函数。",[160,154743,154744],{},"理解参数和返回值。",[160,154746,154747],{},"知道局部变量和全局变量。",[160,154749,154750],{},"会使用默认参数、关键字参数、不定长参数。",[19,154752,154753],{},"容器：",[157,154755,154756,154759,154762,154765,154768],{},[160,154757,154758],{},"会使用列表增删改查。",[160,154760,154761],{},"会遍历列表、字典。",[160,154763,154764],{},"会使用切片。",[160,154766,154767],{},"会用集合去重。",[160,154769,154770],{},"会处理列表嵌套字典。",[19,154772,154773],{},"文件和模块：",[157,154775,154776,154779,154782,154785,154788],{},[160,154777,154778],{},"会读写文本文件。",[160,154780,154781],{},"会读写 JSON。",[160,154783,154784],{},"会捕获常见异常。",[160,154786,154787],{},"会导入模块和第三方包。",[160,154789,154790],{},"会创建简单包结构。",[19,154792,154793],{},"项目能力：",[157,154795,154796,154799,154802,154805,154808],{},[160,154797,154798],{},"能把代码拆成函数。",[160,154800,154801],{},"能把数据保存到文件。",[160,154803,154804],{},"能处理用户输入错误。",[160,154806,154807],{},"能写一个完整菜单程序。",[160,154809,154810],{},"能用 pyecharts 生成图表。",[14,154812,154814],{"id":154813},"_1211-推荐练习顺序","12.11 推荐练习顺序",[157,154816,154817,154820,154823,154826,154829,154832,154835,154838],{},[160,154818,154819],{},"猜数字游戏。",[160,154821,154822],{},"ATM 菜单程序。",[160,154824,154825],{},"学生成绩统计。",[160,154827,154828],{},"学生管理系统函数版。",[160,154830,154831],{},"学生管理系统文件持久化版。",[160,154833,154834],{},"学生管理系统面向对象版。",[160,154836,154837],{},"销售数据统计。",[160,154839,154840],{},"销售数据可视化。",[14,154842,154844],{"id":154843},"_1212-常见学习误区","12.12 常见学习误区",[157,154846,154847,154850,154853,154856,154859,154862,154865],{},[160,154848,154849],{},"只看视频不敲代码。",[160,154851,154852],{},"一报错就复制错误去搜，不先读报错位置。",[160,154854,154855],{},"变量名随便写，后续自己看不懂。",[160,154857,154858],{},"所有代码都写在一个文件一个函数里。",[160,154860,154861],{},"不保存练习代码，复习时没有材料。",[160,154863,154864],{},"还没掌握列表字典就急着学框架。",[160,154866,154867],{},"不会读官方文档，只依赖教程。",[14,154869,154871],{"id":154870},"_1213-如何读报错","12.13 如何读报错",[19,154873,154874],{},"报错通常从下往上看最后几行。",[19,154876,15225],{},[194,154878,154881],{"className":154879,"code":154880,"language":5277,"meta":27},[5275],"ValueError: invalid literal for int() with base 10: 'abc'\n",[200,154882,154880],{"__ignoreMap":27},[19,154884,24657],{},[157,154886,154887,154893,154903],{},[160,154888,154889,154890,28443],{},"异常类型是 ",[200,154891,154892],{},"ValueError",[160,154894,107403,154895,154898,154899,154902],{},[200,154896,154897],{},"int()"," 无法把 ",[200,154900,154901],{},"'abc'"," 转成整数。",[160,154904,154905],{},"应该检查输入内容或增加异常处理。",[19,154907,154908],{},"再看文件名和行号：",[194,154910,154913],{"className":154911,"code":154912,"language":5277,"meta":27},[5275],"File \"main.py\", line 10, in \u003Cmodule>\n",[200,154914,154912],{"__ignoreMap":27},[19,154916,154917,154918,154920],{},"表示错误发生在 ",[200,154919,154665],{}," 第 10 行。",[14,154922,154924],{"id":154923},"_1214-后续学习方向","12.14 后续学习方向",[19,154926,154927],{},"Python 基础完成后，可以按兴趣选择方向：",[157,154929,154930,154942,154951,154963,154974,154983,154993],{},[160,154931,154932,154933,426,154936,426,154939,28443],{},"自动化办公：",[200,154934,154935],{},"openpyxl",[200,154937,154938],{},"python-docx",[200,154940,154941],{},"pdfplumber",[160,154943,154944,154945,426,154947,426,154949,28443],{},"数据分析：",[200,154946,100684],{},[200,154948,146243],{},[200,154950,146251],{},[160,154952,154953,154954,426,154957,426,154960,28443],{},"Web 后端：",[200,154955,154956],{},"Flask",[200,154958,154959],{},"FastAPI",[200,154961,154962],{},"Django",[160,154964,154965,154966,426,154968,426,154971,28443],{},"爬虫：",[200,154967,146228],{},[200,154969,154970],{},"BeautifulSoup",[200,154972,154973],{},"Scrapy",[160,154975,154976,154977,426,154979,154982],{},"测试开发：",[200,154978,146275],{},[200,154980,154981],{},"selenium","、接口测试。",[160,154984,154985,154986,426,154988,426,154990,28443],{},"人工智能：",[200,154987,100684],{},[200,154989,146243],{},[200,154991,154992],{},"pytorch",[160,154994,154995,154996,426,154998,426,155001,28443],{},"运维脚本：",[200,154997,145844],{},[200,154999,155000],{},"subprocess",[200,155002,155003],{},"paramiko",[19,155005,155006],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155008,155010],{"id":155009},"_1215-结课练习","12.15 结课练习",[157,155012,155013,155016,155019,155022,155025,155028,155031,155034],{},[160,155014,155015],{},"完成函数版学生管理系统。",[160,155017,155018],{},"给学生管理系统增加 JSON 持久化。",[160,155020,155021],{},"给学生管理系统增加异常处理。",[160,155023,155024],{},"把学生管理系统改成面向对象版。",[160,155026,155027],{},"使用 pyecharts 绘制学生成绩柱状图。",[160,155029,155030],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[160,155032,155033],{},"按品类统计销售额并绘制柱状图。",[160,155035,155036],{},"写一份自己的 Python 学习路线图。",[5216,155038,155039],{},"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":27,"searchDepth":124,"depth":124,"links":155041},[155042,155043,155046,155047,155048,155054,155055,155056,155057,155058,155059,155060,155061,155062,155063],{"id":151758,"depth":124,"text":151759},{"id":151808,"depth":124,"text":151809,"children":155044},[155045],{"id":151812,"depth":1269,"text":151813},{"id":151851,"depth":124,"text":151852},{"id":153325,"depth":124,"text":153326},{"id":153663,"depth":124,"text":153664,"children":155049},[155050,155051,155052,155053],{"id":153667,"depth":1269,"text":153668},{"id":153807,"depth":1269,"text":153808},{"id":153897,"depth":1269,"text":153898},{"id":153983,"depth":1269,"text":153984},{"id":154024,"depth":124,"text":154025},{"id":154217,"depth":124,"text":154218},{"id":154454,"depth":124,"text":154455},{"id":154645,"depth":124,"text":154646},{"id":154687,"depth":124,"text":154688},{"id":154813,"depth":124,"text":154814},{"id":154843,"depth":124,"text":154844},{"id":154870,"depth":124,"text":154871},{"id":154923,"depth":124,"text":154924},{"id":155009,"depth":124,"text":155010},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151750,"description":23467},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155070,"title":155071,"body":155072,"description":23467,"extension":129,"meta":157541,"navigation":131,"path":157542,"seo":157543,"stem":157544,"__hash__":157545},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155073,"toc":157516},[155074,155077,155081,155084,155087,155107,155110,155133,155136,155139,155161,155164,155186,155190,155193,155233,155236,155357,155361,155364,155404,155407,155431,155434,155438,155441,155455,155488,155491,155526,155529,155552,155555,155588,155591,155593,155599,155674,155677,155683,155700,155740,155744,155747,155793,155795,155833,155836,155871,155874,155909,155912,155944,155947,155966,155970,155974,156087,156089,156164,156168,156214,156217,156243,156252,156256,156259,156322,156330,156358,156362,156402,156467,156471,156474,156513,156516,156561,156564,156625,156629,156656,156659,156687,156690,156694,156698,156763,156766,156804,156807,156839,156843,156942,156946,156949,157022,157025,157073,157077,157083,157123,157126,157173,157176,157225,157229,157231,157245,157247,157428,157432,157459,157479,157486,157490,157507,157513],[10,155075,155071],{"id":155076},"_2-基础语法变量与字符串",[14,155078,155080],{"id":155079},"_21-注释","2.1 注释",[19,155082,155083],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155085,155086],{},"单行注释：",[194,155088,155090],{"className":30436,"code":155089,"language":30438,"meta":27,"style":27},"# 这是单行注释\nprint(\"hello\")\n",[200,155091,155092,155097],{"__ignoreMap":27},[203,155093,155094],{"class":205,"line":206},[203,155095,155096],{"class":272},"# 这是单行注释\n",[203,155098,155099,155101,155103,155105],{"class":205,"line":124},[203,155100,30473],{"class":262},[203,155102,214],{"class":213},[203,155104,5934],{"class":318},[203,155106,220],{"class":213},[19,155108,155109],{},"多行说明常用三引号：",[194,155111,155113],{"className":30436,"code":155112,"language":30438,"meta":27,"style":27},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[200,155114,155115,155119,155124,155129],{"__ignoreMap":27},[203,155116,155117],{"class":205,"line":206},[203,155118,95756],{"class":318},[203,155120,155121],{"class":205,"line":124},[203,155122,155123],{"class":318},"这是多行说明。\n",[203,155125,155126],{"class":205,"line":1269},[203,155127,155128],{"class":318},"常用于文件顶部说明、函数说明等。\n",[203,155130,155131],{"class":205,"line":1284},[203,155132,95756],{"class":318},[19,155134,155135],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155137,155138],{},"不好：",[194,155140,155142],{"className":30436,"code":155141,"language":30438,"meta":27,"style":27},"# age 加 1\nage = age + 1\n",[200,155143,155144,155149],{"__ignoreMap":27},[203,155145,155146],{"class":205,"line":206},[203,155147,155148],{"class":272},"# age 加 1\n",[203,155150,155151,155153,155155,155157,155159],{"class":205,"line":124},[203,155152,146604],{"class":213},[203,155154,259],{"class":209},[203,155156,15797],{"class":213},[203,155158,695],{"class":209},[203,155160,55757],{"class":262},[19,155162,155163],{},"较好：",[194,155165,155167],{"className":30436,"code":155166,"language":30438,"meta":27,"style":27},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[200,155168,155169,155174],{"__ignoreMap":27},[203,155170,155171],{"class":205,"line":206},[203,155172,155173],{"class":272},"# 用户过完生日后，年龄增加一岁\n",[203,155175,155176,155178,155180,155182,155184],{"class":205,"line":124},[203,155177,146604],{"class":213},[203,155179,259],{"class":209},[203,155181,15797],{"class":213},[203,155183,695],{"class":209},[203,155185,55757],{"class":262},[14,155187,155189],{"id":155188},"_22-字面量","2.2 字面量",[19,155191,155192],{},"字面量就是代码中直接写出来的数据。",[194,155194,155196],{"className":30436,"code":155195,"language":30438,"meta":27,"style":27},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[200,155197,155198,155205,155212,155219,155226],{"__ignoreMap":27},[203,155199,155200,155202],{"class":205,"line":206},[203,155201,525],{"class":262},[203,155203,155204],{"class":272},"          # 整数\n",[203,155206,155207,155209],{"class":205,"line":124},[203,155208,263],{"class":262},[203,155210,155211],{"class":272},"         # 小数\n",[203,155213,155214,155216],{"class":205,"line":1269},[203,155215,5934],{"class":318},[203,155217,155218],{"class":272},"      # 字符串\n",[203,155220,155221,155223],{"class":205,"line":1284},[203,155222,31534],{"class":262},[203,155224,155225],{"class":272},"         # 布尔值\n",[203,155227,155228,155230],{"class":205,"line":1290},[203,155229,95744],{"class":262},[203,155231,155232],{"class":272},"         # 空值\n",[19,155234,155235],{},"常见字面量类型：",[351,155237,155238,155248],{},[354,155239,155240],{},[357,155241,155242,155244,155246],{},[360,155243,23828],{},[360,155245,27550],{},[360,155247,25927],{},[398,155249,155250,155261,155272,155283,155295,155307,155319,155332,155344],{},[357,155251,155252,155254,155258],{},[403,155253,217],{},[403,155255,155256],{},[200,155257,525],{},[403,155259,155260],{},"整数",[357,155262,155263,155265,155269],{},[403,155264,253],{},[403,155266,155267],{},[200,155268,263],{},[403,155270,155271],{},"浮点数",[357,155273,155274,155276,155280],{},[403,155275,1389],{},[403,155277,155278],{},[200,155279,5934],{},[403,155281,155282],{},"字符串",[357,155284,155285,155287,155293],{},[403,155286,1444],{},[403,155288,155289,426,155291],{},[200,155290,31534],{},[200,155292,34045],{},[403,155294,66073],{},[357,155296,155297,155300,155304],{},[403,155298,155299],{},"NoneType",[403,155301,155302],{},[200,155303,95744],{},[403,155305,155306],{},"空值",[357,155308,155309,155311,155316],{},[403,155310,154128],{},[403,155312,155313],{},[200,155314,155315],{},"[1, 2, 3]",[403,155317,155318],{},"列表",[357,155320,155321,155324,155329],{},[403,155322,155323],{},"tuple",[403,155325,155326],{},[200,155327,155328],{},"(1, 2, 3)",[403,155330,155331],{},"元组",[357,155333,155334,155336,155341],{},[403,155335,114604],{},[403,155337,155338],{},[200,155339,155340],{},"{\"name\": \"张三\"}",[403,155342,155343],{},"字典",[357,155345,155346,155349,155354],{},[403,155347,155348],{},"set",[403,155350,155351],{},[200,155352,155353],{},"{1, 2, 3}",[403,155355,155356],{},"集合",[14,155358,155360],{"id":155359},"_23-变量","2.3 变量",[19,155362,155363],{},"变量是保存数据的名字。",[194,155365,155367],{"className":30436,"code":155366,"language":30438,"meta":27,"style":27},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[200,155368,155369,155377,155385,155395],{"__ignoreMap":27},[203,155370,155371,155373,155375],{"class":205,"line":206},[203,155372,146594],{"class":213},[203,155374,259],{"class":209},[203,155376,149411],{"class":318},[203,155378,155379,155381,155383],{"class":205,"line":124},[203,155380,146604],{"class":213},[203,155382,259],{"class":209},[203,155384,146609],{"class":262},[203,155386,155387,155390,155392],{"class":205,"line":1269},[203,155388,155389],{"class":213},"height ",[203,155391,259],{"class":209},[203,155393,155394],{"class":262}," 1.75\n",[203,155396,155397,155400,155402],{"class":205,"line":1284},[203,155398,155399],{"class":213},"is_student ",[203,155401,259],{"class":209},[203,155403,153657],{"class":262},[19,155405,155406],{},"Python 的变量不需要提前声明类型：",[194,155408,155410],{"className":30436,"code":155409,"language":30438,"meta":27,"style":27},"score = 100\nscore = \"满分\"\n",[200,155411,155412,155422],{"__ignoreMap":27},[203,155413,155414,155417,155419],{"class":205,"line":206},[203,155415,155416],{"class":213},"score ",[203,155418,259],{"class":209},[203,155420,155421],{"class":262}," 100\n",[203,155423,155424,155426,155428],{"class":205,"line":124},[203,155425,155416],{"class":213},[203,155427,259],{"class":209},[203,155429,155430],{"class":318}," \"满分\"\n",[19,155432,155433],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155435,155437],{"id":155436},"_24-变量命名规则","2.4 变量命名规则",[19,155439,155440],{},"硬性规则：",[157,155442,155443,155446,155449,155452],{},[160,155444,155445],{},"只能由字母、数字、下划线组成。",[160,155447,155448],{},"不能以数字开头。",[160,155450,155451],{},"不能使用 Python 关键字。",[160,155453,155454],{},"区分大小写。",[194,155456,155458],{"className":30436,"code":155457,"language":30438,"meta":27,"style":27},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[200,155459,155460,155469,155478],{"__ignoreMap":27},[203,155461,155462,155465,155467],{"class":205,"line":206},[203,155463,155464],{"class":213},"user_name ",[203,155466,259],{"class":209},[203,155468,146599],{"class":318},[203,155470,155471,155474,155476],{"class":205,"line":124},[203,155472,155473],{"class":213},"age2 ",[203,155475,259],{"class":209},[203,155477,146609],{"class":262},[203,155479,155480,155483,155485],{"class":205,"line":1269},[203,155481,155482],{"class":213},"_token ",[203,155484,259],{"class":209},[203,155486,155487],{"class":318}," \"abc\"\n",[19,155489,155490],{},"错误写法：",[194,155492,155494],{"className":30436,"code":155493,"language":30438,"meta":27,"style":27},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[200,155495,155496,155505,155517],{"__ignoreMap":27},[203,155497,155498,155501,155503],{"class":205,"line":206},[203,155499,155500],{"class":77461},"2age",[203,155502,13654],{"class":209},[203,155504,146609],{"class":262},[203,155506,155507,155509,155511,155513,155515],{"class":205,"line":124},[203,155508,131642],{"class":213},[203,155510,746],{"class":209},[203,155512,146594],{"class":213},[203,155514,259],{"class":209},[203,155516,146599],{"class":318},[203,155518,155519,155521,155523],{"class":205,"line":1269},[203,155520,14784],{"class":209},[203,155522,13654],{"class":209},[203,155524,155525],{"class":318}," \"一班\"\n",[19,155527,155528],{},"查看关键字：",[194,155530,155532],{"className":30436,"code":155531,"language":30438,"meta":27,"style":27},"import keyword\n\nprint(keyword.kwlist)\n",[200,155533,155534,155541,155545],{"__ignoreMap":27},[203,155535,155536,155538],{"class":205,"line":206},[203,155537,30450],{"class":209},[203,155539,155540],{"class":213}," keyword\n",[203,155542,155543],{"class":205,"line":124},[203,155544,2489],{"emptyLinePlaceholder":131},[203,155546,155547,155549],{"class":205,"line":1269},[203,155548,30473],{"class":262},[203,155550,155551],{"class":213},"(keyword.kwlist)\n",[19,155553,155554],{},"推荐命名风格：",[194,155556,155558],{"className":30436,"code":155557,"language":30438,"meta":27,"style":27},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[200,155559,155560,155569,155579],{"__ignoreMap":27},[203,155561,155562,155565,155567],{"class":205,"line":206},[203,155563,155564],{"class":213},"student_name ",[203,155566,259],{"class":209},[203,155568,149411],{"class":318},[203,155570,155571,155574,155576],{"class":205,"line":124},[203,155572,155573],{"class":213},"total_price ",[203,155575,259],{"class":209},[203,155577,155578],{"class":262}," 99.8\n",[203,155580,155581,155584,155586],{"class":205,"line":1269},[203,155582,155583],{"class":213},"is_finished ",[203,155585,259],{"class":209},[203,155587,125865],{"class":262},[19,155589,155590],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155592,50790],{"id":50789},[19,155594,104424,155595,155598],{},[200,155596,155597],{},"type()"," 查看数据类型：",[194,155600,155602],{"className":30436,"code":155601,"language":30438,"meta":27,"style":27},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[200,155603,155604,155618,155632,155646,155660],{"__ignoreMap":27},[203,155605,155606,155608,155610,155612,155614,155616],{"class":205,"line":206},[203,155607,30473],{"class":262},[203,155609,214],{"class":213},[203,155611,103165],{"class":262},[203,155613,214],{"class":213},[203,155615,525],{"class":262},[203,155617,30555],{"class":213},[203,155619,155620,155622,155624,155626,155628,155630],{"class":205,"line":124},[203,155621,30473],{"class":262},[203,155623,214],{"class":213},[203,155625,103165],{"class":262},[203,155627,214],{"class":213},[203,155629,263],{"class":262},[203,155631,30555],{"class":213},[203,155633,155634,155636,155638,155640,155642,155644],{"class":205,"line":1269},[203,155635,30473],{"class":262},[203,155637,214],{"class":213},[203,155639,103165],{"class":262},[203,155641,214],{"class":213},[203,155643,5934],{"class":318},[203,155645,30555],{"class":213},[203,155647,155648,155650,155652,155654,155656,155658],{"class":205,"line":1284},[203,155649,30473],{"class":262},[203,155651,214],{"class":213},[203,155653,103165],{"class":262},[203,155655,214],{"class":213},[203,155657,31534],{"class":262},[203,155659,30555],{"class":213},[203,155661,155662,155664,155666,155668,155670,155672],{"class":205,"line":1290},[203,155663,30473],{"class":262},[203,155665,214],{"class":213},[203,155667,103165],{"class":262},[203,155669,214],{"class":213},[203,155671,95744],{"class":262},[203,155673,30555],{"class":213},[19,155675,155676],{},"输出类似：",[194,155678,155681],{"className":155679,"code":155680,"language":5277,"meta":27},[5275],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[200,155682,155680],{"__ignoreMap":27},[19,155684,9115,155685,107341,155687,155689,155690,155692,155693,21590,155695,155692,155697,155699],{},[200,155686,1444],{},[200,155688,217],{}," 的子类，",[200,155691,31534],{}," 可以当作 ",[200,155694,431],{},[200,155696,34045],{},[200,155698,405],{},"，但业务代码中不要滥用。",[194,155701,155703],{"className":30436,"code":155702,"language":30438,"meta":27,"style":27},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[200,155704,155705,155723],{"__ignoreMap":27},[203,155706,155707,155709,155711,155713,155715,155717,155720],{"class":205,"line":206},[203,155708,30473],{"class":262},[203,155710,214],{"class":213},[203,155712,31534],{"class":262},[203,155714,45624],{"class":209},[203,155716,25176],{"class":262},[203,155718,155719],{"class":213},")   ",[203,155721,155722],{"class":272},"# 2\n",[203,155724,155725,155727,155729,155731,155733,155735,155737],{"class":205,"line":124},[203,155726,30473],{"class":262},[203,155728,214],{"class":213},[203,155730,34045],{"class":262},[203,155732,45624],{"class":209},[203,155734,25176],{"class":262},[203,155736,45866],{"class":213},[203,155738,155739],{"class":272},"# 1\n",[14,155741,155743],{"id":155742},"_26-类型转换","2.6 类型转换",[19,155745,155746],{},"常用转换函数：",[194,155748,155750],{"className":30436,"code":155749,"language":30438,"meta":27,"style":27},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[200,155751,155752,155762,155773,155783],{"__ignoreMap":27},[203,155753,155754,155756,155758,155760],{"class":205,"line":206},[203,155755,217],{"class":262},[203,155757,214],{"class":213},[203,155759,54374],{"class":318},[203,155761,220],{"class":213},[203,155763,155764,155766,155768,155771],{"class":205,"line":124},[203,155765,253],{"class":262},[203,155767,214],{"class":213},[203,155769,155770],{"class":318},"\"3.14\"",[203,155772,220],{"class":213},[203,155774,155775,155777,155779,155781],{"class":205,"line":1269},[203,155776,1389],{"class":262},[203,155778,214],{"class":213},[203,155780,525],{"class":262},[203,155782,220],{"class":213},[203,155784,155785,155787,155789,155791],{"class":205,"line":1284},[203,155786,1444],{"class":262},[203,155788,214],{"class":213},[203,155790,431],{"class":262},[203,155792,220],{"class":213},[19,155794,15225],{},[194,155796,155798],{"className":30436,"code":155797,"language":30438,"meta":27,"style":27},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[200,155799,155800,155809,155820],{"__ignoreMap":27},[203,155801,155802,155804,155806],{"class":205,"line":206},[203,155803,146604],{"class":213},[203,155805,259],{"class":209},[203,155807,155808],{"class":318}," \"18\"\n",[203,155810,155811,155813,155815,155817],{"class":205,"line":124},[203,155812,146604],{"class":213},[203,155814,259],{"class":209},[203,155816,2471],{"class":262},[203,155818,155819],{"class":213},"(age)\n",[203,155821,155822,155824,155827,155829,155831],{"class":205,"line":1269},[203,155823,30473],{"class":262},[203,155825,155826],{"class":213},"(age ",[203,155828,695],{"class":209},[203,155830,25176],{"class":262},[203,155832,220],{"class":213},[19,155834,155835],{},"输入得到的内容永远是字符串：",[194,155837,155839],{"className":30436,"code":155838,"language":30438,"meta":27,"style":27},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[200,155840,155841,155857],{"__ignoreMap":27},[203,155842,155843,155846,155848,155850,155852,155855],{"class":205,"line":206},[203,155844,155845],{"class":213},"num ",[203,155847,259],{"class":209},[203,155849,60663],{"class":262},[203,155851,214],{"class":213},[203,155853,155854],{"class":318},"\"请输入数字:\"",[203,155856,220],{"class":213},[203,155858,155859,155861,155863,155865,155868],{"class":205,"line":124},[203,155860,30473],{"class":262},[203,155862,214],{"class":213},[203,155864,103165],{"class":262},[203,155866,155867],{"class":213},"(num))  ",[203,155869,155870],{"class":272},"# str\n",[19,155872,155873],{},"如果要做数学运算，必须转换：",[194,155875,155877],{"className":30436,"code":155876,"language":30438,"meta":27,"style":27},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[200,155878,155879,155897],{"__ignoreMap":27},[203,155880,155881,155883,155885,155887,155889,155891,155893,155895],{"class":205,"line":206},[203,155882,155845],{"class":213},[203,155884,259],{"class":209},[203,155886,2471],{"class":262},[203,155888,214],{"class":213},[203,155890,53879],{"class":262},[203,155892,214],{"class":213},[203,155894,155854],{"class":318},[203,155896,30555],{"class":213},[203,155898,155899,155901,155903,155905,155907],{"class":205,"line":124},[203,155900,30473],{"class":262},[203,155902,45677],{"class":213},[203,155904,695],{"class":209},[203,155906,2127],{"class":262},[203,155908,220],{"class":213},[19,155910,155911],{},"常见错误：",[194,155913,155915],{"className":30436,"code":155914,"language":30438,"meta":27,"style":27},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[200,155916,155917,155930],{"__ignoreMap":27},[203,155918,155919,155921,155923,155925,155927],{"class":205,"line":206},[203,155920,217],{"class":262},[203,155922,214],{"class":213},[203,155924,155770],{"class":318},[203,155926,155719],{"class":213},[203,155928,155929],{"class":272},"# 错误\n",[203,155931,155932,155934,155936,155939,155942],{"class":205,"line":124},[203,155933,217],{"class":262},[203,155935,214],{"class":213},[203,155937,155938],{"class":318},"\"abc\"",[203,155940,155941],{"class":213},")    ",[203,155943,155929],{"class":272},[19,155945,155946],{},"正确写法：",[194,155948,155950],{"className":30436,"code":155949,"language":30438,"meta":27,"style":27},"num = float(\"3.14\")\n",[200,155951,155952],{"__ignoreMap":27},[203,155953,155954,155956,155958,155960,155962,155964],{"class":205,"line":206},[203,155955,155845],{"class":213},[203,155957,259],{"class":209},[203,155959,109855],{"class":262},[203,155961,214],{"class":213},[203,155963,155770],{"class":318},[203,155965,220],{"class":213},[14,155967,155969],{"id":155968},"_27-运算符","2.7 运算符",[174,155971,155973],{"id":155972},"_271-算术运算符","2.7.1 算术运算符",[351,155975,155976,155987],{},[354,155977,155978],{},[357,155979,155980,155983,155985],{},[360,155981,155982],{},"运算符",[360,155984,25927],{},[360,155986,27550],{},[398,155988,155989,156003,156017,156031,156045,156059,156073],{},[357,155990,155991,155995,155998],{},[403,155992,155993],{},[200,155994,695],{},[403,155996,155997],{},"加法",[403,155999,156000],{},[200,156001,156002],{},"1 + 2",[357,156004,156005,156009,156012],{},[403,156006,156007],{},[200,156008,746],{},[403,156010,156011],{},"减法",[403,156013,156014],{},[200,156015,156016],{},"5 - 3",[357,156018,156019,156023,156026],{},[403,156020,156021],{},[200,156022,669],{},[403,156024,156025],{},"乘法",[403,156027,156028],{},[200,156029,156030],{},"2 * 3",[357,156032,156033,156037,156040],{},[403,156034,156035],{},[200,156036,798],{},[403,156038,156039],{},"除法，结果是浮点数",[403,156041,156042],{},[200,156043,156044],{},"5 \u002F 2",[357,156046,156047,156051,156054],{},[403,156048,156049],{},[200,156050,33387],{},[403,156052,156053],{},"整除",[403,156055,156056],{},[200,156057,156058],{},"5 \u002F\u002F 2",[357,156060,156061,156065,156068],{},[403,156062,156063],{},[200,156064,542],{},[403,156066,156067],{},"取余",[403,156069,156070],{},[200,156071,156072],{},"5 % 2",[357,156074,156075,156079,156082],{},[403,156076,156077],{},[200,156078,10751],{},[403,156080,156081],{},"幂运算",[403,156083,156084],{},[200,156085,156086],{},"2 ** 3",[19,156088,15225],{},[194,156090,156092],{"className":30436,"code":156091,"language":30438,"meta":27,"style":27},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[200,156093,156094,156112,156129,156146],{"__ignoreMap":27},[203,156095,156096,156098,156100,156102,156105,156107,156109],{"class":205,"line":206},[203,156097,30473],{"class":262},[203,156099,214],{"class":213},[203,156101,533],{"class":262},[203,156103,156104],{"class":209}," \u002F",[203,156106,14845],{"class":262},[203,156108,155719],{"class":213},[203,156110,156111],{"class":272},"# 2.5\n",[203,156113,156114,156116,156118,156120,156123,156125,156127],{"class":205,"line":124},[203,156115,30473],{"class":262},[203,156117,214],{"class":213},[203,156119,533],{"class":262},[203,156121,156122],{"class":209}," \u002F\u002F",[203,156124,14845],{"class":262},[203,156126,45866],{"class":213},[203,156128,155722],{"class":272},[203,156130,156131,156133,156135,156137,156140,156142,156144],{"class":205,"line":1269},[203,156132,30473],{"class":262},[203,156134,214],{"class":213},[203,156136,533],{"class":262},[203,156138,156139],{"class":209}," %",[203,156141,14845],{"class":262},[203,156143,155719],{"class":213},[203,156145,155739],{"class":272},[203,156147,156148,156150,156152,156154,156157,156159,156161],{"class":205,"line":1284},[203,156149,30473],{"class":262},[203,156151,214],{"class":213},[203,156153,291],{"class":262},[203,156155,156156],{"class":209}," **",[203,156158,78128],{"class":262},[203,156160,45866],{"class":213},[203,156162,156163],{"class":272},"# 8\n",[174,156165,156167],{"id":156166},"_272-赋值运算符","2.7.2 赋值运算符",[194,156169,156171],{"className":30436,"code":156170,"language":30438,"meta":27,"style":27},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[200,156172,156173,156181,156189,156197,156205],{"__ignoreMap":27},[203,156174,156175,156177,156179],{"class":205,"line":206},[203,156176,155845],{"class":213},[203,156178,259],{"class":209},[203,156180,58486],{"class":262},[203,156182,156183,156185,156187],{"class":205,"line":124},[203,156184,155845],{"class":213},[203,156186,9567],{"class":209},[203,156188,54485],{"class":262},[203,156190,156191,156193,156195],{"class":205,"line":1269},[203,156192,155845],{"class":213},[203,156194,150310],{"class":209},[203,156196,47781],{"class":262},[203,156198,156199,156201,156203],{"class":205,"line":1284},[203,156200,155845],{"class":213},[203,156202,137206],{"class":209},[203,156204,120094],{"class":262},[203,156206,156207,156209,156212],{"class":205,"line":1290},[203,156208,155845],{"class":213},[203,156210,156211],{"class":209},"\u002F=",[203,156213,47781],{"class":262},[19,156215,156216],{},"等价关系：",[194,156218,156220],{"className":30436,"code":156219,"language":30438,"meta":27,"style":27},"num += 1\nnum = num + 1\n",[200,156221,156222,156230],{"__ignoreMap":27},[203,156223,156224,156226,156228],{"class":205,"line":206},[203,156225,155845],{"class":213},[203,156227,9567],{"class":209},[203,156229,55757],{"class":262},[203,156231,156232,156234,156236,156239,156241],{"class":205,"line":124},[203,156233,155845],{"class":213},[203,156235,259],{"class":209},[203,156237,156238],{"class":213}," num ",[203,156240,695],{"class":209},[203,156242,55757],{"class":262},[19,156244,156245,156246,101076,156249,28443],{},"Python 没有 ",[200,156247,156248],{},"num++",[200,156250,156251],{},"num--",[174,156253,156255],{"id":156254},"_273-比较运算符","2.7.3 比较运算符",[19,156257,156258],{},"比较运算结果是布尔值。",[194,156260,156262],{"className":30436,"code":156261,"language":30438,"meta":27,"style":27},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[200,156263,156264,156278,156293,156307],{"__ignoreMap":27},[203,156265,156266,156268,156270,156272,156274,156276],{"class":205,"line":206},[203,156267,30473],{"class":262},[203,156269,214],{"class":213},[203,156271,660],{"class":262},[203,156273,26280],{"class":209},[203,156275,2237],{"class":262},[203,156277,220],{"class":213},[203,156279,156280,156282,156284,156286,156289,156291],{"class":205,"line":124},[203,156281,30473],{"class":262},[203,156283,214],{"class":213},[203,156285,660],{"class":262},[203,156287,156288],{"class":209}," >=",[203,156290,2127],{"class":262},[203,156292,220],{"class":213},[203,156294,156295,156297,156299,156301,156303,156305],{"class":205,"line":1269},[203,156296,30473],{"class":262},[203,156298,214],{"class":213},[203,156300,660],{"class":262},[203,156302,101617],{"class":209},[203,156304,2172],{"class":262},[203,156306,220],{"class":213},[203,156308,156309,156311,156313,156315,156318,156320],{"class":205,"line":1284},[203,156310,30473],{"class":262},[203,156312,214],{"class":213},[203,156314,660],{"class":262},[203,156316,156317],{"class":209}," !=",[203,156319,2172],{"class":262},[203,156321,220],{"class":213},[19,156323,156324,156325,156327,156328,28443],{},"注意：判断相等用 ",[200,156326,3038],{},"，赋值用 ",[200,156329,259],{},[194,156331,156333],{"className":30436,"code":156332,"language":30438,"meta":27,"style":27},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[200,156334,156335,156347],{"__ignoreMap":27},[203,156336,156337,156339,156341,156344],{"class":205,"line":206},[203,156338,146604],{"class":213},[203,156340,259],{"class":209},[203,156342,156343],{"class":262}," 18",[203,156345,156346],{"class":272},"       # 赋值\n",[203,156348,156349,156351,156353,156355],{"class":205,"line":124},[203,156350,146604],{"class":213},[203,156352,3038],{"class":209},[203,156354,156343],{"class":262},[203,156356,156357],{"class":272},"      # 判断是否相等\n",[174,156359,156361],{"id":156360},"_274-逻辑运算符","2.7.4 逻辑运算符",[351,156363,156364,156372],{},[354,156365,156366],{},[357,156367,156368,156370],{},[360,156369,155982],{},[360,156371,25927],{},[398,156373,156374,156383,156392],{},[357,156375,156376,156380],{},[403,156377,156378],{},[200,156379,30520],{},[403,156381,156382],{},"并且",[357,156384,156385,156389],{},[403,156386,156387],{},[200,156388,115148],{},[403,156390,156391],{},"或者",[357,156393,156394,156399],{},[403,156395,156396],{},[200,156397,156398],{},"not",[403,156400,156401],{},"取反",[194,156403,156405],{"className":30436,"code":156404,"language":30438,"meta":27,"style":27},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[200,156406,156407,156415,156424,156428,156443,156457],{"__ignoreMap":27},[203,156408,156409,156411,156413],{"class":205,"line":206},[203,156410,146604],{"class":213},[203,156412,259],{"class":209},[203,156414,88123],{"class":262},[203,156416,156417,156420,156422],{"class":205,"line":124},[203,156418,156419],{"class":213},"has_ticket ",[203,156421,259],{"class":209},[203,156423,153657],{"class":262},[203,156425,156426],{"class":205,"line":1269},[203,156427,2489],{"emptyLinePlaceholder":131},[203,156429,156430,156432,156434,156436,156438,156440],{"class":205,"line":1284},[203,156431,30473],{"class":262},[203,156433,155826],{"class":213},[203,156435,1799],{"class":209},[203,156437,156343],{"class":262},[203,156439,120487],{"class":209},[203,156441,156442],{"class":213}," has_ticket)\n",[203,156444,156445,156447,156449,156451,156453,156455],{"class":205,"line":1290},[203,156446,30473],{"class":262},[203,156448,155826],{"class":213},[203,156450,1124],{"class":209},[203,156452,156343],{"class":262},[203,156454,114259],{"class":209},[203,156456,156442],{"class":213},[203,156458,156459,156461,156463,156465],{"class":205,"line":1304},[203,156460,30473],{"class":262},[203,156462,214],{"class":213},[203,156464,156398],{"class":209},[203,156466,156442],{"class":213},[14,156468,156470],{"id":156469},"_28-字符串定义","2.8 字符串定义",[19,156472,156473],{},"三种常见写法：",[194,156475,156477],{"className":30436,"code":156476,"language":30438,"meta":27,"style":27},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[200,156478,156479,156489,156498,156508],{"__ignoreMap":27},[203,156480,156481,156484,156486],{"class":205,"line":206},[203,156482,156483],{"class":213},"name1 ",[203,156485,259],{"class":209},[203,156487,156488],{"class":318}," '小明'\n",[203,156490,156491,156494,156496],{"class":205,"line":124},[203,156492,156493],{"class":213},"name2 ",[203,156495,259],{"class":209},[203,156497,149411],{"class":318},[203,156499,156500,156503,156505],{"class":205,"line":1269},[203,156501,156502],{"class":213},"text ",[203,156504,259],{"class":209},[203,156506,156507],{"class":318}," \"\"\"这是多行字符串\n",[203,156509,156510],{"class":205,"line":1284},[203,156511,156512],{"class":318},"可以换行\"\"\"\n",[19,156514,156515],{},"字符串中包含引号：",[194,156517,156519],{"className":30436,"code":156518,"language":30438,"meta":27,"style":27},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[200,156520,156521,156531,156541],{"__ignoreMap":27},[203,156522,156523,156526,156528],{"class":205,"line":206},[203,156524,156525],{"class":213},"msg ",[203,156527,259],{"class":209},[203,156529,156530],{"class":318}," \"他说:'你好'\"\n",[203,156532,156533,156536,156538],{"class":205,"line":124},[203,156534,156535],{"class":213},"msg2 ",[203,156537,259],{"class":209},[203,156539,156540],{"class":318}," '他说:\"你好\"'\n",[203,156542,156543,156546,156548,156551,156554,156557,156559],{"class":205,"line":1269},[203,156544,156545],{"class":213},"msg3 ",[203,156547,259],{"class":209},[203,156549,156550],{"class":318}," \"他说:",[203,156552,156553],{"class":262},"\\\"",[203,156555,156556],{"class":318},"你好",[203,156558,156553],{"class":262},[203,156560,25191],{"class":318},[19,156562,156563],{},"常见转义字符：",[351,156565,156566,156575],{},[354,156567,156568],{},[357,156569,156570,156573],{},[360,156571,156572],{},"写法",[360,156574,100758],{},[398,156576,156577,156587,156596,156606,156615],{},[357,156578,156579,156584],{},[403,156580,156581],{},[200,156582,156583],{},"\\n",[403,156585,156586],{},"换行",[357,156588,156589,156593],{},[403,156590,156591],{},[200,156592,1320],{},[403,156594,156595],{},"制表符",[357,156597,156598,156603],{},[403,156599,156600],{},[200,156601,156602],{},"\\\\",[403,156604,156605],{},"反斜杠",[357,156607,156608,156612],{},[403,156609,156610],{},[200,156611,156553],{},[403,156613,156614],{},"双引号",[357,156616,156617,156622],{},[403,156618,156619],{},[200,156620,156621],{},"\\'",[403,156623,156624],{},"单引号",[14,156626,156628],{"id":156627},"_29-字符串拼接","2.9 字符串拼接",[194,156630,156632],{"className":30436,"code":156631,"language":30438,"meta":27,"style":27},"name = \"小明\"\nprint(\"你好，\" + name)\n",[200,156633,156634,156642],{"__ignoreMap":27},[203,156635,156636,156638,156640],{"class":205,"line":206},[203,156637,146594],{"class":213},[203,156639,259],{"class":209},[203,156641,149411],{"class":318},[203,156643,156644,156646,156648,156651,156653],{"class":205,"line":124},[203,156645,30473],{"class":262},[203,156647,214],{"class":213},[203,156649,156650],{"class":318},"\"你好，\"",[203,156652,45624],{"class":209},[203,156654,156655],{"class":213}," name)\n",[19,156657,156658],{},"字符串只能和字符串拼接：",[194,156660,156662],{"className":30436,"code":156661,"language":30438,"meta":27,"style":27},"age = 18\nprint(\"年龄:\" + str(age))\n",[200,156663,156664,156672],{"__ignoreMap":27},[203,156665,156666,156668,156670],{"class":205,"line":206},[203,156667,146604],{"class":213},[203,156669,259],{"class":209},[203,156671,146609],{"class":262},[203,156673,156674,156676,156678,156680,156682,156684],{"class":205,"line":124},[203,156675,30473],{"class":262},[203,156677,214],{"class":213},[203,156679,146575],{"class":318},[203,156681,45624],{"class":209},[203,156683,73977],{"class":262},[203,156685,156686],{"class":213},"(age))\n",[19,156688,156689],{},"更推荐使用格式化字符串。",[14,156691,156693],{"id":156692},"_210-字符串格式化","2.10 字符串格式化",[174,156695,156697],{"id":156696},"_2101-百分号格式化","2.10.1 百分号格式化",[194,156699,156701],{"className":30436,"code":156700,"language":30438,"meta":27,"style":27},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[200,156702,156703,156711,156719,156728,156732],{"__ignoreMap":27},[203,156704,156705,156707,156709],{"class":205,"line":206},[203,156706,146594],{"class":213},[203,156708,259],{"class":209},[203,156710,149411],{"class":318},[203,156712,156713,156715,156717],{"class":205,"line":124},[203,156714,146604],{"class":213},[203,156716,259],{"class":209},[203,156718,146609],{"class":262},[203,156720,156721,156723,156725],{"class":205,"line":1269},[203,156722,155416],{"class":213},[203,156724,259],{"class":209},[203,156726,156727],{"class":262}," 95.5\n",[203,156729,156730],{"class":205,"line":1284},[203,156731,2489],{"emptyLinePlaceholder":131},[203,156733,156734,156736,156738,156741,156744,156747,156750,156753,156756,156758,156760],{"class":205,"line":1290},[203,156735,30473],{"class":262},[203,156737,214],{"class":213},[203,156739,156740],{"class":318},"\"姓名:",[203,156742,156743],{"class":262},"%s",[203,156745,156746],{"class":318}," 年龄:",[203,156748,156749],{"class":262},"%d",[203,156751,156752],{"class":318}," 分数:",[203,156754,156755],{"class":262},"%.1f",[203,156757,465],{"class":318},[203,156759,156139],{"class":209},[203,156761,156762],{"class":213}," (name, age, score))\n",[19,156764,156765],{},"常用占位符：",[351,156767,156768,156777],{},[354,156769,156770],{},[357,156771,156772,156775],{},[360,156773,156774],{},"占位符",[360,156776,25927],{},[398,156778,156779,156787,156795],{},[357,156780,156781,156785],{},[403,156782,156783],{},[200,156784,156743],{},[403,156786,155282],{},[357,156788,156789,156793],{},[403,156790,156791],{},[200,156792,156749],{},[403,156794,155260],{},[357,156796,156797,156802],{},[403,156798,156799],{},[200,156800,156801],{},"%f",[403,156803,155271],{},[19,156805,156806],{},"精度控制：",[194,156808,156810],{"className":30436,"code":156809,"language":30438,"meta":27,"style":27},"price = 12.3456\nprint(\"%.2f\" % price)\n",[200,156811,156812,156821],{"__ignoreMap":27},[203,156813,156814,156816,156818],{"class":205,"line":206},[203,156815,146739],{"class":213},[203,156817,259],{"class":209},[203,156819,156820],{"class":262}," 12.3456\n",[203,156822,156823,156825,156827,156829,156832,156834,156836],{"class":205,"line":124},[203,156824,30473],{"class":262},[203,156826,214],{"class":213},[203,156828,465],{"class":318},[203,156830,156831],{"class":262},"%.2f",[203,156833,465],{"class":318},[203,156835,156139],{"class":209},[203,156837,156838],{"class":213}," price)\n",[174,156840,156842],{"id":156841},"_2102-format方法","2.10.2 format方法",[194,156844,156846],{"className":30436,"code":156845,"language":30438,"meta":27,"style":27},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[200,156847,156848,156856,156864,156868,156887,156907],{"__ignoreMap":27},[203,156849,156850,156852,156854],{"class":205,"line":206},[203,156851,146594],{"class":213},[203,156853,259],{"class":209},[203,156855,149411],{"class":318},[203,156857,156858,156860,156862],{"class":205,"line":124},[203,156859,146604],{"class":213},[203,156861,259],{"class":209},[203,156863,146609],{"class":262},[203,156865,156866],{"class":205,"line":1269},[203,156867,2489],{"emptyLinePlaceholder":131},[203,156869,156870,156872,156874,156876,156878,156880,156882,156884],{"class":205,"line":1284},[203,156871,30473],{"class":262},[203,156873,214],{"class":213},[203,156875,156740],{"class":318},[203,156877,32517],{"class":262},[203,156879,156746],{"class":318},[203,156881,32517],{"class":262},[203,156883,465],{"class":318},[203,156885,156886],{"class":213},".format(name, age))\n",[203,156888,156889,156891,156893,156895,156898,156900,156903,156905],{"class":205,"line":1290},[203,156890,30473],{"class":262},[203,156892,214],{"class":213},[203,156894,156740],{"class":318},[203,156896,156897],{"class":262},"{0}",[203,156899,156746],{"class":318},[203,156901,156902],{"class":262},"{1}",[203,156904,465],{"class":318},[203,156906,156886],{"class":213},[203,156908,156909,156911,156913,156915,156918,156920,156923,156925,156928,156930,156932,156935,156937,156939],{"class":205,"line":1304},[203,156910,30473],{"class":262},[203,156912,214],{"class":213},[203,156914,156740],{"class":318},[203,156916,156917],{"class":262},"{name}",[203,156919,156746],{"class":318},[203,156921,156922],{"class":262},"{age}",[203,156924,465],{"class":318},[203,156926,156927],{"class":213},".format(",[203,156929,79868],{"class":5306},[203,156931,259],{"class":209},[203,156933,156934],{"class":213},"name, ",[203,156936,70279],{"class":5306},[203,156938,259],{"class":209},[203,156940,156941],{"class":213},"age))\n",[174,156943,156945],{"id":156944},"_2103-f-string","2.10.3 f-string",[19,156947,156948],{},"推荐写法：",[194,156950,156952],{"className":30436,"code":156951,"language":30438,"meta":27,"style":27},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[200,156953,156954,156962,156970,156978,156982],{"__ignoreMap":27},[203,156955,156956,156958,156960],{"class":205,"line":206},[203,156957,146594],{"class":213},[203,156959,259],{"class":209},[203,156961,149411],{"class":318},[203,156963,156964,156966,156968],{"class":205,"line":124},[203,156965,146604],{"class":213},[203,156967,259],{"class":209},[203,156969,146609],{"class":262},[203,156971,156972,156974,156976],{"class":205,"line":1269},[203,156973,155416],{"class":213},[203,156975,259],{"class":209},[203,156977,156727],{"class":262},[203,156979,156980],{"class":205,"line":1284},[203,156981,2489],{"emptyLinePlaceholder":131},[203,156983,156984,156986,156988,156990,156992,156994,156996,156998,157000,157002,157004,157006,157008,157010,157013,157016,157018,157020],{"class":205,"line":1290},[203,156985,30473],{"class":262},[203,156987,214],{"class":213},[203,156989,266],{"class":209},[203,156991,156740],{"class":318},[203,156993,1110],{"class":262},[203,156995,79868],{"class":213},[203,156997,1160],{"class":262},[203,156999,156746],{"class":318},[203,157001,1110],{"class":262},[203,157003,70279],{"class":213},[203,157005,1160],{"class":262},[203,157007,156752],{"class":318},[203,157009,1110],{"class":262},[203,157011,157012],{"class":213},"score",[203,157014,157015],{"class":209},":.1f",[203,157017,1160],{"class":262},[203,157019,465],{"class":318},[203,157021,220],{"class":213},[19,157023,157024],{},"表达式也可以放进去：",[194,157026,157028],{"className":30436,"code":157027,"language":30438,"meta":27,"style":27},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[200,157029,157030,157038,157046],{"__ignoreMap":27},[203,157031,157032,157034,157036],{"class":205,"line":206},[203,157033,146739],{"class":213},[203,157035,259],{"class":209},[203,157037,146744],{"class":262},[203,157039,157040,157042,157044],{"class":205,"line":124},[203,157041,146749],{"class":213},[203,157043,259],{"class":209},[203,157045,54485],{"class":262},[203,157047,157048,157050,157052,157054,157057,157059,157061,157063,157066,157068,157071],{"class":205,"line":1269},[203,157049,30473],{"class":262},[203,157051,214],{"class":213},[203,157053,266],{"class":209},[203,157055,157056],{"class":318},"\"总价:",[203,157058,1110],{"class":262},[203,157060,146739],{"class":213},[203,157062,669],{"class":209},[203,157064,157065],{"class":213}," count",[203,157067,1160],{"class":262},[203,157069,157070],{"class":318},"元\"",[203,157072,220],{"class":213},[14,157074,157076],{"id":157075},"_211-input输入","2.11 input输入",[19,157078,157079,157082],{},[200,157080,157081],{},"input()"," 会暂停程序，等待用户输入。",[194,157084,157086],{"className":30436,"code":157085,"language":30438,"meta":27,"style":27},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[200,157087,157088,157102],{"__ignoreMap":27},[203,157089,157090,157092,157094,157096,157098,157100],{"class":205,"line":206},[203,157091,146594],{"class":213},[203,157093,259],{"class":209},[203,157095,60663],{"class":262},[203,157097,214],{"class":213},[203,157099,152437],{"class":318},[203,157101,220],{"class":213},[203,157103,157104,157106,157108,157110,157113,157115,157117,157119,157121],{"class":205,"line":124},[203,157105,30473],{"class":262},[203,157107,214],{"class":213},[203,157109,266],{"class":209},[203,157111,157112],{"class":318},"\"你好，",[203,157114,1110],{"class":262},[203,157116,79868],{"class":213},[203,157118,1160],{"class":262},[203,157120,465],{"class":318},[203,157122,220],{"class":213},[19,157124,157125],{},"输入整数：",[194,157127,157129],{"className":30436,"code":157128,"language":30438,"meta":27,"style":27},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[200,157130,157131,157149],{"__ignoreMap":27},[203,157132,157133,157135,157137,157139,157141,157143,157145,157147],{"class":205,"line":206},[203,157134,146604],{"class":213},[203,157136,259],{"class":209},[203,157138,2471],{"class":262},[203,157140,214],{"class":213},[203,157142,53879],{"class":262},[203,157144,214],{"class":213},[203,157146,152452],{"class":318},[203,157148,30555],{"class":213},[203,157150,157151,157153,157155,157157,157160,157162,157164,157166,157169,157171],{"class":205,"line":124},[203,157152,30473],{"class":262},[203,157154,214],{"class":213},[203,157156,266],{"class":209},[203,157158,157159],{"class":318},"\"明年你",[203,157161,1110],{"class":262},[203,157163,146604],{"class":213},[203,157165,695],{"class":209},[203,157167,157168],{"class":262}," 1}",[203,157170,149462],{"class":318},[203,157172,220],{"class":213},[19,157174,157175],{},"输入小数：",[194,157177,157179],{"className":30436,"code":157178,"language":30438,"meta":27,"style":27},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[200,157180,157181,157200],{"__ignoreMap":27},[203,157182,157183,157185,157187,157189,157191,157193,157195,157198],{"class":205,"line":206},[203,157184,155389],{"class":213},[203,157186,259],{"class":209},[203,157188,109855],{"class":262},[203,157190,214],{"class":213},[203,157192,53879],{"class":262},[203,157194,214],{"class":213},[203,157196,157197],{"class":318},"\"请输入身高:\"",[203,157199,30555],{"class":213},[203,157201,157202,157204,157206,157208,157211,157213,157215,157218,157220,157223],{"class":205,"line":124},[203,157203,30473],{"class":262},[203,157205,214],{"class":213},[203,157207,266],{"class":209},[203,157209,157210],{"class":318},"\"身高:",[203,157212,1110],{"class":262},[203,157214,25039],{"class":213},[203,157216,157217],{"class":209},":.2f",[203,157219,1160],{"class":262},[203,157221,157222],{"class":318},"米\"",[203,157224,220],{"class":213},[14,157226,157228],{"id":157227},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157230,123350],{},[157,157232,157233,157236,157239,157242],{},[160,157234,157235],{},"输入商品单价。",[160,157237,157238],{},"输入购买数量。",[160,157240,157241],{},"输入折扣，例如 0.8 表示八折。",[160,157243,157244],{},"输出最终金额，保留两位小数。",[19,157246,10125],{},[194,157248,157250],{"className":30436,"code":157249,"language":30438,"meta":27,"style":27},"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",[200,157251,157252,157271,157290,157310,157314,157334,157338,157361,157382,157404],{"__ignoreMap":27},[203,157253,157254,157256,157258,157260,157262,157264,157266,157269],{"class":205,"line":206},[203,157255,146739],{"class":213},[203,157257,259],{"class":209},[203,157259,109855],{"class":262},[203,157261,214],{"class":213},[203,157263,53879],{"class":262},[203,157265,214],{"class":213},[203,157267,157268],{"class":318},"\"请输入商品单价:\"",[203,157270,30555],{"class":213},[203,157272,157273,157275,157277,157279,157281,157283,157285,157288],{"class":205,"line":124},[203,157274,146749],{"class":213},[203,157276,259],{"class":209},[203,157278,2471],{"class":262},[203,157280,214],{"class":213},[203,157282,53879],{"class":262},[203,157284,214],{"class":213},[203,157286,157287],{"class":318},"\"请输入购买数量:\"",[203,157289,30555],{"class":213},[203,157291,157292,157295,157297,157299,157301,157303,157305,157308],{"class":205,"line":1269},[203,157293,157294],{"class":213},"discount ",[203,157296,259],{"class":209},[203,157298,109855],{"class":262},[203,157300,214],{"class":213},[203,157302,53879],{"class":262},[203,157304,214],{"class":213},[203,157306,157307],{"class":318},"\"请输入折扣:\"",[203,157309,30555],{"class":213},[203,157311,157312],{"class":205,"line":1284},[203,157313,2489],{"emptyLinePlaceholder":131},[203,157315,157316,157319,157321,157324,157326,157329,157331],{"class":205,"line":1290},[203,157317,157318],{"class":213},"total ",[203,157320,259],{"class":209},[203,157322,157323],{"class":213}," price ",[203,157325,669],{"class":209},[203,157327,157328],{"class":213}," count ",[203,157330,669],{"class":209},[203,157332,157333],{"class":213}," discount\n",[203,157335,157336],{"class":205,"line":1304},[203,157337,2489],{"emptyLinePlaceholder":131},[203,157339,157340,157342,157344,157346,157349,157351,157353,157355,157357,157359],{"class":205,"line":1310},[203,157341,30473],{"class":262},[203,157343,214],{"class":213},[203,157345,266],{"class":209},[203,157347,157348],{"class":318},"\"商品单价:",[203,157350,1110],{"class":262},[203,157352,79873],{"class":213},[203,157354,157217],{"class":209},[203,157356,1160],{"class":262},[203,157358,465],{"class":318},[203,157360,220],{"class":213},[203,157362,157363,157365,157367,157369,157372,157374,157376,157378,157380],{"class":205,"line":1401},[203,157364,30473],{"class":262},[203,157366,214],{"class":213},[203,157368,266],{"class":209},[203,157370,157371],{"class":318},"\"购买数量:",[203,157373,1110],{"class":262},[203,157375,84492],{"class":213},[203,157377,1160],{"class":262},[203,157379,465],{"class":318},[203,157381,220],{"class":213},[203,157383,157384,157386,157388,157390,157393,157395,157398,157400,157402],{"class":205,"line":1407},[203,157385,30473],{"class":262},[203,157387,214],{"class":213},[203,157389,266],{"class":209},[203,157391,157392],{"class":318},"\"折扣:",[203,157394,1110],{"class":262},[203,157396,157397],{"class":213},"discount",[203,157399,1160],{"class":262},[203,157401,465],{"class":318},[203,157403,220],{"class":213},[203,157405,157406,157408,157410,157412,157415,157417,157420,157422,157424,157426],{"class":205,"line":1419},[203,157407,30473],{"class":262},[203,157409,214],{"class":213},[203,157411,266],{"class":209},[203,157413,157414],{"class":318},"\"应付金额:",[203,157416,1110],{"class":262},[203,157418,157419],{"class":213},"total",[203,157421,157217],{"class":209},[203,157423,1160],{"class":262},[203,157425,157070],{"class":318},[203,157427,220],{"class":213},[14,157429,157431],{"id":157430},"_213-易错点","2.13 易错点",[157,157433,157434,157439,157445,157453,157456],{},[160,157435,157436,157438],{},[200,157437,157081],{}," 的结果是字符串，做运算前要转换。",[160,157440,157441,157442,28443],{},"字符串拼接时，数字要先 ",[200,157443,157444],{},"str()",[160,157446,157447,157449,157450,157452],{},[200,157448,259],{}," 是赋值，",[200,157451,3038],{}," 是比较。",[160,157454,157455],{},"Python 没有自增自减运算符。",[160,157457,157458],{},"浮点数计算可能有精度误差：",[194,157460,157462],{"className":30436,"code":157461,"language":30438,"meta":27,"style":27},"print(0.1 + 0.2)\n",[200,157463,157464],{"__ignoreMap":27},[203,157465,157466,157468,157470,157472,157474,157477],{"class":205,"line":206},[203,157467,30473],{"class":262},[203,157469,214],{"class":213},[203,157471,86268],{"class":262},[203,157473,45624],{"class":209},[203,157475,157476],{"class":262}," 0.2",[203,157478,220],{"class":213},[19,157480,157481,157482,157485],{},"金额计算如果要求严格，可以后续学习 ",[200,157483,157484],{},"decimal"," 模块。",[14,157487,157489],{"id":157488},"_214-本章练习","2.14 本章练习",[157,157491,157492,157495,157498,157501,157504],{},[160,157493,157494],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[160,157496,157497],{},"输入圆的半径，计算面积，保留两位小数。",[160,157499,157500],{},"输入工资和奖金，计算总收入。",[160,157502,157503],{},"输入摄氏温度，转换为华氏温度。",[160,157505,157506],{},"写一个 BMI 计算程序：",[194,157508,157511],{"className":157509,"code":157510,"language":5277,"meta":27},[5275],"BMI = 体重kg \u002F 身高m ** 2\n",[200,157512,157510],{"__ignoreMap":27},[5216,157514,157515],{},"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":27,"searchDepth":124,"depth":124,"links":157517},[157518,157519,157520,157521,157522,157523,157524,157530,157531,157532,157537,157538,157539,157540],{"id":155079,"depth":124,"text":155080},{"id":155188,"depth":124,"text":155189},{"id":155359,"depth":124,"text":155360},{"id":155436,"depth":124,"text":155437},{"id":50789,"depth":124,"text":50790},{"id":155742,"depth":124,"text":155743},{"id":155968,"depth":124,"text":155969,"children":157525},[157526,157527,157528,157529],{"id":155972,"depth":1269,"text":155973},{"id":156166,"depth":1269,"text":156167},{"id":156254,"depth":1269,"text":156255},{"id":156360,"depth":1269,"text":156361},{"id":156469,"depth":124,"text":156470},{"id":156627,"depth":124,"text":156628},{"id":156692,"depth":124,"text":156693,"children":157533},[157534,157535,157536],{"id":156696,"depth":1269,"text":156697},{"id":156841,"depth":1269,"text":156842},{"id":156944,"depth":1269,"text":156945},{"id":157075,"depth":124,"text":157076},{"id":157227,"depth":124,"text":157228},{"id":157430,"depth":124,"text":157431},{"id":157488,"depth":124,"text":157489},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155071,"description":23467},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157547,"title":157548,"body":157549,"description":23467,"extension":129,"meta":159185,"navigation":131,"path":159186,"seo":159187,"stem":159188,"__hash__":159189},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157550,"toc":159166},[157551,157554,157558,157561,157576,157579,157607,157611,157661,157663,157679,157682,157708,157711,157715,157782,157785,157801,157805,157808,157926,157929,157936,157985,157991,157995,157998,158111,158114,158118,158122,158125,158175,158179,158182,158232,158236,158239,158277,158281,158284,158330,158333,158368,158372,158377,158380,158426,158428,158495,158499,158505,158616,158625,158629,158631,158642,158644,158810,158814,158816,158830,158832,159046,159050,159069,159086,159089,159135,159139,159163],[10,157552,157548],{"id":157553},"_3-判断语句",[14,157555,157557],{"id":157556},"_31-布尔值","3.1 布尔值",[19,157559,157560],{},"判断语句依赖布尔值：",[194,157562,157564],{"className":30436,"code":157563,"language":30438,"meta":27,"style":27},"True\nFalse\n",[200,157565,157566,157571],{"__ignoreMap":27},[203,157567,157568],{"class":205,"line":206},[203,157569,157570],{"class":262},"True\n",[203,157572,157573],{"class":205,"line":124},[203,157574,157575],{"class":262},"False\n",[19,157577,157578],{},"比较表达式会产生布尔值：",[194,157580,157582],{"className":30436,"code":157581,"language":30438,"meta":27,"style":27},"age = 18\nprint(age >= 18)  # True\n",[200,157583,157584,157592],{"__ignoreMap":27},[203,157585,157586,157588,157590],{"class":205,"line":206},[203,157587,146604],{"class":213},[203,157589,259],{"class":209},[203,157591,146609],{"class":262},[203,157593,157594,157596,157598,157600,157602,157604],{"class":205,"line":124},[203,157595,30473],{"class":262},[203,157597,155826],{"class":213},[203,157599,1799],{"class":209},[203,157601,156343],{"class":262},[203,157603,45866],{"class":213},[203,157605,157606],{"class":272},"# True\n",[14,157608,157610],{"id":157609},"_32-if基础语法","3.2 if基础语法",[194,157612,157614],{"className":30436,"code":157613,"language":30438,"meta":27,"style":27},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[200,157615,157616,157634,157638,157650],{"__ignoreMap":27},[203,157617,157618,157620,157622,157624,157626,157628,157630,157632],{"class":205,"line":206},[203,157619,146604],{"class":213},[203,157621,259],{"class":209},[203,157623,2471],{"class":262},[203,157625,214],{"class":213},[203,157627,53879],{"class":262},[203,157629,214],{"class":213},[203,157631,152452],{"class":318},[203,157633,30555],{"class":213},[203,157635,157636],{"class":205,"line":124},[203,157637,2489],{"emptyLinePlaceholder":131},[203,157639,157640,157642,157644,157646,157648],{"class":205,"line":1269},[203,157641,1620],{"class":209},[203,157643,15797],{"class":213},[203,157645,1799],{"class":209},[203,157647,156343],{"class":262},[203,157649,3828],{"class":213},[203,157651,157652,157654,157656,157659],{"class":205,"line":1284},[203,157653,31357],{"class":262},[203,157655,214],{"class":213},[203,157657,157658],{"class":318},"\"可以进入网吧\"",[203,157660,220],{"class":213},[19,157662,9115],{},[157,157664,157665,157670,157673,157676],{},[160,157666,157667,157669],{},[200,157668,1620],{}," 后面是条件表达式。",[160,157671,157672],{},"条件后面必须写冒号。",[160,157674,157675],{},"条件成立时执行缩进代码块。",[160,157677,157678],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,157680,157681],{},"错误示例：",[194,157683,157685],{"className":30436,"code":157684,"language":30438,"meta":27,"style":27},"if age >= 18\n    print(\"可以进入\")\n",[200,157686,157687,157697],{"__ignoreMap":27},[203,157688,157689,157691,157693,157695],{"class":205,"line":206},[203,157690,1620],{"class":209},[203,157692,15797],{"class":213},[203,157694,1799],{"class":209},[203,157696,146609],{"class":262},[203,157698,157699,157701,157703,157706],{"class":205,"line":124},[203,157700,31357],{"class":262},[203,157702,214],{"class":213},[203,157704,157705],{"class":318},"\"可以进入\"",[203,157707,220],{"class":213},[19,157709,157710],{},"缺少冒号。",[14,157712,157714],{"id":157713},"_33-if-else","3.3 if else",[194,157716,157718],{"className":30436,"code":157717,"language":30438,"meta":27,"style":27},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[200,157719,157720,157738,157742,157754,157765,157771],{"__ignoreMap":27},[203,157721,157722,157724,157726,157728,157730,157732,157734,157736],{"class":205,"line":206},[203,157723,146604],{"class":213},[203,157725,259],{"class":209},[203,157727,2471],{"class":262},[203,157729,214],{"class":213},[203,157731,53879],{"class":262},[203,157733,214],{"class":213},[203,157735,152452],{"class":318},[203,157737,30555],{"class":213},[203,157739,157740],{"class":205,"line":124},[203,157741,2489],{"emptyLinePlaceholder":131},[203,157743,157744,157746,157748,157750,157752],{"class":205,"line":1269},[203,157745,1620],{"class":209},[203,157747,15797],{"class":213},[203,157749,1799],{"class":209},[203,157751,156343],{"class":262},[203,157753,3828],{"class":213},[203,157755,157756,157758,157760,157763],{"class":205,"line":1284},[203,157757,31357],{"class":262},[203,157759,214],{"class":213},[203,157761,157762],{"class":318},"\"成年人\"",[203,157764,220],{"class":213},[203,157766,157767,157769],{"class":205,"line":1290},[203,157768,1790],{"class":209},[203,157770,3828],{"class":213},[203,157772,157773,157775,157777,157780],{"class":205,"line":1304},[203,157774,31357],{"class":262},[203,157776,214],{"class":213},[203,157778,157779],{"class":318},"\"未成年人\"",[203,157781,220],{"class":213},[19,157783,157784],{},"执行逻辑：",[157,157786,157787,157793,157798],{},[160,157788,157789,157790,157792],{},"条件成立，执行 ",[200,157791,1620],{}," 代码块。",[160,157794,157795,157796,157792],{},"条件不成立，执行 ",[200,157797,1790],{},[160,157799,157800],{},"两个代码块只会执行其中一个。",[14,157802,157804],{"id":157803},"_34-if-elif-else","3.4 if elif else",[19,157806,157807],{},"多条件判断：",[194,157809,157811],{"className":30436,"code":157810,"language":30438,"meta":27,"style":27},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[200,157812,157813,157831,157835,157849,157860,157874,157885,157898,157909,157915],{"__ignoreMap":27},[203,157814,157815,157817,157819,157821,157823,157825,157827,157829],{"class":205,"line":206},[203,157816,155416],{"class":213},[203,157818,259],{"class":209},[203,157820,2471],{"class":262},[203,157822,214],{"class":213},[203,157824,53879],{"class":262},[203,157826,214],{"class":213},[203,157828,152467],{"class":318},[203,157830,30555],{"class":213},[203,157832,157833],{"class":205,"line":124},[203,157834,2489],{"emptyLinePlaceholder":131},[203,157836,157837,157839,157842,157844,157847],{"class":205,"line":1269},[203,157838,1620],{"class":209},[203,157840,157841],{"class":213}," score ",[203,157843,1799],{"class":209},[203,157845,157846],{"class":262}," 90",[203,157848,3828],{"class":213},[203,157850,157851,157853,157855,157858],{"class":205,"line":1284},[203,157852,31357],{"class":262},[203,157854,214],{"class":213},[203,157856,157857],{"class":318},"\"优秀\"",[203,157859,220],{"class":213},[203,157861,157862,157865,157867,157869,157872],{"class":205,"line":1290},[203,157863,157864],{"class":209},"elif",[203,157866,157841],{"class":213},[203,157868,1799],{"class":209},[203,157870,157871],{"class":262}," 80",[203,157873,3828],{"class":213},[203,157875,157876,157878,157880,157883],{"class":205,"line":1304},[203,157877,31357],{"class":262},[203,157879,214],{"class":213},[203,157881,157882],{"class":318},"\"良好\"",[203,157884,220],{"class":213},[203,157886,157887,157889,157891,157893,157896],{"class":205,"line":1310},[203,157888,157864],{"class":209},[203,157890,157841],{"class":213},[203,157892,1799],{"class":209},[203,157894,157895],{"class":262}," 60",[203,157897,3828],{"class":213},[203,157899,157900,157902,157904,157907],{"class":205,"line":1401},[203,157901,31357],{"class":262},[203,157903,214],{"class":213},[203,157905,157906],{"class":318},"\"及格\"",[203,157908,220],{"class":213},[203,157910,157911,157913],{"class":205,"line":1407},[203,157912,1790],{"class":209},[203,157914,3828],{"class":213},[203,157916,157917,157919,157921,157924],{"class":205,"line":1419},[203,157918,31357],{"class":262},[203,157920,214],{"class":213},[203,157922,157923],{"class":318},"\"不及格\"",[203,157925,220],{"class":213},[19,157927,157928],{},"注意判断顺序很重要。",[19,157930,157931,157932,157935],{},"如果把 ",[200,157933,157934],{},"score >= 60"," 放在最前面：",[194,157937,157939],{"className":30436,"code":157938,"language":30438,"meta":27,"style":27},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[200,157940,157941,157953,157963,157975],{"__ignoreMap":27},[203,157942,157943,157945,157947,157949,157951],{"class":205,"line":206},[203,157944,1620],{"class":209},[203,157946,157841],{"class":213},[203,157948,1799],{"class":209},[203,157950,157895],{"class":262},[203,157952,3828],{"class":213},[203,157954,157955,157957,157959,157961],{"class":205,"line":124},[203,157956,31357],{"class":262},[203,157958,214],{"class":213},[203,157960,157906],{"class":318},[203,157962,220],{"class":213},[203,157964,157965,157967,157969,157971,157973],{"class":205,"line":1269},[203,157966,157864],{"class":209},[203,157968,157841],{"class":213},[203,157970,1799],{"class":209},[203,157972,157846],{"class":262},[203,157974,3828],{"class":213},[203,157976,157977,157979,157981,157983],{"class":205,"line":1284},[203,157978,31357],{"class":262},[203,157980,214],{"class":213},[203,157982,157857],{"class":318},[203,157984,220],{"class":213},[19,157986,157987,157988,157990],{},"成绩 95 会先满足 ",[200,157989,157934],{},"，后面的优秀分支就不会执行。",[14,157992,157994],{"id":157993},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,157996,157997],{},"嵌套判断就是在一个判断内部再写判断。",[194,157999,158001],{"className":30436,"code":158000,"language":30438,"meta":27,"style":27},"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",[200,158002,158003,158021,158036,158040,158052,158066,158076,158083,158094,158100],{"__ignoreMap":27},[203,158004,158005,158007,158009,158011,158013,158015,158017,158019],{"class":205,"line":206},[203,158006,146604],{"class":213},[203,158008,259],{"class":209},[203,158010,2471],{"class":262},[203,158012,214],{"class":213},[203,158014,53879],{"class":262},[203,158016,214],{"class":213},[203,158018,152452],{"class":318},[203,158020,30555],{"class":213},[203,158022,158023,158025,158027,158029,158031,158034],{"class":205,"line":124},[203,158024,156419],{"class":213},[203,158026,259],{"class":209},[203,158028,60663],{"class":262},[203,158030,214],{"class":213},[203,158032,158033],{"class":318},"\"是否有票(y\u002Fn):\"",[203,158035,220],{"class":213},[203,158037,158038],{"class":205,"line":1269},[203,158039,2489],{"emptyLinePlaceholder":131},[203,158041,158042,158044,158046,158048,158050],{"class":205,"line":1284},[203,158043,1620],{"class":209},[203,158045,15797],{"class":213},[203,158047,1799],{"class":209},[203,158049,156343],{"class":262},[203,158051,3828],{"class":213},[203,158053,158054,158056,158059,158061,158064],{"class":205,"line":1290},[203,158055,3190],{"class":209},[203,158057,158058],{"class":213}," has_ticket ",[203,158060,3038],{"class":209},[203,158062,158063],{"class":318}," \"y\"",[203,158065,3828],{"class":213},[203,158067,158068,158070,158072,158074],{"class":205,"line":1304},[203,158069,32509],{"class":262},[203,158071,214],{"class":213},[203,158073,157705],{"class":318},[203,158075,220],{"class":213},[203,158077,158078,158081],{"class":205,"line":1310},[203,158079,158080],{"class":209},"    else",[203,158082,3828],{"class":213},[203,158084,158085,158087,158089,158092],{"class":205,"line":1401},[203,158086,32509],{"class":262},[203,158088,214],{"class":213},[203,158090,158091],{"class":318},"\"请先买票\"",[203,158093,220],{"class":213},[203,158095,158096,158098],{"class":205,"line":1407},[203,158097,1790],{"class":209},[203,158099,3828],{"class":213},[203,158101,158102,158104,158106,158109],{"class":205,"line":1419},[203,158103,31357],{"class":262},[203,158105,214],{"class":213},[203,158107,158108],{"class":318},"\"未成年人禁止进入\"",[203,158110,220],{"class":213},[19,158112,158113],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158115,158117],{"id":158116},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[174,158119,158121],{"id":158120},"_361-and","3.6.1 and",[19,158123,158124],{},"两个条件都成立才成立。",[194,158126,158128],{"className":30436,"code":158127,"language":30438,"meta":27,"style":27},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[200,158129,158130,158138,158146,158150,158165],{"__ignoreMap":27},[203,158131,158132,158134,158136],{"class":205,"line":206},[203,158133,146604],{"class":213},[203,158135,259],{"class":209},[203,158137,88123],{"class":262},[203,158139,158140,158142,158144],{"class":205,"line":124},[203,158141,156419],{"class":213},[203,158143,259],{"class":209},[203,158145,153657],{"class":262},[203,158147,158148],{"class":205,"line":1269},[203,158149,2489],{"emptyLinePlaceholder":131},[203,158151,158152,158154,158156,158158,158160,158162],{"class":205,"line":1284},[203,158153,1620],{"class":209},[203,158155,15797],{"class":213},[203,158157,1799],{"class":209},[203,158159,156343],{"class":262},[203,158161,120487],{"class":209},[203,158163,158164],{"class":213}," has_ticket:\n",[203,158166,158167,158169,158171,158173],{"class":205,"line":1290},[203,158168,31357],{"class":262},[203,158170,214],{"class":213},[203,158172,157705],{"class":318},[203,158174,220],{"class":213},[174,158176,158178],{"id":158177},"_362-or","3.6.2 or",[19,158180,158181],{},"只要一个条件成立就成立。",[194,158183,158185],{"className":30436,"code":158184,"language":30438,"meta":27,"style":27},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[200,158186,158187,158196,158205,158209,158221],{"__ignoreMap":27},[203,158188,158189,158192,158194],{"class":205,"line":206},[203,158190,158191],{"class":213},"is_vip ",[203,158193,259],{"class":209},[203,158195,125865],{"class":262},[203,158197,158198,158201,158203],{"class":205,"line":124},[203,158199,158200],{"class":213},"coupon ",[203,158202,259],{"class":209},[203,158204,153657],{"class":262},[203,158206,158207],{"class":205,"line":1269},[203,158208,2489],{"emptyLinePlaceholder":131},[203,158210,158211,158213,158216,158218],{"class":205,"line":1284},[203,158212,1620],{"class":209},[203,158214,158215],{"class":213}," is_vip ",[203,158217,115148],{"class":209},[203,158219,158220],{"class":213}," coupon:\n",[203,158222,158223,158225,158227,158230],{"class":205,"line":1290},[203,158224,31357],{"class":262},[203,158226,214],{"class":213},[203,158228,158229],{"class":318},"\"可以享受优惠\"",[203,158231,220],{"class":213},[174,158233,158235],{"id":158234},"_363-not","3.6.3 not",[19,158237,158238],{},"取反。",[194,158240,158242],{"className":30436,"code":158241,"language":30438,"meta":27,"style":27},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[200,158243,158244,158253,158257,158266],{"__ignoreMap":27},[203,158245,158246,158249,158251],{"class":205,"line":206},[203,158247,158248],{"class":213},"is_closed ",[203,158250,259],{"class":209},[203,158252,125865],{"class":262},[203,158254,158255],{"class":205,"line":124},[203,158256,2489],{"emptyLinePlaceholder":131},[203,158258,158259,158261,158263],{"class":205,"line":1269},[203,158260,1620],{"class":209},[203,158262,38988],{"class":209},[203,158264,158265],{"class":213}," is_closed:\n",[203,158267,158268,158270,158272,158275],{"class":205,"line":1284},[203,158269,31357],{"class":262},[203,158271,214],{"class":213},[203,158273,158274],{"class":318},"\"店铺营业中\"",[203,158276,220],{"class":213},[14,158278,158280],{"id":158279},"_37-链式比较","3.7 链式比较",[19,158282,158283],{},"Python 支持链式比较：",[194,158285,158287],{"className":30436,"code":158286,"language":30438,"meta":27,"style":27},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[200,158288,158289,158298,158302,158319],{"__ignoreMap":27},[203,158290,158291,158293,158295],{"class":205,"line":206},[203,158292,155416],{"class":213},[203,158294,259],{"class":209},[203,158296,158297],{"class":262}," 85\n",[203,158299,158300],{"class":205,"line":124},[203,158301,2489],{"emptyLinePlaceholder":131},[203,158303,158304,158306,158308,158311,158313,158315,158317],{"class":205,"line":1269},[203,158305,1620],{"class":209},[203,158307,4182],{"class":262},[203,158309,158310],{"class":209}," \u003C=",[203,158312,157841],{"class":213},[203,158314,1677],{"class":209},[203,158316,5844],{"class":262},[203,158318,3828],{"class":213},[203,158320,158321,158323,158325,158328],{"class":205,"line":1284},[203,158322,31357],{"class":262},[203,158324,214],{"class":213},[203,158326,158327],{"class":318},"\"成绩合法\"",[203,158329,220],{"class":213},[19,158331,158332],{},"等价于：",[194,158334,158336],{"className":30436,"code":158335,"language":30438,"meta":27,"style":27},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[200,158337,158338,158358],{"__ignoreMap":27},[203,158339,158340,158342,158344,158346,158348,158350,158352,158354,158356],{"class":205,"line":206},[203,158341,1620],{"class":209},[203,158343,157841],{"class":213},[203,158345,1799],{"class":209},[203,158347,4182],{"class":262},[203,158349,120487],{"class":209},[203,158351,157841],{"class":213},[203,158353,1677],{"class":209},[203,158355,5844],{"class":262},[203,158357,3828],{"class":213},[203,158359,158360,158362,158364,158366],{"class":205,"line":124},[203,158361,31357],{"class":262},[203,158363,214],{"class":213},[203,158365,158327],{"class":318},[203,158367,220],{"class":213},[14,158369,158371],{"id":158370},"_38-真值和假值","3.8 真值和假值",[19,158373,116525,158374,158376],{},[200,158375,1620],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158378,158379],{},"假值：",[194,158381,158383],{"className":30436,"code":158382,"language":30438,"meta":27,"style":27},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[200,158384,158385,158389,158394,158398,158402,158407,158411,158415,158420],{"__ignoreMap":27},[203,158386,158387],{"class":205,"line":206},[203,158388,157575],{"class":262},[203,158390,158391],{"class":205,"line":124},[203,158392,158393],{"class":262},"None\n",[203,158395,158396],{"class":205,"line":1269},[203,158397,3174],{"class":262},[203,158399,158400],{"class":205,"line":1284},[203,158401,32400],{"class":262},[203,158403,158404],{"class":205,"line":1290},[203,158405,158406],{"class":318},"\"\"\n",[203,158408,158409],{"class":205,"line":1304},[203,158410,32415],{"class":213},[203,158412,158413],{"class":205,"line":1310},[203,158414,2065],{"class":213},[203,158416,158417],{"class":205,"line":1401},[203,158418,158419],{"class":213},"{}\n",[203,158421,158422,158424],{"class":205,"line":1407},[203,158423,155348],{"class":262},[203,158425,2065],{"class":213},[19,158427,15225],{},[194,158429,158431],{"className":30436,"code":158430,"language":30438,"meta":27,"style":27},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[200,158432,158433,158447,158451,158458,158478,158484],{"__ignoreMap":27},[203,158434,158435,158437,158439,158441,158443,158445],{"class":205,"line":206},[203,158436,146594],{"class":213},[203,158438,259],{"class":209},[203,158440,60663],{"class":262},[203,158442,214],{"class":213},[203,158444,152437],{"class":318},[203,158446,220],{"class":213},[203,158448,158449],{"class":205,"line":124},[203,158450,2489],{"emptyLinePlaceholder":131},[203,158452,158453,158455],{"class":205,"line":1269},[203,158454,1620],{"class":209},[203,158456,158457],{"class":213}," name:\n",[203,158459,158460,158462,158464,158466,158468,158470,158472,158474,158476],{"class":205,"line":1284},[203,158461,31357],{"class":262},[203,158463,214],{"class":213},[203,158465,266],{"class":209},[203,158467,157112],{"class":318},[203,158469,1110],{"class":262},[203,158471,79868],{"class":213},[203,158473,1160],{"class":262},[203,158475,465],{"class":318},[203,158477,220],{"class":213},[203,158479,158480,158482],{"class":205,"line":1290},[203,158481,1790],{"class":209},[203,158483,3828],{"class":213},[203,158485,158486,158488,158490,158493],{"class":205,"line":1304},[203,158487,31357],{"class":262},[203,158489,214],{"class":213},[203,158491,158492],{"class":318},"\"姓名不能为空\"",[203,158494,220],{"class":213},[14,158496,158498],{"id":158497},"_39-match语句","3.9 match语句",[19,158500,158501,158502,158504],{},"Python 3.10 开始支持 ",[200,158503,71323],{},"。它适合处理固定选项。",[194,158506,158508],{"className":30436,"code":158507,"language":30438,"meta":27,"style":27},"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",[200,158509,158510,158526,158530,158537,158547,158558,158567,158578,158587,158598,158605],{"__ignoreMap":27},[203,158511,158512,158515,158517,158519,158521,158524],{"class":205,"line":206},[203,158513,158514],{"class":213},"command ",[203,158516,259],{"class":209},[203,158518,60663],{"class":262},[203,158520,214],{"class":213},[203,158522,158523],{"class":318},"\"请输入命令:\"",[203,158525,220],{"class":213},[203,158527,158528],{"class":205,"line":124},[203,158529,2489],{"emptyLinePlaceholder":131},[203,158531,158532,158534],{"class":205,"line":1269},[203,158533,71323],{"class":209},[203,158535,158536],{"class":213}," command:\n",[203,158538,158539,158542,158545],{"class":205,"line":1284},[203,158540,158541],{"class":209},"    case",[203,158543,158544],{"class":318}," \"start\"",[203,158546,3828],{"class":213},[203,158548,158549,158551,158553,158556],{"class":205,"line":1290},[203,158550,32509],{"class":262},[203,158552,214],{"class":213},[203,158554,158555],{"class":318},"\"启动\"",[203,158557,220],{"class":213},[203,158559,158560,158562,158565],{"class":205,"line":1304},[203,158561,158541],{"class":209},[203,158563,158564],{"class":318}," \"stop\"",[203,158566,3828],{"class":213},[203,158568,158569,158571,158573,158576],{"class":205,"line":1310},[203,158570,32509],{"class":262},[203,158572,214],{"class":213},[203,158574,158575],{"class":318},"\"停止\"",[203,158577,220],{"class":213},[203,158579,158580,158582,158585],{"class":205,"line":1401},[203,158581,158541],{"class":209},[203,158583,158584],{"class":318}," \"restart\"",[203,158586,3828],{"class":213},[203,158588,158589,158591,158593,158596],{"class":205,"line":1407},[203,158590,32509],{"class":262},[203,158592,214],{"class":213},[203,158594,158595],{"class":318},"\"重启\"",[203,158597,220],{"class":213},[203,158599,158600,158602],{"class":205,"line":1419},[203,158601,158541],{"class":209},[203,158603,158604],{"class":213}," _:\n",[203,158606,158607,158609,158611,158614],{"class":205,"line":1701},[203,158608,32509],{"class":262},[203,158610,214],{"class":213},[203,158612,158613],{"class":318},"\"未知命令\"",[203,158615,220],{"class":213},[19,158617,158618,158619,158621,158622,158624],{},"入门阶段掌握 ",[200,158620,154716],{}," 更重要，",[200,158623,71323],{}," 可以作为补充。",[14,158626,158628],{"id":158627},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,158630,123350],{},[157,158632,158633,158636,158639],{},[160,158634,158635],{},"输入成绩。",[160,158637,158638],{},"判断成绩是否合法。",[160,158640,158641],{},"输出等级。",[19,158643,10125],{},[194,158645,158647],{"className":30436,"code":158646,"language":30438,"meta":27,"style":27},"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",[200,158648,158649,158667,158671,158689,158700,158712,158723,158735,158746,158759,158770,158782,158793,158799],{"__ignoreMap":27},[203,158650,158651,158653,158655,158657,158659,158661,158663,158665],{"class":205,"line":206},[203,158652,155416],{"class":213},[203,158654,259],{"class":209},[203,158656,109855],{"class":262},[203,158658,214],{"class":213},[203,158660,53879],{"class":262},[203,158662,214],{"class":213},[203,158664,152467],{"class":318},[203,158666,30555],{"class":213},[203,158668,158669],{"class":205,"line":124},[203,158670,2489],{"emptyLinePlaceholder":131},[203,158672,158673,158675,158677,158679,158681,158683,158685,158687],{"class":205,"line":1269},[203,158674,1620],{"class":209},[203,158676,38988],{"class":209},[203,158678,4182],{"class":262},[203,158680,158310],{"class":209},[203,158682,157841],{"class":213},[203,158684,1677],{"class":209},[203,158686,5844],{"class":262},[203,158688,3828],{"class":213},[203,158690,158691,158693,158695,158698],{"class":205,"line":1284},[203,158692,31357],{"class":262},[203,158694,214],{"class":213},[203,158696,158697],{"class":318},"\"成绩不合法\"",[203,158699,220],{"class":213},[203,158701,158702,158704,158706,158708,158710],{"class":205,"line":1290},[203,158703,157864],{"class":209},[203,158705,157841],{"class":213},[203,158707,1799],{"class":209},[203,158709,157846],{"class":262},[203,158711,3828],{"class":213},[203,158713,158714,158716,158718,158721],{"class":205,"line":1304},[203,158715,31357],{"class":262},[203,158717,214],{"class":213},[203,158719,158720],{"class":318},"\"等级:A\"",[203,158722,220],{"class":213},[203,158724,158725,158727,158729,158731,158733],{"class":205,"line":1310},[203,158726,157864],{"class":209},[203,158728,157841],{"class":213},[203,158730,1799],{"class":209},[203,158732,157871],{"class":262},[203,158734,3828],{"class":213},[203,158736,158737,158739,158741,158744],{"class":205,"line":1401},[203,158738,31357],{"class":262},[203,158740,214],{"class":213},[203,158742,158743],{"class":318},"\"等级:B\"",[203,158745,220],{"class":213},[203,158747,158748,158750,158752,158754,158757],{"class":205,"line":1407},[203,158749,157864],{"class":209},[203,158751,157841],{"class":213},[203,158753,1799],{"class":209},[203,158755,158756],{"class":262}," 70",[203,158758,3828],{"class":213},[203,158760,158761,158763,158765,158768],{"class":205,"line":1419},[203,158762,31357],{"class":262},[203,158764,214],{"class":213},[203,158766,158767],{"class":318},"\"等级:C\"",[203,158769,220],{"class":213},[203,158771,158772,158774,158776,158778,158780],{"class":205,"line":1701},[203,158773,157864],{"class":209},[203,158775,157841],{"class":213},[203,158777,1799],{"class":209},[203,158779,157895],{"class":262},[203,158781,3828],{"class":213},[203,158783,158784,158786,158788,158791],{"class":205,"line":1706},[203,158785,31357],{"class":262},[203,158787,214],{"class":213},[203,158789,158790],{"class":318},"\"等级:D\"",[203,158792,220],{"class":213},[203,158794,158795,158797],{"class":205,"line":1712},[203,158796,1790],{"class":209},[203,158798,3828],{"class":213},[203,158800,158801,158803,158805,158808],{"class":205,"line":1717},[203,158802,31357],{"class":262},[203,158804,214],{"class":213},[203,158806,158807],{"class":318},"\"等级:E\"",[203,158809,220],{"class":213},[14,158811,158813],{"id":158812},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,158815,123350],{},[157,158817,158818,158821,158824,158827],{},[160,158819,158820],{},"输入消费金额。",[160,158822,158823],{},"输入会员等级，普通、银卡、金卡。",[160,158825,158826],{},"普通不打折，银卡 9 折，金卡 8 折。",[160,158828,158829],{},"满 500 再减 50。",[19,158831,10125],{},[194,158833,158835],{"className":30436,"code":158834,"language":30438,"meta":27,"style":27},"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",[200,158836,158837,158857,158873,158877,158885,158889,158903,158913,158926,158935,158948,158956,158962,158973,158977,158991,158995,159009,159019,159023],{"__ignoreMap":27},[203,158838,158839,158842,158844,158846,158848,158850,158852,158855],{"class":205,"line":206},[203,158840,158841],{"class":213},"amount ",[203,158843,259],{"class":209},[203,158845,109855],{"class":262},[203,158847,214],{"class":213},[203,158849,53879],{"class":262},[203,158851,214],{"class":213},[203,158853,158854],{"class":318},"\"请输入消费金额:\"",[203,158856,30555],{"class":213},[203,158858,158859,158862,158864,158866,158868,158871],{"class":205,"line":124},[203,158860,158861],{"class":213},"level ",[203,158863,259],{"class":209},[203,158865,60663],{"class":262},[203,158867,214],{"class":213},[203,158869,158870],{"class":318},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[203,158872,220],{"class":213},[203,158874,158875],{"class":205,"line":1269},[203,158876,2489],{"emptyLinePlaceholder":131},[203,158878,158879,158881,158883],{"class":205,"line":1284},[203,158880,157294],{"class":213},[203,158882,259],{"class":209},[203,158884,55757],{"class":262},[203,158886,158887],{"class":205,"line":1290},[203,158888,2489],{"emptyLinePlaceholder":131},[203,158890,158891,158893,158896,158898,158901],{"class":205,"line":1304},[203,158892,1620],{"class":209},[203,158894,158895],{"class":213}," level ",[203,158897,3038],{"class":209},[203,158899,158900],{"class":318}," \"银卡\"",[203,158902,3828],{"class":213},[203,158904,158905,158908,158910],{"class":205,"line":1310},[203,158906,158907],{"class":213},"    discount ",[203,158909,259],{"class":209},[203,158911,158912],{"class":262}," 0.9\n",[203,158914,158915,158917,158919,158921,158924],{"class":205,"line":1401},[203,158916,157864],{"class":209},[203,158918,158895],{"class":213},[203,158920,3038],{"class":209},[203,158922,158923],{"class":318}," \"金卡\"",[203,158925,3828],{"class":213},[203,158927,158928,158930,158932],{"class":205,"line":1407},[203,158929,158907],{"class":213},[203,158931,259],{"class":209},[203,158933,158934],{"class":262}," 0.8\n",[203,158936,158937,158939,158941,158943,158946],{"class":205,"line":1419},[203,158938,157864],{"class":209},[203,158940,158895],{"class":213},[203,158942,3038],{"class":209},[203,158944,158945],{"class":318}," \"普通\"",[203,158947,3828],{"class":213},[203,158949,158950,158952,158954],{"class":205,"line":1701},[203,158951,158907],{"class":213},[203,158953,259],{"class":209},[203,158955,55757],{"class":262},[203,158957,158958,158960],{"class":205,"line":1706},[203,158959,1790],{"class":209},[203,158961,3828],{"class":213},[203,158963,158964,158966,158968,158971],{"class":205,"line":1712},[203,158965,31357],{"class":262},[203,158967,214],{"class":213},[203,158969,158970],{"class":318},"\"会员等级输入错误，按普通会员计算\"",[203,158972,220],{"class":213},[203,158974,158975],{"class":205,"line":1717},[203,158976,2489],{"emptyLinePlaceholder":131},[203,158978,158979,158982,158984,158987,158989],{"class":205,"line":1731},[203,158980,158981],{"class":213},"pay ",[203,158983,259],{"class":209},[203,158985,158986],{"class":213}," amount ",[203,158988,669],{"class":209},[203,158990,157333],{"class":213},[203,158992,158993],{"class":205,"line":1736},[203,158994,2489],{"emptyLinePlaceholder":131},[203,158996,158997,158999,159002,159004,159007],{"class":205,"line":1742},[203,158998,1620],{"class":209},[203,159000,159001],{"class":213}," pay ",[203,159003,1799],{"class":209},[203,159005,159006],{"class":262}," 500",[203,159008,3828],{"class":213},[203,159010,159011,159014,159016],{"class":205,"line":1763},[203,159012,159013],{"class":213},"    pay ",[203,159015,150310],{"class":209},[203,159017,159018],{"class":262}," 50\n",[203,159020,159021],{"class":205,"line":1768},[203,159022,2489],{"emptyLinePlaceholder":131},[203,159024,159025,159027,159029,159031,159033,159035,159038,159040,159042,159044],{"class":205,"line":1782},[203,159026,30473],{"class":262},[203,159028,214],{"class":213},[203,159030,266],{"class":209},[203,159032,157414],{"class":318},[203,159034,1110],{"class":262},[203,159036,159037],{"class":213},"pay",[203,159039,157217],{"class":209},[203,159041,1160],{"class":262},[203,159043,157070],{"class":318},[203,159045,220],{"class":213},[14,159047,159049],{"id":159048},"_312-易错点","3.12 易错点",[157,159051,159052,159055,159058,159061,159066],{},[160,159053,159054],{},"冒号不能漏。",[160,159056,159057],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[160,159059,159060],{},"多分支判断要注意顺序。",[160,159062,159063,159064,28443],{},"判断相等用 ",[200,159065,3038],{},[160,159067,159068],{},"字符串比较区分大小写：",[194,159070,159072],{"className":30436,"code":159071,"language":30438,"meta":27,"style":27},"\"Y\" == \"y\"  # False\n",[200,159073,159074],{"__ignoreMap":27},[203,159075,159076,159079,159081,159083],{"class":205,"line":206},[203,159077,159078],{"class":318},"\"Y\"",[203,159080,101617],{"class":209},[203,159082,158063],{"class":318},[203,159084,159085],{"class":272},"  # False\n",[19,159087,159088],{},"可转换后再判断：",[194,159090,159092],{"className":30436,"code":159091,"language":30438,"meta":27,"style":27},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[200,159093,159094,159111,159124],{"__ignoreMap":27},[203,159095,159096,159099,159101,159103,159105,159108],{"class":205,"line":206},[203,159097,159098],{"class":213},"answer ",[203,159100,259],{"class":209},[203,159102,60663],{"class":262},[203,159104,214],{"class":213},[203,159106,159107],{"class":318},"\"是否继续(y\u002Fn):\"",[203,159109,159110],{"class":213},").lower()\n",[203,159112,159113,159115,159118,159120,159122],{"class":205,"line":124},[203,159114,1620],{"class":209},[203,159116,159117],{"class":213}," answer ",[203,159119,3038],{"class":209},[203,159121,158063],{"class":318},[203,159123,3828],{"class":213},[203,159125,159126,159128,159130,159133],{"class":205,"line":1269},[203,159127,31357],{"class":262},[203,159129,214],{"class":213},[203,159131,159132],{"class":318},"\"继续\"",[203,159134,220],{"class":213},[14,159136,159138],{"id":159137},"_313-本章练习","3.13 本章练习",[157,159140,159141,159144,159147,159150,159160],{},[160,159142,159143],{},"输入年龄，判断是否成年。",[160,159145,159146],{},"输入年份，判断是否为闰年。",[160,159148,159149],{},"输入三个数字，输出最大值。",[160,159151,159152,159153,159156,159157,159159],{},"写登录判断：用户名是 ",[200,159154,159155],{},"admin"," 且密码是 ",[200,159158,15174],{}," 才登录成功。",[160,159161,159162],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5216,159164,159165],{},"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":27,"searchDepth":124,"depth":124,"links":159167},[159168,159169,159170,159171,159172,159173,159178,159179,159180,159181,159182,159183,159184],{"id":157556,"depth":124,"text":157557},{"id":157609,"depth":124,"text":157610},{"id":157713,"depth":124,"text":157714},{"id":157803,"depth":124,"text":157804},{"id":157993,"depth":124,"text":157994},{"id":158116,"depth":124,"text":158117,"children":159174},[159175,159176,159177],{"id":158120,"depth":1269,"text":158121},{"id":158177,"depth":1269,"text":158178},{"id":158234,"depth":1269,"text":158235},{"id":158279,"depth":124,"text":158280},{"id":158370,"depth":124,"text":158371},{"id":158497,"depth":124,"text":158498},{"id":158627,"depth":124,"text":158628},{"id":158812,"depth":124,"text":158813},{"id":159048,"depth":124,"text":159049},{"id":159137,"depth":124,"text":159138},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157548,"description":23467},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159191,"title":159192,"body":159193,"description":23467,"extension":129,"meta":160962,"navigation":131,"path":160963,"seo":160964,"stem":160965,"__hash__":160966},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159194,"toc":160942},[159195,159198,159202,159208,159211,159228,159232,159234,159251,159253,159298,159300,159317,159321,159324,159390,159393,159411,159415,159576,159585,159589,159593,159598,159645,159647,159653,159657,159662,159709,159711,159717,159721,159726,159762,159765,159812,159816,159822,159880,159885,159916,159921,159925,159980,159983,160055,160058,160117,160121,160124,160199,160202,160206,160312,160315,160341,160345,160357,160426,160429,160521,160525,160527,160538,160540,160670,160674,160876,160884,160888,160918,160922,160939],[10,159196,159192],{"id":159197},"_4-循环语句",[14,159199,159201],{"id":159200},"_41-为什么需要循环","4.1 为什么需要循环",[19,159203,159204,159205,159207],{},"如果要输出 1 到 100，不应该写 100 行 ",[200,159206,146530],{},"，而应该用循环。",[19,159209,159210],{},"循环适合处理重复任务：",[157,159212,159213,159216,159219,159222,159225],{},[160,159214,159215],{},"重复输出。",[160,159217,159218],{},"重复输入。",[160,159220,159221],{},"遍历数据。",[160,159223,159224],{},"持续执行菜单。",[160,159226,159227],{},"批量处理文件或数据。",[14,159229,159231],{"id":159230},"_42-while循环","4.2 while循环",[19,159233,5271],{},[194,159235,159237],{"className":30436,"code":159236,"language":30438,"meta":27,"style":27},"while 条件:\n    循环体\n",[200,159238,159239,159246],{"__ignoreMap":27},[203,159240,159241,159243],{"class":205,"line":206},[203,159242,108721],{"class":209},[203,159244,159245],{"class":213}," 条件:\n",[203,159247,159248],{"class":205,"line":124},[203,159249,159250],{"class":213},"    循环体\n",[19,159252,15225],{},[194,159254,159256],{"className":30436,"code":159255,"language":30438,"meta":27,"style":27},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[200,159257,159258,159266,159270,159282,159289],{"__ignoreMap":27},[203,159259,159260,159262,159264],{"class":205,"line":206},[203,159261,100206],{"class":213},[203,159263,259],{"class":209},[203,159265,55757],{"class":262},[203,159267,159268],{"class":205,"line":124},[203,159269,2489],{"emptyLinePlaceholder":131},[203,159271,159272,159274,159276,159278,159280],{"class":205,"line":1269},[203,159273,108721],{"class":209},[203,159275,9528],{"class":213},[203,159277,1677],{"class":209},[203,159279,2237],{"class":262},[203,159281,3828],{"class":213},[203,159283,159284,159286],{"class":205,"line":1284},[203,159285,31357],{"class":262},[203,159287,159288],{"class":213},"(i)\n",[203,159290,159291,159294,159296],{"class":205,"line":1290},[203,159292,159293],{"class":213},"    i ",[203,159295,9567],{"class":209},[203,159297,55757],{"class":262},[19,159299,80987],{},[157,159301,159302,159308,159311,159314],{},[160,159303,159304,159305,28443],{},"判断条件 ",[200,159306,159307],{},"i \u003C= 5",[160,159309,159310],{},"条件成立，执行循环体。",[160,159312,159313],{},"执行完后回到条件判断。",[160,159315,159316],{},"条件不成立，退出循环。",[14,159318,159320],{"id":159319},"_43-while累加","4.3 while累加",[19,159322,159323],{},"计算 1 到 100 的和：",[194,159325,159327],{"className":30436,"code":159326,"language":30438,"meta":27,"style":27},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[200,159328,159329,159337,159345,159349,159361,159371,159379,159383],{"__ignoreMap":27},[203,159330,159331,159333,159335],{"class":205,"line":206},[203,159332,100206],{"class":213},[203,159334,259],{"class":209},[203,159336,55757],{"class":262},[203,159338,159339,159341,159343],{"class":205,"line":124},[203,159340,157318],{"class":213},[203,159342,259],{"class":209},[203,159344,47391],{"class":262},[203,159346,159347],{"class":205,"line":1269},[203,159348,2489],{"emptyLinePlaceholder":131},[203,159350,159351,159353,159355,159357,159359],{"class":205,"line":1284},[203,159352,108721],{"class":209},[203,159354,9528],{"class":213},[203,159356,1677],{"class":209},[203,159358,5844],{"class":262},[203,159360,3828],{"class":213},[203,159362,159363,159366,159368],{"class":205,"line":1290},[203,159364,159365],{"class":213},"    total ",[203,159367,9567],{"class":209},[203,159369,159370],{"class":213}," i\n",[203,159372,159373,159375,159377],{"class":205,"line":1304},[203,159374,159293],{"class":213},[203,159376,9567],{"class":209},[203,159378,55757],{"class":262},[203,159380,159381],{"class":205,"line":1310},[203,159382,2489],{"emptyLinePlaceholder":131},[203,159384,159385,159387],{"class":205,"line":1401},[203,159386,30473],{"class":262},[203,159388,159389],{"class":213},"(total)\n",[19,159391,159392],{},"核心思想：",[157,159394,159395,159400,159405],{},[160,159396,159397,159399],{},[200,159398,655],{}," 控制循环次数。",[160,159401,159402,159404],{},[200,159403,157419],{}," 保存累加结果。",[160,159406,159407,159408,159410],{},"每轮循环都要更新 ",[200,159409,655],{},"，否则可能死循环。",[14,159412,159414],{"id":159413},"_44-while猜数字","4.4 while猜数字",[194,159416,159418],{"className":30436,"code":159417,"language":30438,"meta":27,"style":27},"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",[200,159419,159420,159426,159430,159447,159455,159459,159467,159487,159496,159500,159512,159523,159533,159544,159550,159572],{"__ignoreMap":27},[203,159421,159422,159424],{"class":205,"line":206},[203,159423,30450],{"class":209},[203,159425,45386],{"class":213},[203,159427,159428],{"class":205,"line":124},[203,159429,2489],{"emptyLinePlaceholder":131},[203,159431,159432,159434,159436,159439,159441,159443,159445],{"class":205,"line":1269},[203,159433,159098],{"class":213},[203,159435,259],{"class":209},[203,159437,159438],{"class":213}," random.randint(",[203,159440,431],{"class":262},[203,159442,12525],{"class":213},[203,159444,525],{"class":262},[203,159446,220],{"class":213},[203,159448,159449,159451,159453],{"class":205,"line":1284},[203,159450,146749],{"class":213},[203,159452,259],{"class":209},[203,159454,47391],{"class":262},[203,159456,159457],{"class":205,"line":1290},[203,159458,2489],{"emptyLinePlaceholder":131},[203,159460,159461,159463,159465],{"class":205,"line":1304},[203,159462,108721],{"class":209},[203,159464,95350],{"class":262},[203,159466,3828],{"class":213},[203,159468,159469,159472,159474,159476,159478,159480,159482,159485],{"class":205,"line":1310},[203,159470,159471],{"class":213},"    guess ",[203,159473,259],{"class":209},[203,159475,2471],{"class":262},[203,159477,214],{"class":213},[203,159479,53879],{"class":262},[203,159481,214],{"class":213},[203,159483,159484],{"class":318},"\"请输入1到100之间的数字:\"",[203,159486,30555],{"class":213},[203,159488,159489,159492,159494],{"class":205,"line":1401},[203,159490,159491],{"class":213},"    count ",[203,159493,9567],{"class":209},[203,159495,55757],{"class":262},[203,159497,159498],{"class":205,"line":1407},[203,159499,2489],{"emptyLinePlaceholder":131},[203,159501,159502,159504,159507,159509],{"class":205,"line":1419},[203,159503,3190],{"class":209},[203,159505,159506],{"class":213}," guess ",[203,159508,1174],{"class":209},[203,159510,159511],{"class":213}," answer:\n",[203,159513,159514,159516,159518,159521],{"class":205,"line":1701},[203,159515,32509],{"class":262},[203,159517,214],{"class":213},[203,159519,159520],{"class":318},"\"猜大了\"",[203,159522,220],{"class":213},[203,159524,159525,159527,159529,159531],{"class":205,"line":1706},[203,159526,39351],{"class":209},[203,159528,159506],{"class":213},[203,159530,1124],{"class":209},[203,159532,159511],{"class":213},[203,159534,159535,159537,159539,159542],{"class":205,"line":1712},[203,159536,32509],{"class":262},[203,159538,214],{"class":213},[203,159540,159541],{"class":318},"\"猜小了\"",[203,159543,220],{"class":213},[203,159545,159546,159548],{"class":205,"line":1717},[203,159547,158080],{"class":209},[203,159549,3828],{"class":213},[203,159551,159552,159554,159556,159558,159561,159563,159565,159567,159570],{"class":205,"line":1731},[203,159553,32509],{"class":262},[203,159555,214],{"class":213},[203,159557,266],{"class":209},[203,159559,159560],{"class":318},"\"猜对了，一共猜了",[203,159562,1110],{"class":262},[203,159564,84492],{"class":213},[203,159566,1160],{"class":262},[203,159568,159569],{"class":318},"次\"",[203,159571,220],{"class":213},[203,159573,159574],{"class":205,"line":1736},[203,159575,31685],{"class":209},[19,159577,159578,159581,159582,159584],{},[200,159579,159580],{},"while True"," 表示无限循环，通常配合 ",[200,159583,2142],{}," 使用。",[14,159586,159588],{"id":159587},"_45-break和continue","4.5 break和continue",[174,159590,159592],{"id":159591},"_451-break","4.5.1 break",[19,159594,159595,159597],{},[200,159596,2142],{}," 直接结束整个循环。",[194,159599,159601],{"className":30436,"code":159600,"language":30438,"meta":27,"style":27},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[200,159602,159603,159623,159635,159639],{"__ignoreMap":27},[203,159604,159605,159607,159609,159611,159613,159615,159617,159619,159621],{"class":205,"line":206},[203,159606,3114],{"class":209},[203,159608,9528],{"class":213},[203,159610,26101],{"class":209},[203,159612,32501],{"class":262},[203,159614,214],{"class":213},[203,159616,431],{"class":262},[203,159618,12525],{"class":213},[203,159620,558],{"class":262},[203,159622,30844],{"class":213},[203,159624,159625,159627,159629,159631,159633],{"class":205,"line":124},[203,159626,3190],{"class":209},[203,159628,9528],{"class":213},[203,159630,3038],{"class":209},[203,159632,78128],{"class":262},[203,159634,3828],{"class":213},[203,159636,159637],{"class":205,"line":1269},[203,159638,31685],{"class":209},[203,159640,159641,159643],{"class":205,"line":1284},[203,159642,31357],{"class":262},[203,159644,159288],{"class":213},[19,159646,146515],{},[194,159648,159651],{"className":159649,"code":159650,"language":5277,"meta":27},[5275],"1\n2\n",[200,159652,159650],{"__ignoreMap":27},[174,159654,159656],{"id":159655},"_452-continue","4.5.2 continue",[19,159658,159659,159661],{},[200,159660,154730],{}," 跳过本轮剩余代码，进入下一轮循环。",[194,159663,159665],{"className":30436,"code":159664,"language":30438,"meta":27,"style":27},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[200,159666,159667,159687,159699,159703],{"__ignoreMap":27},[203,159668,159669,159671,159673,159675,159677,159679,159681,159683,159685],{"class":205,"line":206},[203,159670,3114],{"class":209},[203,159672,9528],{"class":213},[203,159674,26101],{"class":209},[203,159676,32501],{"class":262},[203,159678,214],{"class":213},[203,159680,431],{"class":262},[203,159682,12525],{"class":213},[203,159684,558],{"class":262},[203,159686,30844],{"class":213},[203,159688,159689,159691,159693,159695,159697],{"class":205,"line":124},[203,159690,3190],{"class":209},[203,159692,9528],{"class":213},[203,159694,3038],{"class":209},[203,159696,78128],{"class":262},[203,159698,3828],{"class":213},[203,159700,159701],{"class":205,"line":1269},[203,159702,148570],{"class":209},[203,159704,159705,159707],{"class":205,"line":1284},[203,159706,31357],{"class":262},[203,159708,159288],{"class":213},[19,159710,146515],{},[194,159712,159715],{"className":159713,"code":159714,"language":5277,"meta":27},[5275],"1\n2\n4\n5\n",[200,159716,159714],{"__ignoreMap":27},[14,159718,159720],{"id":159719},"_46-for循环","4.6 for循环",[19,159722,159723,159725],{},[200,159724,3114],{}," 常用于遍历序列。",[194,159727,159729],{"className":30436,"code":159728,"language":30438,"meta":27,"style":27},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[200,159730,159731,159740,159744,159755],{"__ignoreMap":27},[203,159732,159733,159735,159737],{"class":205,"line":206},[203,159734,146594],{"class":213},[203,159736,259],{"class":209},[203,159738,159739],{"class":318}," \"python\"\n",[203,159741,159742],{"class":205,"line":124},[203,159743,2489],{"emptyLinePlaceholder":131},[203,159745,159746,159748,159751,159753],{"class":205,"line":1269},[203,159747,3114],{"class":209},[203,159749,159750],{"class":213}," ch ",[203,159752,26101],{"class":209},[203,159754,158457],{"class":213},[203,159756,159757,159759],{"class":205,"line":1284},[203,159758,31357],{"class":262},[203,159760,159761],{"class":213},"(ch)\n",[19,159763,159764],{},"遍历列表：",[194,159766,159768],{"className":30436,"code":159767,"language":30438,"meta":27,"style":27},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[200,159769,159770,159792,159796,159806],{"__ignoreMap":27},[203,159771,159772,159775,159777,159779,159781,159783,159785,159787,159790],{"class":205,"line":206},[203,159773,159774],{"class":213},"students ",[203,159776,259],{"class":209},[203,159778,52284],{"class":213},[203,159780,149946],{"class":318},[203,159782,12525],{"class":213},[203,159784,150994],{"class":318},[203,159786,12525],{"class":213},[203,159788,159789],{"class":318},"\"小刚\"",[203,159791,33304],{"class":213},[203,159793,159794],{"class":205,"line":124},[203,159795,2489],{"emptyLinePlaceholder":131},[203,159797,159798,159800,159802,159804],{"class":205,"line":1269},[203,159799,3114],{"class":209},[203,159801,152195],{"class":213},[203,159803,26101],{"class":209},[203,159805,152200],{"class":213},[203,159807,159808,159810],{"class":205,"line":1284},[203,159809,31357],{"class":262},[203,159811,150100],{"class":213},[14,159813,159815],{"id":159814},"_47-range函数","4.7 range函数",[19,159817,159818,159821],{},[200,159819,159820],{},"range()"," 用于生成整数序列。",[194,159823,159825],{"className":30436,"code":159824,"language":30438,"meta":27,"style":27},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[200,159826,159827,159841,159859],{"__ignoreMap":27},[203,159828,159829,159831,159833,159835,159838],{"class":205,"line":206},[203,159830,33474],{"class":262},[203,159832,214],{"class":213},[203,159834,533],{"class":262},[203,159836,159837],{"class":213},")          ",[203,159839,159840],{"class":272},"# 0,1,2,3,4\n",[203,159842,159843,159845,159847,159849,159851,159853,159856],{"class":205,"line":124},[203,159844,33474],{"class":262},[203,159846,214],{"class":213},[203,159848,431],{"class":262},[203,159850,12525],{"class":213},[203,159852,533],{"class":262},[203,159854,159855],{"class":213},")       ",[203,159857,159858],{"class":272},"# 1,2,3,4\n",[203,159860,159861,159863,159865,159867,159869,159871,159873,159875,159877],{"class":205,"line":1269},[203,159862,33474],{"class":262},[203,159864,214],{"class":213},[203,159866,431],{"class":262},[203,159868,12525],{"class":213},[203,159870,660],{"class":262},[203,159872,12525],{"class":213},[203,159874,291],{"class":262},[203,159876,155719],{"class":213},[203,159878,159879],{"class":272},"# 1,3,5,7,9\n",[19,159881,159882,159883,24676],{},"配合 ",[200,159884,3114],{},[194,159886,159888],{"className":30436,"code":159887,"language":30438,"meta":27,"style":27},"for i in range(1, 6):\n    print(i)\n",[200,159889,159890,159910],{"__ignoreMap":27},[203,159891,159892,159894,159896,159898,159900,159902,159904,159906,159908],{"class":205,"line":206},[203,159893,3114],{"class":209},[203,159895,9528],{"class":213},[203,159897,26101],{"class":209},[203,159899,32501],{"class":262},[203,159901,214],{"class":213},[203,159903,431],{"class":262},[203,159905,12525],{"class":213},[203,159907,558],{"class":262},[203,159909,30844],{"class":213},[203,159911,159912,159914],{"class":205,"line":124},[203,159913,31357],{"class":262},[203,159915,159288],{"class":213},[19,159917,9115,159918,159920],{},[200,159919,33474],{}," 的结束值不包含在内。",[14,159922,159924],{"id":159923},"_48-for循环求和","4.8 for循环求和",[194,159926,159928],{"className":30436,"code":159927,"language":30438,"meta":27,"style":27},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[200,159929,159930,159938,159942,159962,159970,159974],{"__ignoreMap":27},[203,159931,159932,159934,159936],{"class":205,"line":206},[203,159933,157318],{"class":213},[203,159935,259],{"class":209},[203,159937,47391],{"class":262},[203,159939,159940],{"class":205,"line":124},[203,159941,2489],{"emptyLinePlaceholder":131},[203,159943,159944,159946,159948,159950,159952,159954,159956,159958,159960],{"class":205,"line":1269},[203,159945,3114],{"class":209},[203,159947,9528],{"class":213},[203,159949,26101],{"class":209},[203,159951,32501],{"class":262},[203,159953,214],{"class":213},[203,159955,431],{"class":262},[203,159957,12525],{"class":213},[203,159959,551],{"class":262},[203,159961,30844],{"class":213},[203,159963,159964,159966,159968],{"class":205,"line":1284},[203,159965,159365],{"class":213},[203,159967,9567],{"class":209},[203,159969,159370],{"class":213},[203,159971,159972],{"class":205,"line":1290},[203,159973,2489],{"emptyLinePlaceholder":131},[203,159975,159976,159978],{"class":205,"line":1304},[203,159977,30473],{"class":262},[203,159979,159389],{"class":213},[19,159981,159982],{},"求偶数和：",[194,159984,159986],{"className":30436,"code":159985,"language":30438,"meta":27,"style":27},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[200,159987,159988,159996,160000,160020,160036,160045,160049],{"__ignoreMap":27},[203,159989,159990,159992,159994],{"class":205,"line":206},[203,159991,157318],{"class":213},[203,159993,259],{"class":209},[203,159995,47391],{"class":262},[203,159997,159998],{"class":205,"line":124},[203,159999,2489],{"emptyLinePlaceholder":131},[203,160001,160002,160004,160006,160008,160010,160012,160014,160016,160018],{"class":205,"line":1269},[203,160003,3114],{"class":209},[203,160005,9528],{"class":213},[203,160007,26101],{"class":209},[203,160009,32501],{"class":262},[203,160011,214],{"class":213},[203,160013,431],{"class":262},[203,160015,12525],{"class":213},[203,160017,551],{"class":262},[203,160019,30844],{"class":213},[203,160021,160022,160024,160026,160028,160030,160032,160034],{"class":205,"line":1284},[203,160023,3190],{"class":209},[203,160025,9528],{"class":213},[203,160027,542],{"class":209},[203,160029,14845],{"class":262},[203,160031,101617],{"class":209},[203,160033,4182],{"class":262},[203,160035,3828],{"class":213},[203,160037,160038,160041,160043],{"class":205,"line":1290},[203,160039,160040],{"class":213},"        total ",[203,160042,9567],{"class":209},[203,160044,159370],{"class":213},[203,160046,160047],{"class":205,"line":1304},[203,160048,2489],{"emptyLinePlaceholder":131},[203,160050,160051,160053],{"class":205,"line":1310},[203,160052,30473],{"class":262},[203,160054,159389],{"class":213},[19,160056,160057],{},"也可以：",[194,160059,160061],{"className":30436,"code":160060,"language":30438,"meta":27,"style":27},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[200,160062,160063,160071,160075,160099,160107,160111],{"__ignoreMap":27},[203,160064,160065,160067,160069],{"class":205,"line":206},[203,160066,157318],{"class":213},[203,160068,259],{"class":209},[203,160070,47391],{"class":262},[203,160072,160073],{"class":205,"line":124},[203,160074,2489],{"emptyLinePlaceholder":131},[203,160076,160077,160079,160081,160083,160085,160087,160089,160091,160093,160095,160097],{"class":205,"line":1269},[203,160078,3114],{"class":209},[203,160080,9528],{"class":213},[203,160082,26101],{"class":209},[203,160084,32501],{"class":262},[203,160086,214],{"class":213},[203,160088,291],{"class":262},[203,160090,12525],{"class":213},[203,160092,551],{"class":262},[203,160094,12525],{"class":213},[203,160096,291],{"class":262},[203,160098,30844],{"class":213},[203,160100,160101,160103,160105],{"class":205,"line":1284},[203,160102,159365],{"class":213},[203,160104,9567],{"class":209},[203,160106,159370],{"class":213},[203,160108,160109],{"class":205,"line":1290},[203,160110,2489],{"emptyLinePlaceholder":131},[203,160112,160113,160115],{"class":205,"line":1304},[203,160114,30473],{"class":262},[203,160116,159389],{"class":213},[14,160118,160120],{"id":160119},"_49-循环嵌套","4.9 循环嵌套",[19,160122,160123],{},"嵌套循环就是循环里面再写循环。",[194,160125,160127],{"className":30436,"code":160126,"language":30438,"meta":27,"style":27},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[200,160128,160129,160149,160169],{"__ignoreMap":27},[203,160130,160131,160133,160135,160137,160139,160141,160143,160145,160147],{"class":205,"line":206},[203,160132,3114],{"class":209},[203,160134,9528],{"class":213},[203,160136,26101],{"class":209},[203,160138,32501],{"class":262},[203,160140,214],{"class":213},[203,160142,431],{"class":262},[203,160144,12525],{"class":213},[203,160146,507],{"class":262},[203,160148,30844],{"class":213},[203,160150,160151,160153,160155,160157,160159,160161,160163,160165,160167],{"class":205,"line":124},[203,160152,3290],{"class":209},[203,160154,9590],{"class":213},[203,160156,26101],{"class":209},[203,160158,32501],{"class":262},[203,160160,214],{"class":213},[203,160162,431],{"class":262},[203,160164,12525],{"class":213},[203,160166,507],{"class":262},[203,160168,30844],{"class":213},[203,160170,160171,160173,160175,160177,160180,160182,160184,160186,160189,160191,160193,160195,160197],{"class":205,"line":1269},[203,160172,32509],{"class":262},[203,160174,214],{"class":213},[203,160176,266],{"class":209},[203,160178,160179],{"class":318},"\"i=",[203,160181,1110],{"class":262},[203,160183,655],{"class":213},[203,160185,1160],{"class":262},[203,160187,160188],{"class":318},", j=",[203,160190,1110],{"class":262},[203,160192,681],{"class":213},[203,160194,1160],{"class":262},[203,160196,465],{"class":318},[203,160198,220],{"class":213},[19,160200,160201],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160203,160205],{"id":160204},"_410-九九乘法表","4.10 九九乘法表",[194,160207,160209],{"className":30436,"code":160208,"language":30438,"meta":27,"style":27},"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",[200,160210,160211,160231,160254,160306],{"__ignoreMap":27},[203,160212,160213,160215,160217,160219,160221,160223,160225,160227,160229],{"class":205,"line":206},[203,160214,3114],{"class":209},[203,160216,9528],{"class":213},[203,160218,26101],{"class":209},[203,160220,32501],{"class":262},[203,160222,214],{"class":213},[203,160224,431],{"class":262},[203,160226,12525],{"class":213},[203,160228,660],{"class":262},[203,160230,30844],{"class":213},[203,160232,160233,160235,160237,160239,160241,160243,160245,160248,160250,160252],{"class":205,"line":124},[203,160234,3290],{"class":209},[203,160236,9590],{"class":213},[203,160238,26101],{"class":209},[203,160240,32501],{"class":262},[203,160242,214],{"class":213},[203,160244,431],{"class":262},[203,160246,160247],{"class":213},", i ",[203,160249,695],{"class":209},[203,160251,25176],{"class":262},[203,160253,30844],{"class":213},[203,160255,160256,160258,160260,160262,160264,160266,160268,160270,160272,160274,160276,160278,160280,160282,160284,160286,160288,160290,160292,160294,160296,160298,160300,160302,160304],{"class":205,"line":1269},[203,160257,32509],{"class":262},[203,160259,214],{"class":213},[203,160261,266],{"class":209},[203,160263,465],{"class":318},[203,160265,1110],{"class":262},[203,160267,681],{"class":213},[203,160269,1160],{"class":262},[203,160271,669],{"class":318},[203,160273,1110],{"class":262},[203,160275,655],{"class":213},[203,160277,1160],{"class":262},[203,160279,259],{"class":318},[203,160281,1110],{"class":262},[203,160283,100206],{"class":213},[203,160285,669],{"class":209},[203,160287,3499],{"class":213},[203,160289,1160],{"class":262},[203,160291,465],{"class":318},[203,160293,12525],{"class":213},[203,160295,45859],{"class":5306},[203,160297,259],{"class":209},[203,160299,465],{"class":318},[203,160301,1320],{"class":262},[203,160303,465],{"class":318},[203,160305,220],{"class":213},[203,160307,160308,160310],{"class":205,"line":1284},[203,160309,31357],{"class":262},[203,160311,2065],{"class":213},[19,160313,160314],{},"关键点：",[157,160316,160317,160323,160329,160335],{},[160,160318,160319,160320,160322],{},"外层 ",[200,160321,655],{}," 控制行。",[160,160324,160325,160326,160328],{},"内层 ",[200,160327,681],{}," 控制列。",[160,160330,160331,160332,160334],{},"每行结束后用 ",[200,160333,146530],{}," 换行。",[160,160336,160337,160340],{},[200,160338,160339],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160342,160344],{"id":160343},"_411-循环else","4.11 循环else",[19,160346,160347,160348,160350,160351,160353,160354,160356],{},"Python 的循环可以带 ",[200,160349,1790],{},"。当循环正常结束时执行 ",[200,160352,1790],{},"，如果被 ",[200,160355,2142],{}," 打断，则不执行。",[194,160358,160360],{"className":30436,"code":160359,"language":30438,"meta":27,"style":27},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[200,160361,160362,160382,160394,160405,160409,160415],{"__ignoreMap":27},[203,160363,160364,160366,160368,160370,160372,160374,160376,160378,160380],{"class":205,"line":206},[203,160365,3114],{"class":209},[203,160367,9528],{"class":213},[203,160369,26101],{"class":209},[203,160371,32501],{"class":262},[203,160373,214],{"class":213},[203,160375,431],{"class":262},[203,160377,12525],{"class":213},[203,160379,558],{"class":262},[203,160381,30844],{"class":213},[203,160383,160384,160386,160388,160390,160392],{"class":205,"line":124},[203,160385,3190],{"class":209},[203,160387,9528],{"class":213},[203,160389,3038],{"class":209},[203,160391,2127],{"class":262},[203,160393,3828],{"class":213},[203,160395,160396,160398,160400,160403],{"class":205,"line":1269},[203,160397,32509],{"class":262},[203,160399,214],{"class":213},[203,160401,160402],{"class":318},"\"找到了\"",[203,160404,220],{"class":213},[203,160406,160407],{"class":205,"line":1284},[203,160408,31685],{"class":209},[203,160410,160411,160413],{"class":205,"line":1290},[203,160412,1790],{"class":209},[203,160414,3828],{"class":213},[203,160416,160417,160419,160421,160424],{"class":205,"line":1304},[203,160418,31357],{"class":262},[203,160420,214],{"class":213},[203,160422,160423],{"class":318},"\"没找到\"",[203,160425,220],{"class":213},[19,160427,160428],{},"常用于搜索。",[194,160430,160432],{"className":30436,"code":160431,"language":30438,"meta":27,"style":27},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[200,160433,160434,160455,160464,160468,160480,160491,160501,160505,160511],{"__ignoreMap":27},[203,160435,160436,160439,160441,160443,160445,160447,160449,160451,160453],{"class":205,"line":206},[203,160437,160438],{"class":213},"names ",[203,160440,259],{"class":209},[203,160442,52284],{"class":213},[203,160444,149946],{"class":318},[203,160446,12525],{"class":213},[203,160448,150994],{"class":318},[203,160450,12525],{"class":213},[203,160452,159789],{"class":318},[203,160454,33304],{"class":213},[203,160456,160457,160459,160461],{"class":205,"line":124},[203,160458,111636],{"class":213},[203,160460,259],{"class":209},[203,160462,160463],{"class":318}," \"小李\"\n",[203,160465,160466],{"class":205,"line":1269},[203,160467,2489],{"emptyLinePlaceholder":131},[203,160469,160470,160472,160475,160477],{"class":205,"line":1284},[203,160471,3114],{"class":209},[203,160473,160474],{"class":213}," name ",[203,160476,26101],{"class":209},[203,160478,160479],{"class":213}," names:\n",[203,160481,160482,160484,160486,160488],{"class":205,"line":1290},[203,160483,3190],{"class":209},[203,160485,160474],{"class":213},[203,160487,3038],{"class":209},[203,160489,160490],{"class":213}," target:\n",[203,160492,160493,160495,160497,160499],{"class":205,"line":1304},[203,160494,32509],{"class":262},[203,160496,214],{"class":213},[203,160498,160402],{"class":318},[203,160500,220],{"class":213},[203,160502,160503],{"class":205,"line":1310},[203,160504,31685],{"class":209},[203,160506,160507,160509],{"class":205,"line":1401},[203,160508,1790],{"class":209},[203,160510,3828],{"class":213},[203,160512,160513,160515,160517,160519],{"class":205,"line":1407},[203,160514,31357],{"class":262},[203,160516,214],{"class":213},[203,160518,160423],{"class":318},[203,160520,220],{"class":213},[14,160522,160524],{"id":160523},"_412-小案例登录重试","4.12 小案例：登录重试",[19,160526,123350],{},[157,160528,160529,160532,160535],{},[160,160530,160531],{},"用户最多输入 3 次密码。",[160,160533,160534],{},"密码正确则登录成功。",[160,160536,160537],{},"3 次都错误则锁定账号。",[19,160539,10125],{},[194,160541,160543],{"className":30436,"code":160542,"language":30438,"meta":27,"style":27},"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",[200,160544,160545,160555,160559,160575,160591,160595,160607,160618,160622,160628,160653,160659],{"__ignoreMap":27},[203,160546,160547,160550,160552],{"class":205,"line":206},[203,160548,160549],{"class":213},"password ",[203,160551,259],{"class":209},[203,160553,160554],{"class":318}," \"123456\"\n",[203,160556,160557],{"class":205,"line":124},[203,160558,2489],{"emptyLinePlaceholder":131},[203,160560,160561,160563,160565,160567,160569,160571,160573],{"class":205,"line":1269},[203,160562,3114],{"class":209},[203,160564,9528],{"class":213},[203,160566,26101],{"class":209},[203,160568,32501],{"class":262},[203,160570,214],{"class":213},[203,160572,285],{"class":262},[203,160574,30844],{"class":213},[203,160576,160577,160580,160582,160584,160586,160589],{"class":205,"line":1284},[203,160578,160579],{"class":213},"    user_password ",[203,160581,259],{"class":209},[203,160583,60663],{"class":262},[203,160585,214],{"class":213},[203,160587,160588],{"class":318},"\"请输入密码:\"",[203,160590,220],{"class":213},[203,160592,160593],{"class":205,"line":1290},[203,160594,2489],{"emptyLinePlaceholder":131},[203,160596,160597,160599,160602,160604],{"class":205,"line":1304},[203,160598,3190],{"class":209},[203,160600,160601],{"class":213}," user_password ",[203,160603,3038],{"class":209},[203,160605,160606],{"class":213}," password:\n",[203,160608,160609,160611,160613,160616],{"class":205,"line":1310},[203,160610,32509],{"class":262},[203,160612,214],{"class":213},[203,160614,160615],{"class":318},"\"登录成功\"",[203,160617,220],{"class":213},[203,160619,160620],{"class":205,"line":1401},[203,160621,31685],{"class":209},[203,160623,160624,160626],{"class":205,"line":1407},[203,160625,158080],{"class":209},[203,160627,3828],{"class":213},[203,160629,160630,160632,160634,160636,160639,160642,160644,160646,160648,160651],{"class":205,"line":1419},[203,160631,32509],{"class":262},[203,160633,214],{"class":213},[203,160635,266],{"class":209},[203,160637,160638],{"class":318},"\"密码错误，还剩",[203,160640,160641],{"class":262},"{2",[203,160643,52329],{"class":209},[203,160645,3121],{"class":213},[203,160647,1160],{"class":262},[203,160649,160650],{"class":318},"次机会\"",[203,160652,220],{"class":213},[203,160654,160655,160657],{"class":205,"line":1701},[203,160656,1790],{"class":209},[203,160658,3828],{"class":213},[203,160660,160661,160663,160665,160668],{"class":205,"line":1706},[203,160662,31357],{"class":262},[203,160664,214],{"class":213},[203,160666,160667],{"class":318},"\"账号已锁定\"",[203,160669,220],{"class":213},[14,160671,160673],{"id":160672},"_413-小案例菜单程序","4.13 小案例：菜单程序",[194,160675,160677],{"className":30436,"code":160676,"language":30438,"meta":27,"style":27},"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",[200,160678,160679,160687,160698,160709,160720,160731,160742,160746,160761,160765,160777,160788,160800,160811,160823,160834,160846,160856,160860,160866],{"__ignoreMap":27},[203,160680,160681,160683,160685],{"class":205,"line":206},[203,160682,108721],{"class":209},[203,160684,95350],{"class":262},[203,160686,3828],{"class":213},[203,160688,160689,160691,160693,160696],{"class":205,"line":124},[203,160690,31357],{"class":262},[203,160692,214],{"class":213},[203,160694,160695],{"class":318},"\"====== 菜单 ======\"",[203,160697,220],{"class":213},[203,160699,160700,160702,160704,160707],{"class":205,"line":1269},[203,160701,31357],{"class":262},[203,160703,214],{"class":213},[203,160705,160706],{"class":318},"\"1. 查询余额\"",[203,160708,220],{"class":213},[203,160710,160711,160713,160715,160718],{"class":205,"line":1284},[203,160712,31357],{"class":262},[203,160714,214],{"class":213},[203,160716,160717],{"class":318},"\"2. 存款\"",[203,160719,220],{"class":213},[203,160721,160722,160724,160726,160729],{"class":205,"line":1290},[203,160723,31357],{"class":262},[203,160725,214],{"class":213},[203,160727,160728],{"class":318},"\"3. 取款\"",[203,160730,220],{"class":213},[203,160732,160733,160735,160737,160740],{"class":205,"line":1304},[203,160734,31357],{"class":262},[203,160736,214],{"class":213},[203,160738,160739],{"class":318},"\"0. 退出\"",[203,160741,220],{"class":213},[203,160743,160744],{"class":205,"line":1310},[203,160745,2489],{"emptyLinePlaceholder":131},[203,160747,160748,160751,160753,160755,160757,160759],{"class":205,"line":1401},[203,160749,160750],{"class":213},"    choice ",[203,160752,259],{"class":209},[203,160754,60663],{"class":262},[203,160756,214],{"class":213},[203,160758,153131],{"class":318},[203,160760,220],{"class":213},[203,160762,160763],{"class":205,"line":1407},[203,160764,2489],{"emptyLinePlaceholder":131},[203,160766,160767,160769,160771,160773,160775],{"class":205,"line":1419},[203,160768,3190],{"class":209},[203,160770,153144],{"class":213},[203,160772,3038],{"class":209},[203,160774,153149],{"class":318},[203,160776,3828],{"class":213},[203,160778,160779,160781,160783,160786],{"class":205,"line":1701},[203,160780,32509],{"class":262},[203,160782,214],{"class":213},[203,160784,160785],{"class":318},"\"余额为1000元\"",[203,160787,220],{"class":213},[203,160789,160790,160792,160794,160796,160798],{"class":205,"line":1706},[203,160791,39351],{"class":209},[203,160793,153144],{"class":213},[203,160795,3038],{"class":209},[203,160797,153168],{"class":318},[203,160799,3828],{"class":213},[203,160801,160802,160804,160806,160809],{"class":205,"line":1712},[203,160803,32509],{"class":262},[203,160805,214],{"class":213},[203,160807,160808],{"class":318},"\"存款功能\"",[203,160810,220],{"class":213},[203,160812,160813,160815,160817,160819,160821],{"class":205,"line":1717},[203,160814,39351],{"class":209},[203,160816,153144],{"class":213},[203,160818,3038],{"class":209},[203,160820,153186],{"class":318},[203,160822,3828],{"class":213},[203,160824,160825,160827,160829,160832],{"class":205,"line":1731},[203,160826,32509],{"class":262},[203,160828,214],{"class":213},[203,160830,160831],{"class":318},"\"取款功能\"",[203,160833,220],{"class":213},[203,160835,160836,160838,160840,160842,160844],{"class":205,"line":1736},[203,160837,39351],{"class":209},[203,160839,153144],{"class":213},[203,160841,3038],{"class":209},[203,160843,153240],{"class":318},[203,160845,3828],{"class":213},[203,160847,160848,160850,160852,160854],{"class":205,"line":1742},[203,160849,32509],{"class":262},[203,160851,214],{"class":213},[203,160853,153251],{"class":318},[203,160855,220],{"class":213},[203,160857,160858],{"class":205,"line":1763},[203,160859,31685],{"class":209},[203,160861,160862,160864],{"class":205,"line":1768},[203,160863,158080],{"class":209},[203,160865,3828],{"class":213},[203,160867,160868,160870,160872,160874],{"class":205,"line":1782},[203,160869,32509],{"class":262},[203,160871,214],{"class":213},[203,160873,153272],{"class":318},[203,160875,220],{"class":213},[19,160877,160878,160879,160881,160882,28443],{},"菜单类程序通常使用 ",[200,160880,159580],{},"，用户选择退出时 ",[200,160883,2142],{},[14,160885,160887],{"id":160886},"_414-易错点","4.14 易错点",[157,160889,160890,160895,160901,160909,160915],{},[160,160891,160892,160894],{},[200,160893,108721],{}," 循环必须更新控制变量。",[160,160896,160897,160900],{},[200,160898,160899],{},"range(1, 10)"," 不包含 10。",[160,160902,160903,160905,160906,160908],{},[200,160904,2142],{}," 结束整个循环，",[200,160907,154730],{}," 只跳过本轮。",[160,160910,160911,160912,160914],{},"嵌套循环中，",[200,160913,2142],{}," 只跳出当前所在的一层循环。",[160,160916,160917],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,160919,160921],{"id":160920},"_415-本章练习","4.15 本章练习",[157,160923,160924,160927,160930,160933,160936],{},[160,160925,160926],{},"输出 1 到 100。",[160,160928,160929],{},"计算 1 到 100 的偶数和。",[160,160931,160932],{},"输出 100 以内能被 3 和 5 同时整除的数。",[160,160934,160935],{},"编写猜数字游戏，限制最多猜 7 次。",[160,160937,160938],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5216,160940,160941],{},"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":27,"searchDepth":124,"depth":124,"links":160943},[160944,160945,160946,160947,160948,160952,160953,160954,160955,160956,160957,160958,160959,160960,160961],{"id":159200,"depth":124,"text":159201},{"id":159230,"depth":124,"text":159231},{"id":159319,"depth":124,"text":159320},{"id":159413,"depth":124,"text":159414},{"id":159587,"depth":124,"text":159588,"children":160949},[160950,160951],{"id":159591,"depth":1269,"text":159592},{"id":159655,"depth":1269,"text":159656},{"id":159719,"depth":124,"text":159720},{"id":159814,"depth":124,"text":159815},{"id":159923,"depth":124,"text":159924},{"id":160119,"depth":124,"text":160120},{"id":160204,"depth":124,"text":160205},{"id":160343,"depth":124,"text":160344},{"id":160523,"depth":124,"text":160524},{"id":160672,"depth":124,"text":160673},{"id":160886,"depth":124,"text":160887},{"id":160920,"depth":124,"text":160921},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159192,"description":23467},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160968,"title":160969,"body":160970,"description":23467,"extension":129,"meta":162975,"navigation":131,"path":162976,"seo":162977,"stem":162978,"__hash__":162979},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160971,"toc":162955},[160972,160975,160979,160982,160985,160999,161002,161016,161020,161022,161041,161043,161090,161092,161106,161110,161184,161187,161191,161194,161253,161261,161264,161317,161320,161324,161329,161384,161392,161442,161446,161451,161459,161558,161564,161568,161573,161576,161587,161628,161641,161645,161648,161684,161687,161700,161703,161763,161767,161771,161774,161825,161829,161832,161879,161885,161951,161954,161958,161961,162077,162080,162084,162087,162193,162197,162200,162238,162241,162283,162286,162346,162349,162353,162817,162820,162824,162851,162857,162918,162922,162952],[10,160973,160969],{"id":160974},"_5-函数基础",[14,160976,160978],{"id":160977},"_51-为什么需要函数","5.1 为什么需要函数",[19,160980,160981],{},"函数用于封装一段可以重复使用的代码。",[19,160983,160984],{},"不使用函数的问题：",[157,160986,160987,160990,160993,160996],{},[160,160988,160989],{},"重复代码多。",[160,160991,160992],{},"修改逻辑时容易漏改。",[160,160994,160995],{},"主流程不清晰。",[160,160997,160998],{},"程序越写越长，难以维护。",[19,161000,161001],{},"使用函数后的好处：",[157,161003,161004,161007,161010,161013],{},[160,161005,161006],{},"提高复用性。",[160,161008,161009],{},"提高可读性。",[160,161011,161012],{},"便于调试。",[160,161014,161015],{},"便于分工。",[14,161017,161019],{"id":161018},"_52-函数定义","5.2 函数定义",[19,161021,5271],{},[194,161023,161025],{"className":30436,"code":161024,"language":30438,"meta":27,"style":27},"def 函数名():\n    函数体\n",[200,161026,161027,161036],{"__ignoreMap":27},[203,161028,161029,161031,161034],{"class":205,"line":206},[203,161030,32005],{"class":209},[203,161032,161033],{"class":2052}," 函数名",[203,161035,32011],{"class":213},[203,161037,161038],{"class":205,"line":124},[203,161039,161040],{"class":213},"    函数体\n",[19,161042,15225],{},[194,161044,161046],{"className":30436,"code":161045,"language":30438,"meta":27,"style":27},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[200,161047,161048,161057,161067,161077,161081,161085],{"__ignoreMap":27},[203,161049,161050,161052,161055],{"class":205,"line":206},[203,161051,32005],{"class":209},[203,161053,161054],{"class":2052}," say_hello",[203,161056,32011],{"class":213},[203,161058,161059,161061,161063,161065],{"class":205,"line":124},[203,161060,31357],{"class":262},[203,161062,214],{"class":213},[203,161064,5934],{"class":318},[203,161066,220],{"class":213},[203,161068,161069,161071,161073,161075],{"class":205,"line":1269},[203,161070,31357],{"class":262},[203,161072,214],{"class":213},[203,161074,146697],{"class":318},[203,161076,220],{"class":213},[203,161078,161079],{"class":205,"line":1284},[203,161080,2489],{"emptyLinePlaceholder":131},[203,161082,161083],{"class":205,"line":1290},[203,161084,2489],{"emptyLinePlaceholder":131},[203,161086,161087],{"class":205,"line":1304},[203,161088,161089],{"class":213},"say_hello()\n",[19,161091,9115],{},[157,161093,161094,161097,161100,161103],{},[160,161095,161096],{},"函数必须先定义，再调用。",[160,161098,161099],{},"函数名遵循变量命名规则。",[160,161101,161102],{},"函数体需要缩进。",[160,161104,161105],{},"函数不调用就不会执行。",[14,161107,161109],{"id":161108},"_53-函数调用","5.3 函数调用",[194,161111,161113],{"className":30436,"code":161112,"language":30438,"meta":27,"style":27},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[200,161114,161115,161124,161135,161146,161157,161167,161171,161175,161180],{"__ignoreMap":27},[203,161116,161117,161119,161122],{"class":205,"line":206},[203,161118,32005],{"class":209},[203,161120,161121],{"class":2052}," print_menu",[203,161123,32011],{"class":213},[203,161125,161126,161128,161130,161133],{"class":205,"line":124},[203,161127,31357],{"class":262},[203,161129,214],{"class":213},[203,161131,161132],{"class":318},"\"1. 查询\"",[203,161134,220],{"class":213},[203,161136,161137,161139,161141,161144],{"class":205,"line":1269},[203,161138,31357],{"class":262},[203,161140,214],{"class":213},[203,161142,161143],{"class":318},"\"2. 添加\"",[203,161145,220],{"class":213},[203,161147,161148,161150,161152,161155],{"class":205,"line":1284},[203,161149,31357],{"class":262},[203,161151,214],{"class":213},[203,161153,161154],{"class":318},"\"3. 删除\"",[203,161156,220],{"class":213},[203,161158,161159,161161,161163,161165],{"class":205,"line":1290},[203,161160,31357],{"class":262},[203,161162,214],{"class":213},[203,161164,160739],{"class":318},[203,161166,220],{"class":213},[203,161168,161169],{"class":205,"line":1304},[203,161170,2489],{"emptyLinePlaceholder":131},[203,161172,161173],{"class":205,"line":1310},[203,161174,2489],{"emptyLinePlaceholder":131},[203,161176,161177],{"class":205,"line":1401},[203,161178,161179],{"class":213},"print_menu()\n",[203,161181,161182],{"class":205,"line":1407},[203,161183,161179],{"class":213},[19,161185,161186],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161188,161190],{"id":161189},"_54-参数","5.4 参数",[19,161192,161193],{},"参数用于向函数传递数据。",[194,161195,161197],{"className":30436,"code":161196,"language":30438,"meta":27,"style":27},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[200,161198,161199,161208,161228,161232,161236,161245],{"__ignoreMap":27},[203,161200,161201,161203,161205],{"class":205,"line":206},[203,161202,32005],{"class":209},[203,161204,161054],{"class":2052},[203,161206,161207],{"class":213},"(name):\n",[203,161209,161210,161212,161214,161216,161218,161220,161222,161224,161226],{"class":205,"line":124},[203,161211,31357],{"class":262},[203,161213,214],{"class":213},[203,161215,266],{"class":209},[203,161217,157112],{"class":318},[203,161219,1110],{"class":262},[203,161221,79868],{"class":213},[203,161223,1160],{"class":262},[203,161225,465],{"class":318},[203,161227,220],{"class":213},[203,161229,161230],{"class":205,"line":1269},[203,161231,2489],{"emptyLinePlaceholder":131},[203,161233,161234],{"class":205,"line":1284},[203,161235,2489],{"emptyLinePlaceholder":131},[203,161237,161238,161241,161243],{"class":205,"line":1290},[203,161239,161240],{"class":213},"say_hello(",[203,161242,149946],{"class":318},[203,161244,220],{"class":213},[203,161246,161247,161249,161251],{"class":205,"line":1304},[203,161248,161240],{"class":213},[203,161250,150994],{"class":318},[203,161252,220],{"class":213},[19,161254,161255,161257,161258,161260],{},[200,161256,79868],{}," 是形参，",[200,161259,149946],{}," 是实参。",[19,161262,161263],{},"多个参数：",[194,161265,161267],{"className":30436,"code":161266,"language":30438,"meta":27,"style":27},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[200,161268,161269,161277,161290,161296,161300,161304],{"__ignoreMap":27},[203,161270,161271,161273,161275],{"class":205,"line":206},[203,161272,32005],{"class":209},[203,161274,5299],{"class":2052},[203,161276,151151],{"class":213},[203,161278,161279,161282,161284,161286,161288],{"class":205,"line":124},[203,161280,161281],{"class":213},"    result ",[203,161283,259],{"class":209},[203,161285,10959],{"class":213},[203,161287,695],{"class":209},[203,161289,151162],{"class":213},[203,161291,161292,161294],{"class":205,"line":1269},[203,161293,31357],{"class":262},[203,161295,76643],{"class":213},[203,161297,161298],{"class":205,"line":1284},[203,161299,2489],{"emptyLinePlaceholder":131},[203,161301,161302],{"class":205,"line":1290},[203,161303,2489],{"emptyLinePlaceholder":131},[203,161305,161306,161309,161311,161313,161315],{"class":205,"line":1304},[203,161307,161308],{"class":213},"add(",[203,161310,660],{"class":262},[203,161312,12525],{"class":213},[203,161314,914],{"class":262},[203,161316,220],{"class":213},[19,161318,161319],{},"调用时参数数量必须匹配。",[14,161321,161323],{"id":161322},"_55-返回值","5.5 返回值",[19,161325,161326,161328],{},[200,161327,17136],{}," 用于把函数内部的结果返回给调用者。",[194,161330,161332],{"className":30436,"code":161331,"language":30438,"meta":27,"style":27},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[200,161333,161334,161342,161352,161356,161360,161378],{"__ignoreMap":27},[203,161335,161336,161338,161340],{"class":205,"line":206},[203,161337,32005],{"class":209},[203,161339,5299],{"class":2052},[203,161341,151151],{"class":213},[203,161343,161344,161346,161348,161350],{"class":205,"line":124},[203,161345,4179],{"class":209},[203,161347,10959],{"class":213},[203,161349,695],{"class":209},[203,161351,151162],{"class":213},[203,161353,161354],{"class":205,"line":1269},[203,161355,2489],{"emptyLinePlaceholder":131},[203,161357,161358],{"class":205,"line":1284},[203,161359,2489],{"emptyLinePlaceholder":131},[203,161361,161362,161365,161367,161370,161372,161374,161376],{"class":205,"line":1290},[203,161363,161364],{"class":213},"result ",[203,161366,259],{"class":209},[203,161368,161369],{"class":213}," add(",[203,161371,660],{"class":262},[203,161373,12525],{"class":213},[203,161375,914],{"class":262},[203,161377,220],{"class":213},[203,161379,161380,161382],{"class":205,"line":1304},[203,161381,30473],{"class":262},[203,161383,76643],{"class":213},[19,161385,161386,161387,161389,161390,28443],{},"如果函数没有写 ",[200,161388,17136],{},"，默认返回 ",[200,161391,95744],{},[194,161393,161395],{"className":30436,"code":161394,"language":30438,"meta":27,"style":27},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[200,161396,161397,161405,161415,161419,161423,161432],{"__ignoreMap":27},[203,161398,161399,161401,161403],{"class":205,"line":206},[203,161400,32005],{"class":209},[203,161402,161054],{"class":2052},[203,161404,32011],{"class":213},[203,161406,161407,161409,161411,161413],{"class":205,"line":124},[203,161408,31357],{"class":262},[203,161410,214],{"class":213},[203,161412,5934],{"class":318},[203,161414,220],{"class":213},[203,161416,161417],{"class":205,"line":1269},[203,161418,2489],{"emptyLinePlaceholder":131},[203,161420,161421],{"class":205,"line":1284},[203,161422,2489],{"emptyLinePlaceholder":131},[203,161424,161425,161427,161429],{"class":205,"line":1290},[203,161426,161364],{"class":213},[203,161428,259],{"class":209},[203,161430,161431],{"class":213}," say_hello()\n",[203,161433,161434,161436,161439],{"class":205,"line":1304},[203,161435,30473],{"class":262},[203,161437,161438],{"class":213},"(result)  ",[203,161440,161441],{"class":272},"# None\n",[14,161443,161445],{"id":161444},"_56-return的作用","5.6 return的作用",[19,161447,161448,161450],{},[200,161449,17136],{}," 有两个作用：",[157,161452,161453,161456],{},[160,161454,161455],{},"返回结果。",[160,161457,161458],{},"结束函数。",[194,161460,161462],{"className":30436,"code":161461,"language":30438,"meta":27,"style":27},"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",[200,161463,161464,161474,161486,161493,161497,161509,161516,161520,161527,161531,161535,161546],{"__ignoreMap":27},[203,161465,161466,161468,161471],{"class":205,"line":206},[203,161467,32005],{"class":209},[203,161469,161470],{"class":2052}," check_age",[203,161472,161473],{"class":213},"(age):\n",[203,161475,161476,161478,161480,161482,161484],{"class":205,"line":124},[203,161477,3190],{"class":209},[203,161479,15797],{"class":213},[203,161481,1124],{"class":209},[203,161483,4182],{"class":262},[203,161485,3828],{"class":213},[203,161487,161488,161490],{"class":205,"line":1269},[203,161489,14842],{"class":209},[203,161491,161492],{"class":318}," \"年龄不合法\"\n",[203,161494,161495],{"class":205,"line":1284},[203,161496,2489],{"emptyLinePlaceholder":131},[203,161498,161499,161501,161503,161505,161507],{"class":205,"line":1290},[203,161500,3190],{"class":209},[203,161502,15797],{"class":213},[203,161504,1799],{"class":209},[203,161506,156343],{"class":262},[203,161508,3828],{"class":213},[203,161510,161511,161513],{"class":205,"line":1304},[203,161512,14842],{"class":209},[203,161514,161515],{"class":318}," \"成年人\"\n",[203,161517,161518],{"class":205,"line":1310},[203,161519,2489],{"emptyLinePlaceholder":131},[203,161521,161522,161524],{"class":205,"line":1401},[203,161523,4179],{"class":209},[203,161525,161526],{"class":318}," \"未成年人\"\n",[203,161528,161529],{"class":205,"line":1407},[203,161530,2489],{"emptyLinePlaceholder":131},[203,161532,161533],{"class":205,"line":1419},[203,161534,2489],{"emptyLinePlaceholder":131},[203,161536,161537,161539,161542,161544],{"class":205,"line":1701},[203,161538,30473],{"class":262},[203,161540,161541],{"class":213},"(check_age(",[203,161543,914],{"class":262},[203,161545,30555],{"class":213},[203,161547,161548,161550,161552,161554,161556],{"class":205,"line":1706},[203,161549,30473],{"class":262},[203,161551,161541],{"class":213},[203,161553,746],{"class":209},[203,161555,431],{"class":262},[203,161557,30555],{"class":213},[19,161559,161560,161561,161563],{},"函数执行到 ",[200,161562,17136],{}," 后，后面的代码不会继续执行。",[14,161565,161567],{"id":161566},"_57-none","5.7 None",[19,161569,161570,161572],{},[200,161571,95744],{}," 表示空值或没有结果。",[19,161574,161575],{},"常见使用场景：",[157,161577,161578,161581,161584],{},[160,161579,161580],{},"函数没有返回值。",[160,161582,161583],{},"变量暂时没有具体值。",[160,161585,161586],{},"表示查询不到结果。",[194,161588,161590],{"className":30436,"code":161589,"language":30438,"meta":27,"style":27},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[200,161591,161592,161600,161604,161617],{"__ignoreMap":27},[203,161593,161594,161596,161598],{"class":205,"line":206},[203,161595,161364],{"class":213},[203,161597,259],{"class":209},[203,161599,152230],{"class":262},[203,161601,161602],{"class":205,"line":124},[203,161603,2489],{"emptyLinePlaceholder":131},[203,161605,161606,161608,161611,161613,161615],{"class":205,"line":1269},[203,161607,1620],{"class":209},[203,161609,161610],{"class":213}," result ",[203,161612,38985],{"class":209},[203,161614,38991],{"class":262},[203,161616,3828],{"class":213},[203,161618,161619,161621,161623,161626],{"class":205,"line":1284},[203,161620,31357],{"class":262},[203,161622,214],{"class":213},[203,161624,161625],{"class":318},"\"没有数据\"",[203,161627,220],{"class":213},[19,161629,161630,161631,161633,161634,161637,161638,28443],{},"判断 ",[200,161632,95744],{}," 推荐使用 ",[200,161635,161636],{},"is None","，不要写成 ",[200,161639,161640],{},"== None",[14,161642,161644],{"id":161643},"_58-函数文档字符串","5.8 函数文档字符串",[19,161646,161647],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[194,161649,161651],{"className":30436,"code":161650,"language":30438,"meta":27,"style":27},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[200,161652,161653,161663,161668],{"__ignoreMap":27},[203,161654,161655,161657,161660],{"class":205,"line":206},[203,161656,32005],{"class":209},[203,161658,161659],{"class":2052}," calculate_bmi",[203,161661,161662],{"class":213},"(weight, height):\n",[203,161664,161665],{"class":205,"line":124},[203,161666,161667],{"class":318},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[203,161669,161670,161672,161675,161677,161680,161682],{"class":205,"line":1269},[203,161671,4179],{"class":209},[203,161673,161674],{"class":213}," weight ",[203,161676,798],{"class":209},[203,161678,161679],{"class":213}," height ",[203,161681,10751],{"class":209},[203,161683,47781],{"class":262},[19,161685,161686],{},"查看说明：",[194,161688,161690],{"className":30436,"code":161689,"language":30438,"meta":27,"style":27},"help(calculate_bmi)\n",[200,161691,161692],{"__ignoreMap":27},[203,161693,161694,161697],{"class":205,"line":206},[203,161695,161696],{"class":262},"help",[203,161698,161699],{"class":213},"(calculate_bmi)\n",[19,161701,161702],{},"较完整的写法：",[194,161704,161706],{"className":30436,"code":161705,"language":30438,"meta":27,"style":27},"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",[200,161707,161708,161716,161721,161726,161730,161735,161740,161745,161749],{"__ignoreMap":27},[203,161709,161710,161712,161714],{"class":205,"line":206},[203,161711,32005],{"class":209},[203,161713,161659],{"class":2052},[203,161715,161662],{"class":213},[203,161717,161718],{"class":205,"line":124},[203,161719,161720],{"class":318},"    \"\"\"\n",[203,161722,161723],{"class":205,"line":1269},[203,161724,161725],{"class":318},"    计算BMI。\n",[203,161727,161728],{"class":205,"line":1284},[203,161729,2489],{"emptyLinePlaceholder":131},[203,161731,161732],{"class":205,"line":1290},[203,161733,161734],{"class":318},"    :param weight: 体重，单位kg\n",[203,161736,161737],{"class":205,"line":1304},[203,161738,161739],{"class":318},"    :param height: 身高，单位m\n",[203,161741,161742],{"class":205,"line":1310},[203,161743,161744],{"class":318},"    :return: BMI数值\n",[203,161746,161747],{"class":205,"line":1401},[203,161748,161720],{"class":318},[203,161750,161751,161753,161755,161757,161759,161761],{"class":205,"line":1407},[203,161752,4179],{"class":209},[203,161754,161674],{"class":213},[203,161756,798],{"class":209},[203,161758,161679],{"class":213},[203,161760,10751],{"class":209},[203,161762,47781],{"class":262},[14,161764,161766],{"id":161765},"_59-变量作用域","5.9 变量作用域",[174,161768,161770],{"id":161769},"_591-局部变量","5.9.1 局部变量",[19,161772,161773],{},"在函数内部定义的变量，只能在函数内部使用。",[194,161775,161777],{"className":30436,"code":161776,"language":30438,"meta":27,"style":27},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[200,161778,161779,161788,161796,161802,161806,161810,161815],{"__ignoreMap":27},[203,161780,161781,161783,161786],{"class":205,"line":206},[203,161782,32005],{"class":209},[203,161784,161785],{"class":2052}," test",[203,161787,32011],{"class":213},[203,161789,161790,161792,161794],{"class":205,"line":124},[203,161791,45651],{"class":213},[203,161793,259],{"class":209},[203,161795,58486],{"class":262},[203,161797,161798,161800],{"class":205,"line":1269},[203,161799,31357],{"class":262},[203,161801,227],{"class":213},[203,161803,161804],{"class":205,"line":1284},[203,161805,2489],{"emptyLinePlaceholder":131},[203,161807,161808],{"class":205,"line":1290},[203,161809,2489],{"emptyLinePlaceholder":131},[203,161811,161812],{"class":205,"line":1304},[203,161813,161814],{"class":213},"test()\n",[203,161816,161817,161819,161822],{"class":205,"line":1310},[203,161818,30473],{"class":262},[203,161820,161821],{"class":213},"(num)  ",[203,161823,161824],{"class":272},"# 报错\n",[174,161826,161828],{"id":161827},"_592-全局变量","5.9.2 全局变量",[19,161830,161831],{},"在函数外部定义的变量，可以在函数内部读取。",[194,161833,161835],{"className":30436,"code":161834,"language":30438,"meta":27,"style":27},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[200,161836,161837,161845,161849,161853,161861,161867,161871,161875],{"__ignoreMap":27},[203,161838,161839,161841,161843],{"class":205,"line":206},[203,161840,146594],{"class":213},[203,161842,259],{"class":209},[203,161844,149411],{"class":318},[203,161846,161847],{"class":205,"line":124},[203,161848,2489],{"emptyLinePlaceholder":131},[203,161850,161851],{"class":205,"line":1269},[203,161852,2489],{"emptyLinePlaceholder":131},[203,161854,161855,161857,161859],{"class":205,"line":1284},[203,161856,32005],{"class":209},[203,161858,161054],{"class":2052},[203,161860,32011],{"class":213},[203,161862,161863,161865],{"class":205,"line":1290},[203,161864,31357],{"class":262},[203,161866,150718],{"class":213},[203,161868,161869],{"class":205,"line":1304},[203,161870,2489],{"emptyLinePlaceholder":131},[203,161872,161873],{"class":205,"line":1310},[203,161874,2489],{"emptyLinePlaceholder":131},[203,161876,161877],{"class":205,"line":1401},[203,161878,161089],{"class":213},[19,161880,161881,161882,28443],{},"如果要在函数内部修改全局变量，需要 ",[200,161883,161884],{},"global",[194,161886,161888],{"className":30436,"code":161887,"language":30438,"meta":27,"style":27},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[200,161889,161890,161898,161902,161906,161915,161923,161931,161935,161939,161944],{"__ignoreMap":27},[203,161891,161892,161894,161896],{"class":205,"line":206},[203,161893,146749],{"class":213},[203,161895,259],{"class":209},[203,161897,47391],{"class":262},[203,161899,161900],{"class":205,"line":124},[203,161901,2489],{"emptyLinePlaceholder":131},[203,161903,161904],{"class":205,"line":1269},[203,161905,2489],{"emptyLinePlaceholder":131},[203,161907,161908,161910,161913],{"class":205,"line":1284},[203,161909,32005],{"class":209},[203,161911,161912],{"class":2052}," add_count",[203,161914,32011],{"class":213},[203,161916,161917,161920],{"class":205,"line":1290},[203,161918,161919],{"class":209},"    global",[203,161921,161922],{"class":213}," count\n",[203,161924,161925,161927,161929],{"class":205,"line":1304},[203,161926,159491],{"class":213},[203,161928,9567],{"class":209},[203,161930,55757],{"class":262},[203,161932,161933],{"class":205,"line":1310},[203,161934,2489],{"emptyLinePlaceholder":131},[203,161936,161937],{"class":205,"line":1401},[203,161938,2489],{"emptyLinePlaceholder":131},[203,161940,161941],{"class":205,"line":1407},[203,161942,161943],{"class":213},"add_count()\n",[203,161945,161946,161948],{"class":205,"line":1419},[203,161947,30473],{"class":262},[203,161949,161950],{"class":213},"(count)\n",[19,161952,161953],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,161955,161957],{"id":161956},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,161959,161960],{},"一个函数中可以调用另一个函数。",[194,161962,161964],{"className":30436,"code":161963,"language":30438,"meta":27,"style":27},"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",[200,161965,161966,161975,161989,161993,161997,162006,162011,162031,162052,162056,162060,162064],{"__ignoreMap":27},[203,161967,161968,161970,161973],{"class":205,"line":206},[203,161969,32005],{"class":209},[203,161971,161972],{"class":2052}," print_line",[203,161974,32011],{"class":213},[203,161976,161977,161979,161981,161983,161985,161987],{"class":205,"line":124},[203,161978,31357],{"class":262},[203,161980,214],{"class":213},[203,161982,32541],{"class":318},[203,161984,6608],{"class":209},[203,161986,78723],{"class":262},[203,161988,220],{"class":213},[203,161990,161991],{"class":205,"line":1269},[203,161992,2489],{"emptyLinePlaceholder":131},[203,161994,161995],{"class":205,"line":1284},[203,161996,2489],{"emptyLinePlaceholder":131},[203,161998,161999,162001,162004],{"class":205,"line":1290},[203,162000,32005],{"class":209},[203,162002,162003],{"class":2052}," print_info",[203,162005,149433],{"class":213},[203,162007,162008],{"class":205,"line":1304},[203,162009,162010],{"class":213},"    print_line()\n",[203,162012,162013,162015,162017,162019,162021,162023,162025,162027,162029],{"class":205,"line":1310},[203,162014,31357],{"class":262},[203,162016,214],{"class":213},[203,162018,266],{"class":209},[203,162020,156740],{"class":318},[203,162022,1110],{"class":262},[203,162024,79868],{"class":213},[203,162026,1160],{"class":262},[203,162028,465],{"class":318},[203,162030,220],{"class":213},[203,162032,162033,162035,162037,162039,162042,162044,162046,162048,162050],{"class":205,"line":1401},[203,162034,31357],{"class":262},[203,162036,214],{"class":213},[203,162038,266],{"class":209},[203,162040,162041],{"class":318},"\"年龄:",[203,162043,1110],{"class":262},[203,162045,70279],{"class":213},[203,162047,1160],{"class":262},[203,162049,465],{"class":318},[203,162051,220],{"class":213},[203,162053,162054],{"class":205,"line":1407},[203,162055,162010],{"class":213},[203,162057,162058],{"class":205,"line":1419},[203,162059,2489],{"emptyLinePlaceholder":131},[203,162061,162062],{"class":205,"line":1701},[203,162063,2489],{"emptyLinePlaceholder":131},[203,162065,162066,162069,162071,162073,162075],{"class":205,"line":1706},[203,162067,162068],{"class":213},"print_info(",[203,162070,149946],{"class":318},[203,162072,12525],{"class":213},[203,162074,864],{"class":262},[203,162076,220],{"class":213},[19,162078,162079],{},"这种方式可以把小功能组合成大功能。",[14,162081,162083],{"id":162082},"_511-参数检查","5.11 参数检查",[19,162085,162086],{},"函数内部可以检查参数是否合法。",[194,162088,162090],{"className":30436,"code":162089,"language":30438,"meta":27,"style":27},"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",[200,162091,162092,162101,162113,162119,162129,162133,162137,162154,162158,162170,162181,162187],{"__ignoreMap":27},[203,162093,162094,162096,162099],{"class":205,"line":206},[203,162095,32005],{"class":209},[203,162097,162098],{"class":2052}," divide",[203,162100,151151],{"class":213},[203,162102,162103,162105,162107,162109,162111],{"class":205,"line":124},[203,162104,3190],{"class":209},[203,162106,10972],{"class":213},[203,162108,3038],{"class":209},[203,162110,4182],{"class":262},[203,162112,3828],{"class":213},[203,162114,162115,162117],{"class":205,"line":1269},[203,162116,14842],{"class":209},[203,162118,152230],{"class":262},[203,162120,162121,162123,162125,162127],{"class":205,"line":1284},[203,162122,4179],{"class":209},[203,162124,10959],{"class":213},[203,162126,798],{"class":209},[203,162128,151162],{"class":213},[203,162130,162131],{"class":205,"line":1290},[203,162132,2489],{"emptyLinePlaceholder":131},[203,162134,162135],{"class":205,"line":1304},[203,162136,2489],{"emptyLinePlaceholder":131},[203,162138,162139,162141,162143,162146,162148,162150,162152],{"class":205,"line":1310},[203,162140,161364],{"class":213},[203,162142,259],{"class":209},[203,162144,162145],{"class":213}," divide(",[203,162147,660],{"class":262},[203,162149,12525],{"class":213},[203,162151,405],{"class":262},[203,162153,220],{"class":213},[203,162155,162156],{"class":205,"line":1401},[203,162157,2489],{"emptyLinePlaceholder":131},[203,162159,162160,162162,162164,162166,162168],{"class":205,"line":1407},[203,162161,1620],{"class":209},[203,162163,161610],{"class":213},[203,162165,38985],{"class":209},[203,162167,38991],{"class":262},[203,162169,3828],{"class":213},[203,162171,162172,162174,162176,162179],{"class":205,"line":1419},[203,162173,31357],{"class":262},[203,162175,214],{"class":213},[203,162177,162178],{"class":318},"\"除数不能为0\"",[203,162180,220],{"class":213},[203,162182,162183,162185],{"class":205,"line":1701},[203,162184,1790],{"class":209},[203,162186,3828],{"class":213},[203,162188,162189,162191],{"class":205,"line":1706},[203,162190,31357],{"class":262},[203,162192,76643],{"class":213},[14,162194,162196],{"id":162195},"_512-类型提示","5.12 类型提示",[19,162198,162199],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[194,162201,162203],{"className":30436,"code":162202,"language":30438,"meta":27,"style":27},"def add(a: int, b: int) -> int:\n    return a + b\n",[200,162204,162205,162228],{"__ignoreMap":27},[203,162206,162207,162209,162211,162214,162216,162219,162221,162224,162226],{"class":205,"line":206},[203,162208,32005],{"class":209},[203,162210,5299],{"class":2052},[203,162212,162213],{"class":213},"(a: ",[203,162215,217],{"class":262},[203,162217,162218],{"class":213},", b: ",[203,162220,217],{"class":262},[203,162222,162223],{"class":213},") -> ",[203,162225,217],{"class":262},[203,162227,3828],{"class":213},[203,162229,162230,162232,162234,162236],{"class":205,"line":124},[203,162231,4179],{"class":209},[203,162233,10959],{"class":213},[203,162235,695],{"class":209},[203,162237,151162],{"class":213},[19,162239,162240],{},"字符串参数：",[194,162242,162244],{"className":30436,"code":162243,"language":30438,"meta":27,"style":27},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[200,162245,162246,162263],{"__ignoreMap":27},[203,162247,162248,162250,162252,162255,162257,162259,162261],{"class":205,"line":206},[203,162249,32005],{"class":209},[203,162251,161054],{"class":2052},[203,162253,162254],{"class":213},"(name: ",[203,162256,1389],{"class":262},[203,162258,162223],{"class":213},[203,162260,95744],{"class":262},[203,162262,3828],{"class":213},[203,162264,162265,162267,162269,162271,162273,162275,162277,162279,162281],{"class":205,"line":124},[203,162266,31357],{"class":262},[203,162268,214],{"class":213},[203,162270,266],{"class":209},[203,162272,157112],{"class":318},[203,162274,1110],{"class":262},[203,162276,79868],{"class":213},[203,162278,1160],{"class":262},[203,162280,465],{"class":318},[203,162282,220],{"class":213},[19,162284,162285],{},"列表参数：",[194,162287,162289],{"className":30436,"code":162288,"language":30438,"meta":27,"style":27},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[200,162290,162291,162310,162318,162330,162339],{"__ignoreMap":27},[203,162292,162293,162295,162298,162301,162303,162306,162308],{"class":205,"line":206},[203,162294,32005],{"class":209},[203,162296,162297],{"class":2052}," get_total",[203,162299,162300],{"class":213},"(numbers: list[",[203,162302,217],{"class":262},[203,162304,162305],{"class":213},"]) -> ",[203,162307,217],{"class":262},[203,162309,3828],{"class":213},[203,162311,162312,162314,162316],{"class":205,"line":124},[203,162313,159365],{"class":213},[203,162315,259],{"class":209},[203,162317,47391],{"class":262},[203,162319,162320,162322,162325,162327],{"class":205,"line":1269},[203,162321,3290],{"class":209},[203,162323,162324],{"class":213}," number ",[203,162326,26101],{"class":209},[203,162328,162329],{"class":213}," numbers:\n",[203,162331,162332,162334,162336],{"class":205,"line":1284},[203,162333,160040],{"class":213},[203,162335,9567],{"class":209},[203,162337,162338],{"class":213}," number\n",[203,162340,162341,162343],{"class":205,"line":1290},[203,162342,4179],{"class":209},[203,162344,162345],{"class":213}," total\n",[19,162347,162348],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162350,162352],{"id":162351},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[194,162354,162356],{"className":30436,"code":162355,"language":30438,"meta":27,"style":27},"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",[200,162357,162358,162368,162372,162376,162384,162395,162405,162415,162425,162435,162439,162443,162452,162474,162478,162482,162491,162497,162517,162529,162540,162544,162553,162564,162569,162573,162577,162586,162592,162611,162623,162633,162637,162648,162658,162662,162670,162681,162685,162689,162693,162701,162706,162720,162724,162736,162741,162753,162758,162770,162775,162787,162797,162801,162807],{"__ignoreMap":27},[203,162359,162360,162363,162365],{"class":205,"line":206},[203,162361,162362],{"class":213},"balance ",[203,162364,259],{"class":209},[203,162366,162367],{"class":262}," 1000\n",[203,162369,162370],{"class":205,"line":124},[203,162371,2489],{"emptyLinePlaceholder":131},[203,162373,162374],{"class":205,"line":1269},[203,162375,2489],{"emptyLinePlaceholder":131},[203,162377,162378,162380,162382],{"class":205,"line":1284},[203,162379,32005],{"class":209},[203,162381,152091],{"class":2052},[203,162383,32011],{"class":213},[203,162385,162386,162388,162390,162393],{"class":205,"line":1290},[203,162387,31357],{"class":262},[203,162389,214],{"class":213},[203,162391,162392],{"class":318},"\"====== ATM ======\"",[203,162394,220],{"class":213},[203,162396,162397,162399,162401,162403],{"class":205,"line":1304},[203,162398,31357],{"class":262},[203,162400,214],{"class":213},[203,162402,160706],{"class":318},[203,162404,220],{"class":213},[203,162406,162407,162409,162411,162413],{"class":205,"line":1310},[203,162408,31357],{"class":262},[203,162410,214],{"class":213},[203,162412,160717],{"class":318},[203,162414,220],{"class":213},[203,162416,162417,162419,162421,162423],{"class":205,"line":1401},[203,162418,31357],{"class":262},[203,162420,214],{"class":213},[203,162422,160728],{"class":318},[203,162424,220],{"class":213},[203,162426,162427,162429,162431,162433],{"class":205,"line":1407},[203,162428,31357],{"class":262},[203,162430,214],{"class":213},[203,162432,160739],{"class":318},[203,162434,220],{"class":213},[203,162436,162437],{"class":205,"line":1419},[203,162438,2489],{"emptyLinePlaceholder":131},[203,162440,162441],{"class":205,"line":1701},[203,162442,2489],{"emptyLinePlaceholder":131},[203,162444,162445,162447,162450],{"class":205,"line":1706},[203,162446,32005],{"class":209},[203,162448,162449],{"class":2052}," show_balance",[203,162451,32011],{"class":213},[203,162453,162454,162456,162458,162460,162463,162465,162468,162470,162472],{"class":205,"line":1712},[203,162455,31357],{"class":262},[203,162457,214],{"class":213},[203,162459,266],{"class":209},[203,162461,162462],{"class":318},"\"当前余额:",[203,162464,1110],{"class":262},[203,162466,162467],{"class":213},"balance",[203,162469,1160],{"class":262},[203,162471,157070],{"class":318},[203,162473,220],{"class":213},[203,162475,162476],{"class":205,"line":1717},[203,162477,2489],{"emptyLinePlaceholder":131},[203,162479,162480],{"class":205,"line":1731},[203,162481,2489],{"emptyLinePlaceholder":131},[203,162483,162484,162486,162489],{"class":205,"line":1736},[203,162485,32005],{"class":209},[203,162487,162488],{"class":2052}," save_money",[203,162490,32011],{"class":213},[203,162492,162493,162495],{"class":205,"line":1742},[203,162494,161919],{"class":209},[203,162496,150157],{"class":213},[203,162498,162499,162502,162504,162506,162508,162510,162512,162515],{"class":205,"line":1763},[203,162500,162501],{"class":213},"    money ",[203,162503,259],{"class":209},[203,162505,109855],{"class":262},[203,162507,214],{"class":213},[203,162509,53879],{"class":262},[203,162511,214],{"class":213},[203,162513,162514],{"class":318},"\"请输入存款金额:\"",[203,162516,30555],{"class":213},[203,162518,162519,162521,162523,162525,162527],{"class":205,"line":1768},[203,162520,3190],{"class":209},[203,162522,150200],{"class":213},[203,162524,1677],{"class":209},[203,162526,4182],{"class":262},[203,162528,3828],{"class":213},[203,162530,162531,162533,162535,162538],{"class":205,"line":1782},[203,162532,32509],{"class":262},[203,162534,214],{"class":213},[203,162536,162537],{"class":318},"\"金额必须大于0\"",[203,162539,220],{"class":213},[203,162541,162542],{"class":205,"line":1787},[203,162543,152419],{"class":209},[203,162545,162546,162549,162551],{"class":205,"line":1816},[203,162547,162548],{"class":213},"    balance ",[203,162550,9567],{"class":209},[203,162552,150233],{"class":213},[203,162554,162555,162557,162559,162562],{"class":205,"line":1821},[203,162556,31357],{"class":262},[203,162558,214],{"class":213},[203,162560,162561],{"class":318},"\"存款成功\"",[203,162563,220],{"class":213},[203,162565,162566],{"class":205,"line":1838},[203,162567,162568],{"class":213},"    show_balance()\n",[203,162570,162571],{"class":205,"line":1843},[203,162572,2489],{"emptyLinePlaceholder":131},[203,162574,162575],{"class":205,"line":1848},[203,162576,2489],{"emptyLinePlaceholder":131},[203,162578,162579,162581,162584],{"class":205,"line":1853},[203,162580,32005],{"class":209},[203,162582,162583],{"class":2052}," withdraw_money",[203,162585,32011],{"class":213},[203,162587,162588,162590],{"class":205,"line":1867},[203,162589,161919],{"class":209},[203,162591,150157],{"class":213},[203,162593,162594,162596,162598,162600,162602,162604,162606,162609],{"class":205,"line":1872},[203,162595,162501],{"class":213},[203,162597,259],{"class":209},[203,162599,109855],{"class":262},[203,162601,214],{"class":213},[203,162603,53879],{"class":262},[203,162605,214],{"class":213},[203,162607,162608],{"class":318},"\"请输入取款金额:\"",[203,162610,30555],{"class":213},[203,162612,162613,162615,162617,162619,162621],{"class":205,"line":2666},[203,162614,3190],{"class":209},[203,162616,150200],{"class":213},[203,162618,1677],{"class":209},[203,162620,4182],{"class":262},[203,162622,3828],{"class":213},[203,162624,162625,162627,162629,162631],{"class":205,"line":2680},[203,162626,32509],{"class":262},[203,162628,214],{"class":213},[203,162630,162537],{"class":318},[203,162632,220],{"class":213},[203,162634,162635],{"class":205,"line":2688},[203,162636,152419],{"class":209},[203,162638,162639,162641,162643,162645],{"class":205,"line":2693},[203,162640,3190],{"class":209},[203,162642,150200],{"class":213},[203,162644,1174],{"class":209},[203,162646,162647],{"class":213}," balance:\n",[203,162649,162650,162652,162654,162656],{"class":205,"line":2699},[203,162651,32509],{"class":262},[203,162653,214],{"class":213},[203,162655,150295],{"class":318},[203,162657,220],{"class":213},[203,162659,162660],{"class":205,"line":2705},[203,162661,152419],{"class":209},[203,162663,162664,162666,162668],{"class":205,"line":2710},[203,162665,162548],{"class":213},[203,162667,150310],{"class":209},[203,162669,150233],{"class":213},[203,162671,162672,162674,162676,162679],{"class":205,"line":8038},[203,162673,31357],{"class":262},[203,162675,214],{"class":213},[203,162677,162678],{"class":318},"\"取款成功\"",[203,162680,220],{"class":213},[203,162682,162683],{"class":205,"line":8062},[203,162684,162568],{"class":213},[203,162686,162687],{"class":205,"line":8067},[203,162688,2489],{"emptyLinePlaceholder":131},[203,162690,162691],{"class":205,"line":8073},[203,162692,2489],{"emptyLinePlaceholder":131},[203,162694,162695,162697,162699],{"class":205,"line":8100},[203,162696,108721],{"class":209},[203,162698,95350],{"class":262},[203,162700,3828],{"class":213},[203,162702,162703],{"class":205,"line":8105},[203,162704,162705],{"class":213},"    show_menu()\n",[203,162707,162708,162710,162712,162714,162716,162718],{"class":205,"line":8111},[203,162709,160750],{"class":213},[203,162711,259],{"class":209},[203,162713,60663],{"class":262},[203,162715,214],{"class":213},[203,162717,153131],{"class":318},[203,162719,220],{"class":213},[203,162721,162722],{"class":205,"line":8123},[203,162723,2489],{"emptyLinePlaceholder":131},[203,162725,162726,162728,162730,162732,162734],{"class":205,"line":8135},[203,162727,3190],{"class":209},[203,162729,153144],{"class":213},[203,162731,3038],{"class":209},[203,162733,153149],{"class":318},[203,162735,3828],{"class":213},[203,162737,162738],{"class":205,"line":8147},[203,162739,162740],{"class":213},"        show_balance()\n",[203,162742,162743,162745,162747,162749,162751],{"class":205,"line":9806},[203,162744,39351],{"class":209},[203,162746,153144],{"class":213},[203,162748,3038],{"class":209},[203,162750,153168],{"class":318},[203,162752,3828],{"class":213},[203,162754,162755],{"class":205,"line":9831},[203,162756,162757],{"class":213},"        save_money()\n",[203,162759,162760,162762,162764,162766,162768],{"class":205,"line":9854},[203,162761,39351],{"class":209},[203,162763,153144],{"class":213},[203,162765,3038],{"class":209},[203,162767,153186],{"class":318},[203,162769,3828],{"class":213},[203,162771,162772],{"class":205,"line":9878},[203,162773,162774],{"class":213},"        withdraw_money()\n",[203,162776,162777,162779,162781,162783,162785],{"class":205,"line":9883},[203,162778,39351],{"class":209},[203,162780,153144],{"class":213},[203,162782,3038],{"class":209},[203,162784,153240],{"class":318},[203,162786,3828],{"class":213},[203,162788,162789,162791,162793,162795],{"class":205,"line":9888},[203,162790,32509],{"class":262},[203,162792,214],{"class":213},[203,162794,153251],{"class":318},[203,162796,220],{"class":213},[203,162798,162799],{"class":205,"line":9893},[203,162800,31685],{"class":209},[203,162802,162803,162805],{"class":205,"line":9902},[203,162804,158080],{"class":209},[203,162806,3828],{"class":213},[203,162808,162809,162811,162813,162815],{"class":205,"line":9907},[203,162810,32509],{"class":262},[203,162812,214],{"class":213},[203,162814,153272],{"class":318},[203,162816,220],{"class":213},[19,162818,162819],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,162821,162823],{"id":162822},"_514-易错点","5.14 易错点",[157,162825,162826,162829,162832,162837,162842,162845],{},[160,162827,162828],{},"函数定义后必须调用才会执行。",[160,162830,162831],{},"函数名后面有括号才是调用。",[160,162833,162834,162836],{},[200,162835,17136],{}," 后面的代码不会执行。",[160,162838,162839,162840,28443],{},"没有返回值的函数默认返回 ",[200,162841,95744],{},[160,162843,162844],{},"局部变量不能在函数外部访问。",[160,162846,162847,162848,162850],{},"不要滥用 ",[200,162849,161884],{},"，更好的方式是让函数返回新值。",[19,162852,162853,162854,162856],{},"例如不用 ",[200,162855,161884],{}," 改写存款：",[194,162858,162860],{"className":30436,"code":162859,"language":30438,"meta":27,"style":27},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[200,162861,162862,162871,162882,162886,162890,162898,162911],{"__ignoreMap":27},[203,162863,162864,162866,162868],{"class":205,"line":206},[203,162865,32005],{"class":209},[203,162867,162488],{"class":2052},[203,162869,162870],{"class":213},"(balance, money):\n",[203,162872,162873,162875,162878,162880],{"class":205,"line":124},[203,162874,4179],{"class":209},[203,162876,162877],{"class":213}," balance ",[203,162879,695],{"class":209},[203,162881,150233],{"class":213},[203,162883,162884],{"class":205,"line":1269},[203,162885,2489],{"emptyLinePlaceholder":131},[203,162887,162888],{"class":205,"line":1284},[203,162889,2489],{"emptyLinePlaceholder":131},[203,162891,162892,162894,162896],{"class":205,"line":1290},[203,162893,162362],{"class":213},[203,162895,259],{"class":209},[203,162897,162367],{"class":262},[203,162899,162900,162902,162904,162907,162909],{"class":205,"line":1304},[203,162901,162362],{"class":213},[203,162903,259],{"class":209},[203,162905,162906],{"class":213}," save_money(balance, ",[203,162908,1811],{"class":262},[203,162910,220],{"class":213},[203,162912,162913,162915],{"class":205,"line":1310},[203,162914,30473],{"class":262},[203,162916,162917],{"class":213},"(balance)\n",[14,162919,162921],{"id":162920},"_515-本章练习","5.15 本章练习",[157,162923,162924,162931,162937,162943,162949],{},[160,162925,162926,162927,162930],{},"定义函数 ",[200,162928,162929],{},"print_student(name, age)","，输出学生信息。",[160,162932,162926,162933,162936],{},[200,162934,162935],{},"get_max(a, b, c)","，返回三个数中的最大值。",[160,162938,162926,162939,162942],{},[200,162940,162941],{},"is_even(num)","，判断一个数是否为偶数。",[160,162944,162926,162945,162948],{},[200,162946,162947],{},"calculate_bmi(weight, height)","，返回 BMI。",[160,162950,162951],{},"把第 4 章的菜单程序拆分成多个函数。",[5216,162953,162954],{},"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":27,"searchDepth":124,"depth":124,"links":162956},[162957,162958,162959,162960,162961,162962,162963,162964,162965,162969,162970,162971,162972,162973,162974],{"id":160977,"depth":124,"text":160978},{"id":161018,"depth":124,"text":161019},{"id":161108,"depth":124,"text":161109},{"id":161189,"depth":124,"text":161190},{"id":161322,"depth":124,"text":161323},{"id":161444,"depth":124,"text":161445},{"id":161566,"depth":124,"text":161567},{"id":161643,"depth":124,"text":161644},{"id":161765,"depth":124,"text":161766,"children":162966},[162967,162968],{"id":161769,"depth":1269,"text":161770},{"id":161827,"depth":1269,"text":161828},{"id":161956,"depth":124,"text":161957},{"id":162082,"depth":124,"text":162083},{"id":162195,"depth":124,"text":162196},{"id":162351,"depth":124,"text":162352},{"id":162822,"depth":124,"text":162823},{"id":162920,"depth":124,"text":162921},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160969,"description":23467},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162981,"title":162982,"body":162983,"description":23467,"extension":129,"meta":166027,"navigation":131,"path":166028,"seo":166029,"stem":166030,"__hash__":166031},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162984,"toc":166008},[162985,162988,162992,162995,162998,163102,163105,163109,163112,163192,163195,163199,163202,163262,163265,163301,163304,163319,163323,163396,163399,163454,163457,163527,163530,163614,163624,163682,163686,163731,163734,163760,163763,163869,163873,163876,163918,163921,163985,163988,163992,163995,164056,164059,164089,164092,164130,164134,164137,164146,164149,164273,164276,164317,164321,164324,164335,164375,164378,164393,164398,164401,164468,164471,164561,164565,164568,164616,164619,164646,164648,164678,164681,164701,164704,164735,164738,164771,164775,164778,164802,164805,164829,164832,164856,164860,164863,164993,164996,165076,165079,165154,165158,165161,165211,165214,165256,165259,165283,165285,165309,165312,165367,165370,165436,165440,165443,165446,165484,165487,165540,165543,165589,165592,165625,165628,165632,165951,165955,165984,165988,166005],[10,162986,162982],{"id":162987},"_6-数据容器",[14,162989,162991],{"id":162990},"_61-什么是数据容器","6.1 什么是数据容器",[19,162993,162994],{},"数据容器用于一次保存多个数据。",[19,162996,162997],{},"常见容器：",[351,162999,163000,163017],{},[354,163001,163002],{},[357,163003,163004,163006,163009,163012,163015],{},[360,163005,25829],{},[360,163007,163008],{},"是否有序",[360,163010,163011],{},"是否可变",[360,163013,163014],{},"是否允许重复",[360,163016,27550],{},[398,163018,163019,163037,163053,163068,163085],{},[357,163020,163021,163024,163027,163030,163033],{},[403,163022,163023],{},"list列表",[403,163025,163026],{},"有序",[403,163028,163029],{},"可变",[403,163031,163032],{},"允许",[403,163034,163035],{},[200,163036,155315],{},[357,163038,163039,163042,163044,163047,163049],{},[403,163040,163041],{},"tuple元组",[403,163043,163026],{},[403,163045,163046],{},"不可变",[403,163048,163032],{},[403,163050,163051],{},[200,163052,155328],{},[357,163054,163055,163058,163060,163062,163064],{},[403,163056,163057],{},"str字符串",[403,163059,163026],{},[403,163061,163046],{},[403,163063,163032],{},[403,163065,163066],{},[200,163067,155938],{},[357,163069,163070,163073,163076,163078,163081],{},[403,163071,163072],{},"set集合",[403,163074,163075],{},"无序",[403,163077,163029],{},[403,163079,163080],{},"不允许",[403,163082,163083],{},[200,163084,155353],{},[357,163086,163087,163090,163092,163094,163097],{},[403,163088,163089],{},"dict字典",[403,163091,163026],{},[403,163093,163029],{},[403,163095,163096],{},"key不允许重复",[403,163098,163099],{},[200,163100,163101],{},"{\"name\": \"小明\"}",[19,163103,163104],{},"Python 3.7 之后，字典保持插入顺序。",[14,163106,163108],{"id":163107},"_62-列表list","6.2 列表list",[19,163110,163111],{},"列表用于保存一组有顺序的数据。",[194,163113,163115],{"className":30436,"code":163114,"language":30438,"meta":27,"style":27},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[200,163116,163117,163137,163162,163183],{"__ignoreMap":27},[203,163118,163119,163121,163123,163125,163127,163129,163131,163133,163135],{"class":205,"line":206},[203,163120,160438],{"class":213},[203,163122,259],{"class":209},[203,163124,52284],{"class":213},[203,163126,149946],{"class":318},[203,163128,12525],{"class":213},[203,163130,150994],{"class":318},[203,163132,12525],{"class":213},[203,163134,159789],{"class":318},[203,163136,33304],{"class":213},[203,163138,163139,163142,163144,163146,163148,163150,163152,163154,163156,163158,163160],{"class":205,"line":124},[203,163140,163141],{"class":213},"numbers ",[203,163143,259],{"class":209},[203,163145,52284],{"class":213},[203,163147,431],{"class":262},[203,163149,12525],{"class":213},[203,163151,291],{"class":262},[203,163153,12525],{"class":213},[203,163155,285],{"class":262},[203,163157,12525],{"class":213},[203,163159,507],{"class":262},[203,163161,33304],{"class":213},[203,163163,163164,163167,163169,163171,163173,163175,163177,163179,163181],{"class":205,"line":1269},[203,163165,163166],{"class":213},"mixed ",[203,163168,259],{"class":209},[203,163170,52284],{"class":213},[203,163172,149946],{"class":318},[203,163174,12525],{"class":213},[203,163176,864],{"class":262},[203,163178,12525],{"class":213},[203,163180,31534],{"class":262},[203,163182,33304],{"class":213},[203,163184,163185,163188,163190],{"class":205,"line":1284},[203,163186,163187],{"class":213},"empty ",[203,163189,259],{"class":209},[203,163191,51896],{"class":213},[19,163193,163194],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163196,163198],{"id":163197},"_63-列表索引","6.3 列表索引",[19,163200,163201],{},"正向索引从 0 开始：",[194,163203,163205],{"className":30436,"code":163204,"language":30438,"meta":27,"style":27},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[200,163206,163207,163227,163231,163242,163252],{"__ignoreMap":27},[203,163208,163209,163211,163213,163215,163217,163219,163221,163223,163225],{"class":205,"line":206},[203,163210,160438],{"class":213},[203,163212,259],{"class":209},[203,163214,52284],{"class":213},[203,163216,149946],{"class":318},[203,163218,12525],{"class":213},[203,163220,150994],{"class":318},[203,163222,12525],{"class":213},[203,163224,159789],{"class":318},[203,163226,33304],{"class":213},[203,163228,163229],{"class":205,"line":124},[203,163230,2489],{"emptyLinePlaceholder":131},[203,163232,163233,163235,163238,163240],{"class":205,"line":1269},[203,163234,30473],{"class":262},[203,163236,163237],{"class":213},"(names[",[203,163239,405],{"class":262},[203,163241,4746],{"class":213},[203,163243,163244,163246,163248,163250],{"class":205,"line":1284},[203,163245,30473],{"class":262},[203,163247,163237],{"class":213},[203,163249,431],{"class":262},[203,163251,4746],{"class":213},[203,163253,163254,163256,163258,163260],{"class":205,"line":1290},[203,163255,30473],{"class":262},[203,163257,163237],{"class":213},[203,163259,291],{"class":262},[203,163261,4746],{"class":213},[19,163263,163264],{},"反向索引从 -1 开始：",[194,163266,163268],{"className":30436,"code":163267,"language":30438,"meta":27,"style":27},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[200,163269,163270,163286],{"__ignoreMap":27},[203,163271,163272,163274,163276,163278,163280,163283],{"class":205,"line":206},[203,163273,30473],{"class":262},[203,163275,163237],{"class":213},[203,163277,746],{"class":209},[203,163279,431],{"class":262},[203,163281,163282],{"class":213},"])  ",[203,163284,163285],{"class":272},"# 小刚\n",[203,163287,163288,163290,163292,163294,163296,163298],{"class":205,"line":124},[203,163289,30473],{"class":262},[203,163291,163237],{"class":213},[203,163293,746],{"class":209},[203,163295,291],{"class":262},[203,163297,163282],{"class":213},[203,163299,163300],{"class":272},"# 小红\n",[19,163302,163303],{},"索引越界会报错：",[194,163305,163307],{"className":30436,"code":163306,"language":30438,"meta":27,"style":27},"print(names[3])\n",[200,163308,163309],{"__ignoreMap":27},[203,163310,163311,163313,163315,163317],{"class":205,"line":206},[203,163312,30473],{"class":262},[203,163314,163237],{"class":213},[203,163316,285],{"class":262},[203,163318,4746],{"class":213},[14,163320,163322],{"id":163321},"_64-列表常用方法","6.4 列表常用方法",[194,163324,163326],{"className":30436,"code":163325,"language":30438,"meta":27,"style":27},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[200,163327,163328,163344,163348,163357,163371,163385,163389],{"__ignoreMap":27},[203,163329,163330,163332,163334,163336,163338,163340,163342],{"class":205,"line":206},[203,163331,160438],{"class":213},[203,163333,259],{"class":209},[203,163335,52284],{"class":213},[203,163337,149946],{"class":318},[203,163339,12525],{"class":213},[203,163341,150994],{"class":318},[203,163343,33304],{"class":213},[203,163345,163346],{"class":205,"line":124},[203,163347,2489],{"emptyLinePlaceholder":131},[203,163349,163350,163353,163355],{"class":205,"line":1269},[203,163351,163352],{"class":213},"names.append(",[203,163354,159789],{"class":318},[203,163356,220],{"class":213},[203,163358,163359,163362,163364,163366,163369],{"class":205,"line":1284},[203,163360,163361],{"class":213},"names.insert(",[203,163363,431],{"class":262},[203,163365,12525],{"class":213},[203,163367,163368],{"class":318},"\"小李\"",[203,163370,220],{"class":213},[203,163372,163373,163376,163378,163380,163383],{"class":205,"line":1290},[203,163374,163375],{"class":213},"names.extend([",[203,163377,8773],{"class":318},[203,163379,12525],{"class":213},[203,163381,163382],{"class":318},"\"小赵\"",[203,163384,4746],{"class":213},[203,163386,163387],{"class":205,"line":1304},[203,163388,2489],{"emptyLinePlaceholder":131},[203,163390,163391,163393],{"class":205,"line":1310},[203,163392,30473],{"class":262},[203,163394,163395],{"class":213},"(names)\n",[19,163397,163398],{},"删除元素：",[194,163400,163402],{"className":30436,"code":163401,"language":30438,"meta":27,"style":27},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[200,163403,163404,163413,163423,163437,163449],{"__ignoreMap":27},[203,163405,163406,163409,163411],{"class":205,"line":206},[203,163407,163408],{"class":213},"names.remove(",[203,163410,150994],{"class":318},[203,163412,220],{"class":213},[203,163414,163415,163418,163420],{"class":205,"line":124},[203,163416,163417],{"class":213},"last ",[203,163419,259],{"class":209},[203,163421,163422],{"class":213}," names.pop()\n",[203,163424,163425,163428,163430,163433,163435],{"class":205,"line":1269},[203,163426,163427],{"class":213},"first ",[203,163429,259],{"class":209},[203,163431,163432],{"class":213}," names.pop(",[203,163434,405],{"class":262},[203,163436,220],{"class":213},[203,163438,163439,163442,163445,163447],{"class":205,"line":1284},[203,163440,163441],{"class":209},"del",[203,163443,163444],{"class":213}," names[",[203,163446,405],{"class":262},[203,163448,33304],{"class":213},[203,163450,163451],{"class":205,"line":1290},[203,163452,163453],{"class":213},"names.clear()\n",[19,163455,163456],{},"查询和统计：",[194,163458,163460],{"className":30436,"code":163459,"language":30438,"meta":27,"style":27},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[200,163461,163462,163490,163494,163505,163516],{"__ignoreMap":27},[203,163463,163464,163466,163468,163470,163472,163474,163476,163478,163480,163482,163484,163486,163488],{"class":205,"line":206},[203,163465,163141],{"class":213},[203,163467,259],{"class":209},[203,163469,52284],{"class":213},[203,163471,431],{"class":262},[203,163473,12525],{"class":213},[203,163475,291],{"class":262},[203,163477,12525],{"class":213},[203,163479,285],{"class":262},[203,163481,12525],{"class":213},[203,163483,291],{"class":262},[203,163485,12525],{"class":213},[203,163487,507],{"class":262},[203,163489,33304],{"class":213},[203,163491,163492],{"class":205,"line":124},[203,163493,2489],{"emptyLinePlaceholder":131},[203,163495,163496,163498,163501,163503],{"class":205,"line":1269},[203,163497,30473],{"class":262},[203,163499,163500],{"class":213},"(numbers.index(",[203,163502,285],{"class":262},[203,163504,30555],{"class":213},[203,163506,163507,163509,163512,163514],{"class":205,"line":1284},[203,163508,30473],{"class":262},[203,163510,163511],{"class":213},"(numbers.count(",[203,163513,291],{"class":262},[203,163515,30555],{"class":213},[203,163517,163518,163520,163522,163524],{"class":205,"line":1290},[203,163519,30473],{"class":262},[203,163521,214],{"class":213},[203,163523,7448],{"class":262},[203,163525,163526],{"class":213},"(numbers))\n",[19,163528,163529],{},"排序：",[194,163531,163533],{"className":30436,"code":163532,"language":30438,"meta":27,"style":27},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[200,163534,163535,163559,163563,163568,163575,163579,163593,163599,163603,163608],{"__ignoreMap":27},[203,163536,163537,163539,163541,163543,163545,163547,163549,163551,163553,163555,163557],{"class":205,"line":206},[203,163538,163141],{"class":213},[203,163540,259],{"class":209},[203,163542,52284],{"class":213},[203,163544,285],{"class":262},[203,163546,12525],{"class":213},[203,163548,431],{"class":262},[203,163550,12525],{"class":213},[203,163552,533],{"class":262},[203,163554,12525],{"class":213},[203,163556,291],{"class":262},[203,163558,33304],{"class":213},[203,163560,163561],{"class":205,"line":124},[203,163562,2489],{"emptyLinePlaceholder":131},[203,163564,163565],{"class":205,"line":1269},[203,163566,163567],{"class":213},"numbers.sort()\n",[203,163569,163570,163572],{"class":205,"line":1284},[203,163571,30473],{"class":262},[203,163573,163574],{"class":213},"(numbers)\n",[203,163576,163577],{"class":205,"line":1290},[203,163578,2489],{"emptyLinePlaceholder":131},[203,163580,163581,163584,163587,163589,163591],{"class":205,"line":1304},[203,163582,163583],{"class":213},"numbers.sort(",[203,163585,163586],{"class":5306},"reverse",[203,163588,259],{"class":209},[203,163590,31534],{"class":262},[203,163592,220],{"class":213},[203,163594,163595,163597],{"class":205,"line":1310},[203,163596,30473],{"class":262},[203,163598,163574],{"class":213},[203,163600,163601],{"class":205,"line":1401},[203,163602,2489],{"emptyLinePlaceholder":131},[203,163604,163605],{"class":205,"line":1407},[203,163606,163607],{"class":213},"numbers.reverse()\n",[203,163609,163610,163612],{"class":205,"line":1419},[203,163611,30473],{"class":262},[203,163613,163574],{"class":213},[19,163615,163616,163619,163620,163623],{},[200,163617,163618],{},"sort()"," 会修改原列表，",[200,163621,163622],{},"sorted()"," 返回新列表。",[194,163625,163627],{"className":30436,"code":163626,"language":30438,"meta":27,"style":27},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[200,163628,163629,163653,163665,163669,163675],{"__ignoreMap":27},[203,163630,163631,163633,163635,163637,163639,163641,163643,163645,163647,163649,163651],{"class":205,"line":206},[203,163632,163141],{"class":213},[203,163634,259],{"class":209},[203,163636,52284],{"class":213},[203,163638,285],{"class":262},[203,163640,12525],{"class":213},[203,163642,431],{"class":262},[203,163644,12525],{"class":213},[203,163646,533],{"class":262},[203,163648,12525],{"class":213},[203,163650,291],{"class":262},[203,163652,33304],{"class":213},[203,163654,163655,163658,163660,163663],{"class":205,"line":124},[203,163656,163657],{"class":213},"new_numbers ",[203,163659,259],{"class":209},[203,163661,163662],{"class":262}," sorted",[203,163664,163574],{"class":213},[203,163666,163667],{"class":205,"line":1269},[203,163668,2489],{"emptyLinePlaceholder":131},[203,163670,163671,163673],{"class":205,"line":1284},[203,163672,30473],{"class":262},[203,163674,163574],{"class":213},[203,163676,163677,163679],{"class":205,"line":1290},[203,163678,30473],{"class":262},[203,163680,163681],{"class":213},"(new_numbers)\n",[14,163683,163685],{"id":163684},"_65-列表遍历","6.5 列表遍历",[194,163687,163689],{"className":30436,"code":163688,"language":30438,"meta":27,"style":27},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[200,163690,163691,163711,163715,163725],{"__ignoreMap":27},[203,163692,163693,163695,163697,163699,163701,163703,163705,163707,163709],{"class":205,"line":206},[203,163694,160438],{"class":213},[203,163696,259],{"class":209},[203,163698,52284],{"class":213},[203,163700,149946],{"class":318},[203,163702,12525],{"class":213},[203,163704,150994],{"class":318},[203,163706,12525],{"class":213},[203,163708,159789],{"class":318},[203,163710,33304],{"class":213},[203,163712,163713],{"class":205,"line":124},[203,163714,2489],{"emptyLinePlaceholder":131},[203,163716,163717,163719,163721,163723],{"class":205,"line":1269},[203,163718,3114],{"class":209},[203,163720,160474],{"class":213},[203,163722,26101],{"class":209},[203,163724,160479],{"class":213},[203,163726,163727,163729],{"class":205,"line":1284},[203,163728,31357],{"class":262},[203,163730,150718],{"class":213},[19,163732,163733],{},"需要索引时：",[194,163735,163737],{"className":30436,"code":163736,"language":30438,"meta":27,"style":27},"for index, name in enumerate(names):\n    print(index, name)\n",[200,163738,163739,163753],{"__ignoreMap":27},[203,163740,163741,163743,163746,163748,163750],{"class":205,"line":206},[203,163742,3114],{"class":209},[203,163744,163745],{"class":213}," index, name ",[203,163747,26101],{"class":209},[203,163749,31664],{"class":262},[203,163751,163752],{"class":213},"(names):\n",[203,163754,163755,163757],{"class":205,"line":124},[203,163756,31357],{"class":262},[203,163758,163759],{"class":213},"(index, name)\n",[19,163761,163762],{},"统计总分：",[194,163764,163766],{"className":30436,"code":163765,"language":30438,"meta":27,"style":27},"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",[200,163767,163768,163793,163801,163805,163816,163824,163828,163845],{"__ignoreMap":27},[203,163769,163770,163773,163775,163777,163779,163781,163783,163785,163787,163789,163791],{"class":205,"line":206},[203,163771,163772],{"class":213},"scores ",[203,163774,259],{"class":209},[203,163776,52284],{"class":213},[203,163778,1076],{"class":262},[203,163780,12525],{"class":213},[203,163782,950],{"class":262},[203,163784,12525],{"class":213},[203,163786,468],{"class":262},[203,163788,12525],{"class":213},[203,163790,775],{"class":262},[203,163792,33304],{"class":213},[203,163794,163795,163797,163799],{"class":205,"line":124},[203,163796,157318],{"class":213},[203,163798,259],{"class":209},[203,163800,47391],{"class":262},[203,163802,163803],{"class":205,"line":1269},[203,163804,2489],{"emptyLinePlaceholder":131},[203,163806,163807,163809,163811,163813],{"class":205,"line":1284},[203,163808,3114],{"class":209},[203,163810,157841],{"class":213},[203,163812,26101],{"class":209},[203,163814,163815],{"class":213}," scores:\n",[203,163817,163818,163820,163822],{"class":205,"line":1290},[203,163819,159365],{"class":213},[203,163821,9567],{"class":209},[203,163823,1668],{"class":213},[203,163825,163826],{"class":205,"line":1304},[203,163827,2489],{"emptyLinePlaceholder":131},[203,163829,163830,163833,163835,163838,163840,163842],{"class":205,"line":1310},[203,163831,163832],{"class":213},"avg ",[203,163834,259],{"class":209},[203,163836,163837],{"class":213}," total ",[203,163839,798],{"class":209},[203,163841,7421],{"class":262},[203,163843,163844],{"class":213},"(scores)\n",[203,163846,163847,163849,163851,163853,163856,163858,163861,163863,163865,163867],{"class":205,"line":1401},[203,163848,30473],{"class":262},[203,163850,214],{"class":213},[203,163852,266],{"class":209},[203,163854,163855],{"class":318},"\"平均分:",[203,163857,1110],{"class":262},[203,163859,163860],{"class":213},"avg",[203,163862,157217],{"class":209},[203,163864,1160],{"class":262},[203,163866,465],{"class":318},[203,163868,220],{"class":213},[14,163870,163872],{"id":163871},"_66-元组tuple","6.6 元组tuple",[19,163874,163875],{},"元组和列表类似，但不可修改。",[194,163877,163879],{"className":30436,"code":163878,"language":30438,"meta":27,"style":27},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[200,163880,163881,163898],{"__ignoreMap":27},[203,163882,163883,163886,163888,163890,163892,163894,163896],{"class":205,"line":206},[203,163884,163885],{"class":213},"point ",[203,163887,259],{"class":209},[203,163889,1747],{"class":213},[203,163891,660],{"class":262},[203,163893,12525],{"class":213},[203,163895,914],{"class":262},[203,163897,220],{"class":213},[203,163899,163900,163902,163904,163906,163908,163910,163912,163914,163916],{"class":205,"line":124},[203,163901,116372],{"class":213},[203,163903,259],{"class":209},[203,163905,1747],{"class":213},[203,163907,149946],{"class":318},[203,163909,12525],{"class":213},[203,163911,864],{"class":262},[203,163913,12525],{"class":213},[203,163915,69327],{"class":318},[203,163917,220],{"class":213},[19,163919,163920],{},"单元素元组必须加逗号：",[194,163922,163924],{"className":30436,"code":163923,"language":30438,"meta":27,"style":27},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[200,163925,163926,163940,163953,163957,163971],{"__ignoreMap":27},[203,163927,163928,163931,163933,163935,163937],{"class":205,"line":206},[203,163929,163930],{"class":213},"t1 ",[203,163932,259],{"class":209},[203,163934,1747],{"class":213},[203,163936,660],{"class":262},[203,163938,163939],{"class":213},",)\n",[203,163941,163942,163945,163947,163949,163951],{"class":205,"line":124},[203,163943,163944],{"class":213},"t2 ",[203,163946,259],{"class":209},[203,163948,1747],{"class":213},[203,163950,660],{"class":262},[203,163952,220],{"class":213},[203,163954,163955],{"class":205,"line":1269},[203,163956,2489],{"emptyLinePlaceholder":131},[203,163958,163959,163961,163963,163965,163968],{"class":205,"line":1284},[203,163960,30473],{"class":262},[203,163962,214],{"class":213},[203,163964,103165],{"class":262},[203,163966,163967],{"class":213},"(t1))  ",[203,163969,163970],{"class":272},"# tuple\n",[203,163972,163973,163975,163977,163979,163982],{"class":205,"line":1290},[203,163974,30473],{"class":262},[203,163976,214],{"class":213},[203,163978,103165],{"class":262},[203,163980,163981],{"class":213},"(t2))  ",[203,163983,163984],{"class":272},"# int\n",[19,163986,163987],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,163989,163991],{"id":163990},"_67-字符串str","6.7 字符串str",[19,163993,163994],{},"字符串也是序列，可以索引、切片和遍历。",[194,163996,163998],{"className":30436,"code":163997,"language":30438,"meta":27,"style":27},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[200,163999,164000,164008,164012,164023,164035,164039,164050],{"__ignoreMap":27},[203,164001,164002,164004,164006],{"class":205,"line":206},[203,164003,156502],{"class":213},[203,164005,259],{"class":209},[203,164007,159739],{"class":318},[203,164009,164010],{"class":205,"line":124},[203,164011,2489],{"emptyLinePlaceholder":131},[203,164013,164014,164016,164019,164021],{"class":205,"line":1269},[203,164015,30473],{"class":262},[203,164017,164018],{"class":213},"(text[",[203,164020,405],{"class":262},[203,164022,4746],{"class":213},[203,164024,164025,164027,164029,164031,164033],{"class":205,"line":1284},[203,164026,30473],{"class":262},[203,164028,164018],{"class":213},[203,164030,746],{"class":209},[203,164032,431],{"class":262},[203,164034,4746],{"class":213},[203,164036,164037],{"class":205,"line":1290},[203,164038,2489],{"emptyLinePlaceholder":131},[203,164040,164041,164043,164045,164047],{"class":205,"line":1304},[203,164042,3114],{"class":209},[203,164044,159750],{"class":213},[203,164046,26101],{"class":209},[203,164048,164049],{"class":213}," text:\n",[203,164051,164052,164054],{"class":205,"line":1310},[203,164053,31357],{"class":262},[203,164055,159761],{"class":213},[19,164057,164058],{},"字符串不可变：",[194,164060,164062],{"className":30436,"code":164061,"language":30438,"meta":27,"style":27},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[200,164063,164064,164072],{"__ignoreMap":27},[203,164065,164066,164068,164070],{"class":205,"line":206},[203,164067,156502],{"class":213},[203,164069,259],{"class":209},[203,164071,159739],{"class":318},[203,164073,164074,164077,164079,164081,164083,164086],{"class":205,"line":124},[203,164075,164076],{"class":213},"text[",[203,164078,405],{"class":262},[203,164080,4532],{"class":213},[203,164082,259],{"class":209},[203,164084,164085],{"class":318}," \"P\"",[203,164087,164088],{"class":272},"  # 报错\n",[19,164090,164091],{},"如果要得到新字符串：",[194,164093,164095],{"className":30436,"code":164094,"language":30438,"meta":27,"style":27},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[200,164096,164097,164105,164123],{"__ignoreMap":27},[203,164098,164099,164101,164103],{"class":205,"line":206},[203,164100,156502],{"class":213},[203,164102,259],{"class":209},[203,164104,159739],{"class":318},[203,164106,164107,164109,164111,164113,164115,164118,164120],{"class":205,"line":124},[203,164108,156502],{"class":213},[203,164110,259],{"class":209},[203,164112,164085],{"class":318},[203,164114,45624],{"class":209},[203,164116,164117],{"class":213}," text[",[203,164119,431],{"class":262},[203,164121,164122],{"class":213},":]\n",[203,164124,164125,164127],{"class":205,"line":1269},[203,164126,30473],{"class":262},[203,164128,164129],{"class":213},"(text)\n",[14,164131,164133],{"id":164132},"_68-切片","6.8 切片",[19,164135,164136],{},"切片用于从序列中取一部分。",[194,164138,164140],{"className":30436,"code":164139,"language":30438,"meta":27,"style":27},"序列[开始:结束:步长]\n",[200,164141,164142],{"__ignoreMap":27},[203,164143,164144],{"class":205,"line":206},[203,164145,164139],{"class":213},[19,164147,164148],{},"结束位置不包含。",[194,164150,164152],{"className":30436,"code":164151,"language":30438,"meta":27,"style":27},"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",[200,164153,164154,164191,164195,164214,164229,164243,164257],{"__ignoreMap":27},[203,164155,164156,164159,164161,164163,164165,164167,164169,164171,164173,164175,164177,164179,164181,164183,164185,164187,164189],{"class":205,"line":206},[203,164157,164158],{"class":213},"nums ",[203,164160,259],{"class":209},[203,164162,52284],{"class":213},[203,164164,405],{"class":262},[203,164166,12525],{"class":213},[203,164168,431],{"class":262},[203,164170,12525],{"class":213},[203,164172,291],{"class":262},[203,164174,12525],{"class":213},[203,164176,285],{"class":262},[203,164178,12525],{"class":213},[203,164180,507],{"class":262},[203,164182,12525],{"class":213},[203,164184,533],{"class":262},[203,164186,12525],{"class":213},[203,164188,558],{"class":262},[203,164190,33304],{"class":213},[203,164192,164193],{"class":205,"line":124},[203,164194,2489],{"emptyLinePlaceholder":131},[203,164196,164197,164199,164202,164204,164206,164208,164211],{"class":205,"line":1269},[203,164198,30473],{"class":262},[203,164200,164201],{"class":213},"(nums[",[203,164203,431],{"class":262},[203,164205,1073],{"class":213},[203,164207,507],{"class":262},[203,164209,164210],{"class":213},"])    ",[203,164212,164213],{"class":272},"# [1, 2, 3]\n",[203,164215,164216,164218,164221,164223,164226],{"class":205,"line":1284},[203,164217,30473],{"class":262},[203,164219,164220],{"class":213},"(nums[:",[203,164222,285],{"class":262},[203,164224,164225],{"class":213},"])     ",[203,164227,164228],{"class":272},"# [0, 1, 2]\n",[203,164230,164231,164233,164235,164237,164240],{"class":205,"line":1290},[203,164232,30473],{"class":262},[203,164234,164201],{"class":213},[203,164236,285],{"class":262},[203,164238,164239],{"class":213},":])     ",[203,164241,164242],{"class":272},"# [3, 4, 5, 6]\n",[203,164244,164245,164247,164250,164252,164254],{"class":205,"line":1304},[203,164246,30473],{"class":262},[203,164248,164249],{"class":213},"(nums[::",[203,164251,291],{"class":262},[203,164253,164210],{"class":213},[203,164255,164256],{"class":272},"# [0, 2, 4, 6]\n",[203,164258,164259,164261,164263,164265,164267,164270],{"class":205,"line":1310},[203,164260,30473],{"class":262},[203,164262,164249],{"class":213},[203,164264,746],{"class":209},[203,164266,431],{"class":262},[203,164268,164269],{"class":213},"])   ",[203,164271,164272],{"class":272},"# 反转\n",[19,164274,164275],{},"字符串切片：",[194,164277,164279],{"className":30436,"code":164278,"language":30438,"meta":27,"style":27},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[200,164280,164281,164290,164304],{"__ignoreMap":27},[203,164282,164283,164285,164287],{"class":205,"line":206},[203,164284,156502],{"class":213},[203,164286,259],{"class":209},[203,164288,164289],{"class":318}," \"abcdef\"\n",[203,164291,164292,164294,164296,164298,164300,164302],{"class":205,"line":124},[203,164293,30473],{"class":262},[203,164295,164018],{"class":213},[203,164297,431],{"class":262},[203,164299,1073],{"class":213},[203,164301,507],{"class":262},[203,164303,4746],{"class":213},[203,164305,164306,164308,164311,164313,164315],{"class":205,"line":1269},[203,164307,30473],{"class":262},[203,164309,164310],{"class":213},"(text[::",[203,164312,746],{"class":209},[203,164314,431],{"class":262},[203,164316,4746],{"class":213},[14,164318,164320],{"id":164319},"_69-集合set","6.9 集合set",[19,164322,164323],{},"集合特点：",[157,164325,164326,164329,164332],{},[160,164327,164328],{},"无序。",[160,164330,164331],{},"元素不重复。",[160,164333,164334],{},"可以做交集、并集、差集。",[194,164336,164338],{"className":30436,"code":164337,"language":30438,"meta":27,"style":27},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[200,164339,164340,164368],{"__ignoreMap":27},[203,164341,164342,164344,164346,164348,164350,164352,164354,164356,164358,164360,164362,164364,164366],{"class":205,"line":206},[203,164343,164158],{"class":213},[203,164345,259],{"class":209},[203,164347,4537],{"class":213},[203,164349,431],{"class":262},[203,164351,12525],{"class":213},[203,164353,291],{"class":262},[203,164355,12525],{"class":213},[203,164357,285],{"class":262},[203,164359,12525],{"class":213},[203,164361,285],{"class":262},[203,164363,12525],{"class":213},[203,164365,507],{"class":262},[203,164367,1654],{"class":213},[203,164369,164370,164372],{"class":205,"line":124},[203,164371,30473],{"class":262},[203,164373,164374],{"class":213},"(nums)\n",[19,164376,164377],{},"创建空集合：",[194,164379,164381],{"className":30436,"code":164380,"language":30438,"meta":27,"style":27},"s = set()\n",[200,164382,164383],{"__ignoreMap":27},[203,164384,164385,164387,164389,164391],{"class":205,"line":206},[203,164386,10669],{"class":213},[203,164388,259],{"class":209},[203,164390,119780],{"class":262},[203,164392,2065],{"class":213},[19,164394,9115,164395,164397],{},[200,164396,32517],{}," 是空字典，不是空集合。",[19,164399,164400],{},"集合常用操作：",[194,164402,164404],{"className":30436,"code":164403,"language":30438,"meta":27,"style":27},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[200,164405,164406,164426,164430,164439,164448,164457],{"__ignoreMap":27},[203,164407,164408,164410,164412,164414,164416,164418,164420,164422,164424],{"class":205,"line":206},[203,164409,10669],{"class":213},[203,164411,259],{"class":209},[203,164413,4537],{"class":213},[203,164415,431],{"class":262},[203,164417,12525],{"class":213},[203,164419,291],{"class":262},[203,164421,12525],{"class":213},[203,164423,285],{"class":262},[203,164425,1654],{"class":213},[203,164427,164428],{"class":205,"line":124},[203,164429,2489],{"emptyLinePlaceholder":131},[203,164431,164432,164435,164437],{"class":205,"line":1269},[203,164433,164434],{"class":213},"s.add(",[203,164436,507],{"class":262},[203,164438,220],{"class":213},[203,164440,164441,164444,164446],{"class":205,"line":1284},[203,164442,164443],{"class":213},"s.remove(",[203,164445,291],{"class":262},[203,164447,220],{"class":213},[203,164449,164450,164453,164455],{"class":205,"line":1290},[203,164451,164452],{"class":213},"s.discard(",[203,164454,660],{"class":262},[203,164456,220],{"class":213},[203,164458,164459,164461,164463,164465],{"class":205,"line":1304},[203,164460,30473],{"class":262},[203,164462,214],{"class":213},[203,164464,7448],{"class":262},[203,164466,164467],{"class":213},"(s))\n",[19,164469,164470],{},"交并差：",[194,164472,164474],{"className":30436,"code":164473,"language":30438,"meta":27,"style":27},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[200,164475,164476,164496,164516,164520,164535,164548],{"__ignoreMap":27},[203,164477,164478,164480,164482,164484,164486,164488,164490,164492,164494],{"class":205,"line":206},[203,164479,11009],{"class":213},[203,164481,259],{"class":209},[203,164483,4537],{"class":213},[203,164485,431],{"class":262},[203,164487,12525],{"class":213},[203,164489,291],{"class":262},[203,164491,12525],{"class":213},[203,164493,285],{"class":262},[203,164495,1654],{"class":213},[203,164497,164498,164500,164502,164504,164506,164508,164510,164512,164514],{"class":205,"line":124},[203,164499,11035],{"class":213},[203,164501,259],{"class":209},[203,164503,4537],{"class":213},[203,164505,285],{"class":262},[203,164507,12525],{"class":213},[203,164509,507],{"class":262},[203,164511,12525],{"class":213},[203,164513,533],{"class":262},[203,164515,1654],{"class":213},[203,164517,164518],{"class":205,"line":1269},[203,164519,2489],{"emptyLinePlaceholder":131},[203,164521,164522,164524,164527,164529,164532],{"class":205,"line":1284},[203,164523,30473],{"class":262},[203,164525,164526],{"class":213},"(a ",[203,164528,567],{"class":209},[203,164530,164531],{"class":213}," b)  ",[203,164533,164534],{"class":272},"# 交集\n",[203,164536,164537,164539,164541,164543,164545],{"class":205,"line":1290},[203,164538,30473],{"class":262},[203,164540,164526],{"class":213},[203,164542,1135],{"class":209},[203,164544,164531],{"class":213},[203,164546,164547],{"class":272},"# 并集\n",[203,164549,164550,164552,164554,164556,164558],{"class":205,"line":1304},[203,164551,30473],{"class":262},[203,164553,164526],{"class":213},[203,164555,746],{"class":209},[203,164557,164531],{"class":213},[203,164559,164560],{"class":272},"# 差集\n",[14,164562,164564],{"id":164563},"_610-字典dict","6.10 字典dict",[19,164566,164567],{},"字典通过 key-value 保存数据。",[194,164569,164571],{"className":30436,"code":164570,"language":30438,"meta":27,"style":27},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[200,164572,164573,164581,164591,164602,164612],{"__ignoreMap":27},[203,164574,164575,164577,164579],{"class":205,"line":206},[203,164576,149539],{"class":213},[203,164578,259],{"class":209},[203,164580,15662],{"class":213},[203,164582,164583,164585,164587,164589],{"class":205,"line":124},[203,164584,147078],{"class":318},[203,164586,51495],{"class":213},[203,164588,149946],{"class":318},[203,164590,31524],{"class":213},[203,164592,164593,164596,164598,164600],{"class":205,"line":1269},[203,164594,164595],{"class":318},"    \"age\"",[203,164597,51495],{"class":213},[203,164599,864],{"class":262},[203,164601,31524],{"class":213},[203,164603,164604,164607,164609],{"class":205,"line":1284},[203,164605,164606],{"class":318},"    \"score\"",[203,164608,51495],{"class":213},[203,164610,164611],{"class":262},"95\n",[203,164613,164614],{"class":205,"line":1290},[203,164615,1654],{"class":213},[19,164617,164618],{},"获取值：",[194,164620,164622],{"className":30436,"code":164621,"language":30438,"meta":27,"style":27},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[200,164623,164624,164635],{"__ignoreMap":27},[203,164625,164626,164628,164631,164633],{"class":205,"line":206},[203,164627,30473],{"class":262},[203,164629,164630],{"class":213},"(student[",[203,164632,62737],{"class":318},[203,164634,4746],{"class":213},[203,164636,164637,164639,164642,164644],{"class":205,"line":124},[203,164638,30473],{"class":262},[203,164640,164641],{"class":213},"(student.get(",[203,164643,62737],{"class":318},[203,164645,30555],{"class":213},[19,164647,15478],{},[194,164649,164651],{"className":30436,"code":164650,"language":30438,"meta":27,"style":27},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[200,164652,164653,164666],{"__ignoreMap":27},[203,164654,164655,164657,164660,164663],{"class":205,"line":206},[203,164656,152917],{"class":213},[203,164658,164659],{"class":318},"\"address\"",[203,164661,164662],{"class":213},"]     ",[203,164664,164665],{"class":272},"# key不存在会报错\n",[203,164667,164668,164671,164673,164675],{"class":205,"line":124},[203,164669,164670],{"class":213},"student.get(",[203,164672,164659],{"class":318},[203,164674,13804],{"class":213},[203,164676,164677],{"class":272},"# key不存在返回None\n",[19,164679,164680],{},"设置默认值：",[194,164682,164684],{"className":30436,"code":164683,"language":30438,"meta":27,"style":27},"print(student.get(\"address\", \"未知\"))\n",[200,164685,164686],{"__ignoreMap":27},[203,164687,164688,164690,164692,164694,164696,164699],{"class":205,"line":206},[203,164689,30473],{"class":262},[203,164691,164641],{"class":213},[203,164693,164659],{"class":318},[203,164695,12525],{"class":213},[203,164697,164698],{"class":318},"\"未知\"",[203,164700,30555],{"class":213},[19,164702,164703],{},"新增和修改：",[194,164705,164707],{"className":30436,"code":164706,"language":30438,"meta":27,"style":27},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[200,164708,164709,164722],{"__ignoreMap":27},[203,164710,164711,164713,164715,164717,164719],{"class":205,"line":206},[203,164712,152917],{"class":213},[203,164714,69182],{"class":318},[203,164716,4532],{"class":213},[203,164718,259],{"class":209},[203,164720,164721],{"class":262}," 19\n",[203,164723,164724,164726,164728,164730,164732],{"class":205,"line":124},[203,164725,152917],{"class":213},[203,164727,164659],{"class":318},[203,164729,4532],{"class":213},[203,164731,259],{"class":209},[203,164733,164734],{"class":318}," \"北京\"\n",[19,164736,164737],{},"删除：",[194,164739,164741],{"className":30436,"code":164740,"language":30438,"meta":27,"style":27},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[200,164742,164743,164756,164766],{"__ignoreMap":27},[203,164744,164745,164747,164749,164752,164754],{"class":205,"line":206},[203,164746,155416],{"class":213},[203,164748,259],{"class":209},[203,164750,164751],{"class":213}," student.pop(",[203,164753,151530],{"class":318},[203,164755,220],{"class":213},[203,164757,164758,164760,164762,164764],{"class":205,"line":124},[203,164759,163441],{"class":209},[203,164761,152207],{"class":213},[203,164763,69182],{"class":318},[203,164765,33304],{"class":213},[203,164767,164768],{"class":205,"line":1269},[203,164769,164770],{"class":213},"student.clear()\n",[14,164772,164774],{"id":164773},"_611-字典遍历","6.11 字典遍历",[19,164776,164777],{},"遍历 key：",[194,164779,164781],{"className":30436,"code":164780,"language":30438,"meta":27,"style":27},"for key in student:\n    print(key, student[key])\n",[200,164782,164783,164795],{"__ignoreMap":27},[203,164784,164785,164787,164790,164792],{"class":205,"line":206},[203,164786,3114],{"class":209},[203,164788,164789],{"class":213}," key ",[203,164791,26101],{"class":209},[203,164793,164794],{"class":213}," student:\n",[203,164796,164797,164799],{"class":205,"line":124},[203,164798,31357],{"class":262},[203,164800,164801],{"class":213},"(key, student[key])\n",[19,164803,164804],{},"遍历 value：",[194,164806,164808],{"className":30436,"code":164807,"language":30438,"meta":27,"style":27},"for value in student.values():\n    print(value)\n",[200,164809,164810,164822],{"__ignoreMap":27},[203,164811,164812,164814,164817,164819],{"class":205,"line":206},[203,164813,3114],{"class":209},[203,164815,164816],{"class":213}," value ",[203,164818,26101],{"class":209},[203,164820,164821],{"class":213}," student.values():\n",[203,164823,164824,164826],{"class":205,"line":124},[203,164825,31357],{"class":262},[203,164827,164828],{"class":213},"(value)\n",[19,164830,164831],{},"遍历 key 和 value：",[194,164833,164835],{"className":30436,"code":164834,"language":30438,"meta":27,"style":27},"for key, value in student.items():\n    print(key, value)\n",[200,164836,164837,164849],{"__ignoreMap":27},[203,164838,164839,164841,164844,164846],{"class":205,"line":206},[203,164840,3114],{"class":209},[203,164842,164843],{"class":213}," key, value ",[203,164845,26101],{"class":209},[203,164847,164848],{"class":213}," student.items():\n",[203,164850,164851,164853],{"class":205,"line":124},[203,164852,31357],{"class":262},[203,164854,164855],{"class":213},"(key, value)\n",[14,164857,164859],{"id":164858},"_612-嵌套容器","6.12 嵌套容器",[19,164861,164862],{},"列表中保存字典，是项目中最常见的结构之一。",[194,164864,164866],{"className":30436,"code":164865,"language":30438,"meta":27,"style":27},"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",[200,164867,164868,164876,164904,164932,164960,164964,164968,164978],{"__ignoreMap":27},[203,164869,164870,164872,164874],{"class":205,"line":206},[203,164871,159774],{"class":213},[203,164873,259],{"class":209},[203,164875,55505],{"class":213},[203,164877,164878,164880,164882,164884,164886,164888,164890,164892,164894,164896,164898,164900,164902],{"class":205,"line":124},[203,164879,148443],{"class":213},[203,164881,62737],{"class":318},[203,164883,51495],{"class":213},[203,164885,149946],{"class":318},[203,164887,12525],{"class":213},[203,164889,69182],{"class":318},[203,164891,51495],{"class":213},[203,164893,864],{"class":262},[203,164895,12525],{"class":213},[203,164897,151530],{"class":318},[203,164899,51495],{"class":213},[203,164901,1203],{"class":262},[203,164903,5019],{"class":213},[203,164905,164906,164908,164910,164912,164914,164916,164918,164920,164922,164924,164926,164928,164930],{"class":205,"line":1269},[203,164907,148443],{"class":213},[203,164909,62737],{"class":318},[203,164911,51495],{"class":213},[203,164913,150994],{"class":318},[203,164915,12525],{"class":213},[203,164917,69182],{"class":318},[203,164919,51495],{"class":213},[203,164921,839],{"class":262},[203,164923,12525],{"class":213},[203,164925,151530],{"class":318},[203,164927,51495],{"class":213},[203,164929,1025],{"class":262},[203,164931,5019],{"class":213},[203,164933,164934,164936,164938,164940,164942,164944,164946,164948,164950,164952,164954,164956,164958],{"class":205,"line":1284},[203,164935,148443],{"class":213},[203,164937,62737],{"class":318},[203,164939,51495],{"class":213},[203,164941,159789],{"class":318},[203,164943,12525],{"class":213},[203,164945,69182],{"class":318},[203,164947,51495],{"class":213},[203,164949,889],{"class":262},[203,164951,12525],{"class":213},[203,164953,151530],{"class":318},[203,164955,51495],{"class":213},[203,164957,620],{"class":262},[203,164959,5019],{"class":213},[203,164961,164962],{"class":205,"line":1290},[203,164963,33304],{"class":213},[203,164965,164966],{"class":205,"line":1304},[203,164967,2489],{"emptyLinePlaceholder":131},[203,164969,164970,164972,164974,164976],{"class":205,"line":1310},[203,164971,3114],{"class":209},[203,164973,152195],{"class":213},[203,164975,26101],{"class":209},[203,164977,152200],{"class":213},[203,164979,164980,164982,164984,164986,164989,164991],{"class":205,"line":1401},[203,164981,31357],{"class":262},[203,164983,164630],{"class":213},[203,164985,62737],{"class":318},[203,164987,164988],{"class":213},"], student[",[203,164990,151530],{"class":318},[203,164992,4746],{"class":213},[19,164994,164995],{},"统计平均分：",[194,164997,164999],{"className":30436,"code":164998,"language":30438,"meta":27,"style":27},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[200,165000,165001,165009,165013,165023,165035,165039,165054],{"__ignoreMap":27},[203,165002,165003,165005,165007],{"class":205,"line":206},[203,165004,157318],{"class":213},[203,165006,259],{"class":209},[203,165008,47391],{"class":262},[203,165010,165011],{"class":205,"line":124},[203,165012,2489],{"emptyLinePlaceholder":131},[203,165014,165015,165017,165019,165021],{"class":205,"line":1269},[203,165016,3114],{"class":209},[203,165018,152195],{"class":213},[203,165020,26101],{"class":209},[203,165022,152200],{"class":213},[203,165024,165025,165027,165029,165031,165033],{"class":205,"line":1284},[203,165026,159365],{"class":213},[203,165028,9567],{"class":209},[203,165030,152207],{"class":213},[203,165032,151530],{"class":318},[203,165034,33304],{"class":213},[203,165036,165037],{"class":205,"line":1290},[203,165038,2489],{"emptyLinePlaceholder":131},[203,165040,165041,165043,165045,165047,165049,165051],{"class":205,"line":1304},[203,165042,163832],{"class":213},[203,165044,259],{"class":209},[203,165046,163837],{"class":213},[203,165048,798],{"class":209},[203,165050,7421],{"class":262},[203,165052,165053],{"class":213},"(students)\n",[203,165055,165056,165058,165060,165062,165064,165066,165068,165070,165072,165074],{"class":205,"line":1310},[203,165057,30473],{"class":262},[203,165059,214],{"class":213},[203,165061,266],{"class":209},[203,165063,163855],{"class":318},[203,165065,1110],{"class":262},[203,165067,163860],{"class":213},[203,165069,157217],{"class":209},[203,165071,1160],{"class":262},[203,165073,465],{"class":318},[203,165075,220],{"class":213},[19,165077,165078],{},"查找学生：",[194,165080,165082],{"className":30436,"code":165081,"language":30438,"meta":27,"style":27},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[200,165083,165084,165099,165103,165113,165127,165133,165137,165143],{"__ignoreMap":27},[203,165085,165086,165088,165090,165092,165094,165097],{"class":205,"line":206},[203,165087,111636],{"class":213},[203,165089,259],{"class":209},[203,165091,60663],{"class":262},[203,165093,214],{"class":213},[203,165095,165096],{"class":318},"\"请输入学生姓名:\"",[203,165098,220],{"class":213},[203,165100,165101],{"class":205,"line":124},[203,165102,2489],{"emptyLinePlaceholder":131},[203,165104,165105,165107,165109,165111],{"class":205,"line":1269},[203,165106,3114],{"class":209},[203,165108,152195],{"class":213},[203,165110,26101],{"class":209},[203,165112,152200],{"class":213},[203,165114,165115,165117,165119,165121,165123,165125],{"class":205,"line":1284},[203,165116,3190],{"class":209},[203,165118,152207],{"class":213},[203,165120,62737],{"class":318},[203,165122,4532],{"class":213},[203,165124,3038],{"class":209},[203,165126,160490],{"class":213},[203,165128,165129,165131],{"class":205,"line":1290},[203,165130,32509],{"class":262},[203,165132,150100],{"class":213},[203,165134,165135],{"class":205,"line":1304},[203,165136,31685],{"class":209},[203,165138,165139,165141],{"class":205,"line":1310},[203,165140,1790],{"class":209},[203,165142,3828],{"class":213},[203,165144,165145,165147,165149,165152],{"class":205,"line":1401},[203,165146,31357],{"class":262},[203,165148,214],{"class":213},[203,165150,165151],{"class":318},"\"没有找到\"",[203,165153,220],{"class":213},[14,165155,165157],{"id":165156},"_613-容器通用操作","6.13 容器通用操作",[19,165159,165160],{},"长度：",[194,165162,165164],{"className":30436,"code":165163,"language":30438,"meta":27,"style":27},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[200,165165,165166,165185,165195],{"__ignoreMap":27},[203,165167,165168,165170,165173,165175,165177,165179,165181,165183],{"class":205,"line":206},[203,165169,7448],{"class":262},[203,165171,165172],{"class":213},"([",[203,165174,431],{"class":262},[203,165176,12525],{"class":213},[203,165178,291],{"class":262},[203,165180,12525],{"class":213},[203,165182,285],{"class":262},[203,165184,4746],{"class":213},[203,165186,165187,165189,165191,165193],{"class":205,"line":124},[203,165188,7448],{"class":262},[203,165190,214],{"class":213},[203,165192,155938],{"class":318},[203,165194,220],{"class":213},[203,165196,165197,165199,165202,165204,165206,165208],{"class":205,"line":1269},[203,165198,7448],{"class":262},[203,165200,165201],{"class":213},"({",[203,165203,62737],{"class":318},[203,165205,51495],{"class":213},[203,165207,149946],{"class":318},[203,165209,165210],{"class":213},"})\n",[19,165212,165213],{},"最大最小：",[194,165215,165217],{"className":30436,"code":165216,"language":30438,"meta":27,"style":27},"max([1, 2, 3])\nmin([1, 2, 3])\n",[200,165218,165219,165237],{"__ignoreMap":27},[203,165220,165221,165223,165225,165227,165229,165231,165233,165235],{"class":205,"line":206},[203,165222,6105],{"class":262},[203,165224,165172],{"class":213},[203,165226,431],{"class":262},[203,165228,12525],{"class":213},[203,165230,291],{"class":262},[203,165232,12525],{"class":213},[203,165234,285],{"class":262},[203,165236,4746],{"class":213},[203,165238,165239,165242,165244,165246,165248,165250,165252,165254],{"class":205,"line":124},[203,165240,165241],{"class":262},"min",[203,165243,165172],{"class":213},[203,165245,431],{"class":262},[203,165247,12525],{"class":213},[203,165249,291],{"class":262},[203,165251,12525],{"class":213},[203,165253,285],{"class":262},[203,165255,4746],{"class":213},[19,165257,165258],{},"求和：",[194,165260,165262],{"className":30436,"code":165261,"language":30438,"meta":27,"style":27},"sum([1, 2, 3])\n",[200,165263,165264],{"__ignoreMap":27},[203,165265,165266,165269,165271,165273,165275,165277,165279,165281],{"class":205,"line":206},[203,165267,165268],{"class":262},"sum",[203,165270,165172],{"class":213},[203,165272,431],{"class":262},[203,165274,12525],{"class":213},[203,165276,291],{"class":262},[203,165278,12525],{"class":213},[203,165280,285],{"class":262},[203,165282,4746],{"class":213},[19,165284,163529],{},[194,165286,165288],{"className":30436,"code":165287,"language":30438,"meta":27,"style":27},"sorted([3, 1, 2])\n",[200,165289,165290],{"__ignoreMap":27},[203,165291,165292,165295,165297,165299,165301,165303,165305,165307],{"class":205,"line":206},[203,165293,165294],{"class":262},"sorted",[203,165296,165172],{"class":213},[203,165298,285],{"class":262},[203,165300,12525],{"class":213},[203,165302,431],{"class":262},[203,165304,12525],{"class":213},[203,165306,291],{"class":262},[203,165308,4746],{"class":213},[19,165310,165311],{},"类型转换：",[194,165313,165315],{"className":30436,"code":165314,"language":30438,"meta":27,"style":27},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[200,165316,165317,165327,165345],{"__ignoreMap":27},[203,165318,165319,165321,165323,165325],{"class":205,"line":206},[203,165320,154128],{"class":262},[203,165322,214],{"class":213},[203,165324,155938],{"class":318},[203,165326,220],{"class":213},[203,165328,165329,165331,165333,165335,165337,165339,165341,165343],{"class":205,"line":124},[203,165330,155323],{"class":262},[203,165332,165172],{"class":213},[203,165334,431],{"class":262},[203,165336,12525],{"class":213},[203,165338,291],{"class":262},[203,165340,12525],{"class":213},[203,165342,285],{"class":262},[203,165344,4746],{"class":213},[203,165346,165347,165349,165351,165353,165355,165357,165359,165361,165363,165365],{"class":205,"line":1269},[203,165348,155348],{"class":262},[203,165350,165172],{"class":213},[203,165352,431],{"class":262},[203,165354,12525],{"class":213},[203,165356,431],{"class":262},[203,165358,12525],{"class":213},[203,165360,291],{"class":262},[203,165362,12525],{"class":213},[203,165364,285],{"class":262},[203,165366,4746],{"class":213},[19,165368,165369],{},"成员判断：",[194,165371,165373],{"className":30436,"code":165372,"language":30438,"meta":27,"style":27},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[200,165374,165375,165392,165416],{"__ignoreMap":27},[203,165376,165377,165379,165381,165384,165387,165390],{"class":205,"line":206},[203,165378,30473],{"class":262},[203,165380,214],{"class":213},[203,165382,165383],{"class":318},"\"a\"",[203,165385,165386],{"class":209}," in",[203,165388,165389],{"class":318}," \"abc\"",[203,165391,220],{"class":213},[203,165393,165394,165396,165398,165400,165402,165404,165406,165408,165410,165412,165414],{"class":205,"line":124},[203,165395,30473],{"class":262},[203,165397,214],{"class":213},[203,165399,431],{"class":262},[203,165401,165386],{"class":209},[203,165403,52284],{"class":213},[203,165405,431],{"class":262},[203,165407,12525],{"class":213},[203,165409,291],{"class":262},[203,165411,12525],{"class":213},[203,165413,285],{"class":262},[203,165415,4746],{"class":213},[203,165417,165418,165420,165422,165424,165426,165428,165430,165432,165434],{"class":205,"line":1269},[203,165419,30473],{"class":262},[203,165421,214],{"class":213},[203,165423,62737],{"class":318},[203,165425,165386],{"class":209},[203,165427,4537],{"class":213},[203,165429,62737],{"class":318},[203,165431,51495],{"class":213},[203,165433,149946],{"class":318},[203,165435,165210],{"class":213},[14,165437,165439],{"id":165438},"_614-推导式","6.14 推导式",[19,165441,165442],{},"推导式用于快速生成容器。",[19,165444,165445],{},"列表推导式：",[194,165447,165449],{"className":30436,"code":165448,"language":30438,"meta":27,"style":27},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[200,165450,165451,165478],{"__ignoreMap":27},[203,165452,165453,165455,165457,165460,165462,165464,165466,165468,165470,165472,165474,165476],{"class":205,"line":206},[203,165454,164158],{"class":213},[203,165456,259],{"class":209},[203,165458,165459],{"class":213}," [i ",[203,165461,3114],{"class":209},[203,165463,9528],{"class":213},[203,165465,26101],{"class":209},[203,165467,32501],{"class":262},[203,165469,214],{"class":213},[203,165471,431],{"class":262},[203,165473,12525],{"class":213},[203,165475,558],{"class":262},[203,165477,97358],{"class":213},[203,165479,165480,165482],{"class":205,"line":124},[203,165481,30473],{"class":262},[203,165483,164374],{"class":213},[19,165485,165486],{},"带条件：",[194,165488,165490],{"className":30436,"code":165489,"language":30438,"meta":27,"style":27},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[200,165491,165492,165533],{"__ignoreMap":27},[203,165493,165494,165497,165499,165501,165503,165505,165507,165509,165511,165513,165515,165517,165519,165521,165523,165525,165527,165529,165531],{"class":205,"line":206},[203,165495,165496],{"class":213},"even_nums ",[203,165498,259],{"class":209},[203,165500,165459],{"class":213},[203,165502,3114],{"class":209},[203,165504,9528],{"class":213},[203,165506,26101],{"class":209},[203,165508,32501],{"class":262},[203,165510,214],{"class":213},[203,165512,431],{"class":262},[203,165514,12525],{"class":213},[203,165516,551],{"class":262},[203,165518,13804],{"class":213},[203,165520,1620],{"class":209},[203,165522,9528],{"class":213},[203,165524,542],{"class":209},[203,165526,14845],{"class":262},[203,165528,101617],{"class":209},[203,165530,4182],{"class":262},[203,165532,33304],{"class":213},[203,165534,165535,165537],{"class":205,"line":124},[203,165536,30473],{"class":262},[203,165538,165539],{"class":213},"(even_nums)\n",[19,165541,165542],{},"字典推导式：",[194,165544,165546],{"className":30436,"code":165545,"language":30438,"meta":27,"style":27},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[200,165547,165548,165582],{"__ignoreMap":27},[203,165549,165550,165553,165555,165558,165560,165562,165565,165567,165569,165571,165573,165575,165577,165579],{"class":205,"line":206},[203,165551,165552],{"class":213},"squares ",[203,165554,259],{"class":209},[203,165556,165557],{"class":213}," {i: i ",[203,165559,10751],{"class":209},[203,165561,14845],{"class":262},[203,165563,165564],{"class":209}," for",[203,165566,9528],{"class":213},[203,165568,26101],{"class":209},[203,165570,32501],{"class":262},[203,165572,214],{"class":213},[203,165574,431],{"class":262},[203,165576,12525],{"class":213},[203,165578,558],{"class":262},[203,165580,165581],{"class":213},")}\n",[203,165583,165584,165586],{"class":205,"line":124},[203,165585,30473],{"class":262},[203,165587,165588],{"class":213},"(squares)\n",[19,165590,165591],{},"集合推导式：",[194,165593,165595],{"className":30436,"code":165594,"language":30438,"meta":27,"style":27},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[200,165596,165597,165618],{"__ignoreMap":27},[203,165598,165599,165602,165604,165607,165609,165611,165613,165616],{"class":205,"line":206},[203,165600,165601],{"class":213},"chars ",[203,165603,259],{"class":209},[203,165605,165606],{"class":213}," {ch ",[203,165608,3114],{"class":209},[203,165610,159750],{"class":213},[203,165612,26101],{"class":209},[203,165614,165615],{"class":318}," \"hello\"",[203,165617,1654],{"class":213},[203,165619,165620,165622],{"class":205,"line":124},[203,165621,30473],{"class":262},[203,165623,165624],{"class":213},"(chars)\n",[19,165626,165627],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165629,165631],{"id":165630},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[194,165633,165635],{"className":30436,"code":165634,"language":30438,"meta":27,"style":27},"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",[200,165636,165637,165645,165665,165685,165705,165725,165729,165733,165741,165755,165764,165768,165778,165790,165794,165814,165823,165827,165843,165848,165852,165866,165870,165892,165928],{"__ignoreMap":27},[203,165638,165639,165641,165643],{"class":205,"line":206},[203,165640,159774],{"class":213},[203,165642,259],{"class":209},[203,165644,55505],{"class":213},[203,165646,165647,165649,165651,165653,165655,165657,165659,165661,165663],{"class":205,"line":124},[203,165648,148443],{"class":213},[203,165650,62737],{"class":318},[203,165652,51495],{"class":213},[203,165654,149946],{"class":318},[203,165656,12525],{"class":213},[203,165658,151530],{"class":318},[203,165660,51495],{"class":213},[203,165662,1203],{"class":262},[203,165664,5019],{"class":213},[203,165666,165667,165669,165671,165673,165675,165677,165679,165681,165683],{"class":205,"line":1269},[203,165668,148443],{"class":213},[203,165670,62737],{"class":318},[203,165672,51495],{"class":213},[203,165674,150994],{"class":318},[203,165676,12525],{"class":213},[203,165678,151530],{"class":318},[203,165680,51495],{"class":213},[203,165682,1025],{"class":262},[203,165684,5019],{"class":213},[203,165686,165687,165689,165691,165693,165695,165697,165699,165701,165703],{"class":205,"line":1284},[203,165688,148443],{"class":213},[203,165690,62737],{"class":318},[203,165692,51495],{"class":213},[203,165694,159789],{"class":318},[203,165696,12525],{"class":213},[203,165698,151530],{"class":318},[203,165700,51495],{"class":213},[203,165702,620],{"class":262},[203,165704,5019],{"class":213},[203,165706,165707,165709,165711,165713,165715,165717,165719,165721,165723],{"class":205,"line":1290},[203,165708,148443],{"class":213},[203,165710,62737],{"class":318},[203,165712,51495],{"class":213},[203,165714,163368],{"class":318},[203,165716,12525],{"class":213},[203,165718,151530],{"class":318},[203,165720,51495],{"class":213},[203,165722,1096],{"class":262},[203,165724,5019],{"class":213},[203,165726,165727],{"class":205,"line":1304},[203,165728,33304],{"class":213},[203,165730,165731],{"class":205,"line":1310},[203,165732,2489],{"emptyLinePlaceholder":131},[203,165734,165735,165737,165739],{"class":205,"line":1401},[203,165736,157318],{"class":213},[203,165738,259],{"class":209},[203,165740,47391],{"class":262},[203,165742,165743,165746,165748,165751,165753],{"class":205,"line":1407},[203,165744,165745],{"class":213},"max_student ",[203,165747,259],{"class":209},[203,165749,165750],{"class":213}," students[",[203,165752,405],{"class":262},[203,165754,33304],{"class":213},[203,165756,165757,165760,165762],{"class":205,"line":1419},[203,165758,165759],{"class":213},"passed ",[203,165761,259],{"class":209},[203,165763,51896],{"class":213},[203,165765,165766],{"class":205,"line":1701},[203,165767,2489],{"emptyLinePlaceholder":131},[203,165769,165770,165772,165774,165776],{"class":205,"line":1706},[203,165771,3114],{"class":209},[203,165773,152195],{"class":213},[203,165775,26101],{"class":209},[203,165777,152200],{"class":213},[203,165779,165780,165782,165784,165786,165788],{"class":205,"line":1712},[203,165781,159365],{"class":213},[203,165783,9567],{"class":209},[203,165785,152207],{"class":213},[203,165787,151530],{"class":318},[203,165789,33304],{"class":213},[203,165791,165792],{"class":205,"line":1717},[203,165793,2489],{"emptyLinePlaceholder":131},[203,165795,165796,165798,165800,165802,165804,165806,165809,165811],{"class":205,"line":1731},[203,165797,3190],{"class":209},[203,165799,152207],{"class":213},[203,165801,151530],{"class":318},[203,165803,4532],{"class":213},[203,165805,1174],{"class":209},[203,165807,165808],{"class":213}," max_student[",[203,165810,151530],{"class":318},[203,165812,165813],{"class":213},"]:\n",[203,165815,165816,165819,165821],{"class":205,"line":1736},[203,165817,165818],{"class":213},"        max_student ",[203,165820,259],{"class":209},[203,165822,152223],{"class":213},[203,165824,165825],{"class":205,"line":1742},[203,165826,2489],{"emptyLinePlaceholder":131},[203,165828,165829,165831,165833,165835,165837,165839,165841],{"class":205,"line":1763},[203,165830,3190],{"class":209},[203,165832,152207],{"class":213},[203,165834,151530],{"class":318},[203,165836,4532],{"class":213},[203,165838,1799],{"class":209},[203,165840,157895],{"class":262},[203,165842,3828],{"class":213},[203,165844,165845],{"class":205,"line":1768},[203,165846,165847],{"class":213},"        passed.append(student)\n",[203,165849,165850],{"class":205,"line":1782},[203,165851,2489],{"emptyLinePlaceholder":131},[203,165853,165854,165856,165858,165860,165862,165864],{"class":205,"line":1787},[203,165855,163832],{"class":213},[203,165857,259],{"class":209},[203,165859,163837],{"class":213},[203,165861,798],{"class":209},[203,165863,7421],{"class":262},[203,165865,165053],{"class":213},[203,165867,165868],{"class":205,"line":1816},[203,165869,2489],{"emptyLinePlaceholder":131},[203,165871,165872,165874,165876,165878,165880,165882,165884,165886,165888,165890],{"class":205,"line":1821},[203,165873,30473],{"class":262},[203,165875,214],{"class":213},[203,165877,266],{"class":209},[203,165879,163855],{"class":318},[203,165881,1110],{"class":262},[203,165883,163860],{"class":213},[203,165885,157217],{"class":209},[203,165887,1160],{"class":262},[203,165889,465],{"class":318},[203,165891,220],{"class":213},[203,165893,165894,165896,165898,165900,165903,165905,165908,165910,165912,165914,165916,165918,165920,165922,165924,165926],{"class":205,"line":1838},[203,165895,30473],{"class":262},[203,165897,214],{"class":213},[203,165899,266],{"class":209},[203,165901,165902],{"class":318},"\"最高分学生:",[203,165904,1110],{"class":262},[203,165906,165907],{"class":213},"max_student[",[203,165909,152940],{"class":318},[203,165911,1154],{"class":213},[203,165913,1160],{"class":262},[203,165915,4537],{"class":262},[203,165917,165907],{"class":213},[203,165919,152978],{"class":318},[203,165921,1154],{"class":213},[203,165923,1160],{"class":262},[203,165925,465],{"class":318},[203,165927,220],{"class":213},[203,165929,165930,165932,165934,165936,165939,165942,165945,165947,165949],{"class":205,"line":1843},[203,165931,30473],{"class":262},[203,165933,214],{"class":213},[203,165935,266],{"class":209},[203,165937,165938],{"class":318},"\"及格人数:",[203,165940,165941],{"class":262},"{len",[203,165943,165944],{"class":213},"(passed)",[203,165946,1160],{"class":262},[203,165948,465],{"class":318},[203,165950,220],{"class":213},[14,165952,165954],{"id":165953},"_616-易错点","6.16 易错点",[157,165956,165957,165960,165963,165966,165972,165981],{},[160,165958,165959],{},"列表可变，元组和字符串不可变。",[160,165961,165962],{},"切片结束位置不包含。",[160,165964,165965],{},"字典通过 key 取值，不是通过索引。",[160,165967,165968,165969,28443],{},"空集合要用 ",[200,165970,165971],{},"set()",[160,165973,104424,165974,165977,165978,28443],{},[200,165975,165976],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[200,165979,165980],{},"get()",[160,165982,165983],{},"嵌套容器要先看清楚每一层是什么类型。",[14,165985,165987],{"id":165986},"_617-本章练习","6.17 本章练习",[157,165989,165990,165993,165996,165999,166002],{},[160,165991,165992],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[160,165994,165995],{},"输入一句话，统计每个字符出现次数。",[160,165997,165998],{},"使用集合去除列表中的重复元素。",[160,166000,166001],{},"使用字典保存一个学生的信息，并实现修改成绩。",[160,166003,166004],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5216,166006,166007],{},"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":27,"searchDepth":124,"depth":124,"links":166009},[166010,166011,166012,166013,166014,166015,166016,166017,166018,166019,166020,166021,166022,166023,166024,166025,166026],{"id":162990,"depth":124,"text":162991},{"id":163107,"depth":124,"text":163108},{"id":163197,"depth":124,"text":163198},{"id":163321,"depth":124,"text":163322},{"id":163684,"depth":124,"text":163685},{"id":163871,"depth":124,"text":163872},{"id":163990,"depth":124,"text":163991},{"id":164132,"depth":124,"text":164133},{"id":164319,"depth":124,"text":164320},{"id":164563,"depth":124,"text":164564},{"id":164773,"depth":124,"text":164774},{"id":164858,"depth":124,"text":164859},{"id":165156,"depth":124,"text":165157},{"id":165438,"depth":124,"text":165439},{"id":165630,"depth":124,"text":165631},{"id":165953,"depth":124,"text":165954},{"id":165986,"depth":124,"text":165987},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162982,"description":23467},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166033,"title":166034,"body":166035,"description":23467,"extension":129,"meta":168207,"navigation":131,"path":168208,"seo":168209,"stem":168210,"__hash__":168211},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166036,"toc":168182},[166037,166040,166044,166047,166127,166130,166151,166154,166158,166161,166223,166226,166243,166247,166250,166295,166297,166305,166309,166312,166394,166397,166400,166425,166428,166451,166455,166458,166460,166522,166525,166527,166578,166582,166586,166592,166697,166701,166707,166778,166782,166785,166853,166856,166936,166940,166946,166982,166985,166988,167098,167104,167108,167111,167183,167186,167190,167194,167199,167261,167265,167270,167338,167342,167347,167463,167467,167470,167550,167553,167557,167560,167664,167666,167681,167684,167688,167826,167834,167838,167840,167851,167853,168111,168115,168147,168151,168179],[10,166038,166034],{"id":166039},"_7-函数进阶",[14,166041,166043],{"id":166042},"_71-多返回值","7.1 多返回值",[19,166045,166046],{},"Python 函数可以返回多个值，本质上返回的是元组。",[194,166048,166050],{"className":30436,"code":166049,"language":30438,"meta":27,"style":27},"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",[200,166051,166052,166061,166069,166077,166086,166093,166097,166101,166110,166116],{"__ignoreMap":27},[203,166053,166054,166056,166059],{"class":205,"line":206},[203,166055,32005],{"class":209},[203,166057,166058],{"class":2052}," get_info",[203,166060,32011],{"class":213},[203,166062,166063,166065,166067],{"class":205,"line":124},[203,166064,152428],{"class":213},[203,166066,259],{"class":209},[203,166068,149411],{"class":318},[203,166070,166071,166073,166075],{"class":205,"line":1269},[203,166072,152444],{"class":213},[203,166074,259],{"class":209},[203,166076,146609],{"class":262},[203,166078,166079,166081,166083],{"class":205,"line":1284},[203,166080,152459],{"class":213},[203,166082,259],{"class":209},[203,166084,166085],{"class":262}," 95\n",[203,166087,166088,166090],{"class":205,"line":1290},[203,166089,4179],{"class":209},[203,166091,166092],{"class":213}," name, age, score\n",[203,166094,166095],{"class":205,"line":1304},[203,166096,2489],{"emptyLinePlaceholder":131},[203,166098,166099],{"class":205,"line":1310},[203,166100,2489],{"emptyLinePlaceholder":131},[203,166102,166103,166105,166107],{"class":205,"line":1401},[203,166104,161364],{"class":213},[203,166106,259],{"class":209},[203,166108,166109],{"class":213}," get_info()\n",[203,166111,166112,166114],{"class":205,"line":1407},[203,166113,30473],{"class":262},[203,166115,76643],{"class":213},[203,166117,166118,166120,166122,166124],{"class":205,"line":1419},[203,166119,30473],{"class":262},[203,166121,214],{"class":213},[203,166123,103165],{"class":262},[203,166125,166126],{"class":213},"(result))\n",[19,166128,166129],{},"可以直接解包：",[194,166131,166133],{"className":30436,"code":166132,"language":30438,"meta":27,"style":27},"name, age, score = get_info()\nprint(name, age, score)\n",[200,166134,166135,166144],{"__ignoreMap":27},[203,166136,166137,166140,166142],{"class":205,"line":206},[203,166138,166139],{"class":213},"name, age, score ",[203,166141,259],{"class":209},[203,166143,166109],{"class":213},[203,166145,166146,166148],{"class":205,"line":124},[203,166147,30473],{"class":262},[203,166149,166150],{"class":213},"(name, age, score)\n",[19,166152,166153],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166155,166157],{"id":166156},"_72-位置参数","7.2 位置参数",[19,166159,166160],{},"位置参数按顺序传递。",[194,166162,166164],{"className":30436,"code":166163,"language":30438,"meta":27,"style":27},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[200,166165,166166,166174,166202,166206,166210],{"__ignoreMap":27},[203,166167,166168,166170,166172],{"class":205,"line":206},[203,166169,32005],{"class":209},[203,166171,149430],{"class":2052},[203,166173,149433],{"class":213},[203,166175,166176,166178,166180,166182,166184,166186,166188,166190,166192,166194,166196,166198,166200],{"class":205,"line":124},[203,166177,31357],{"class":262},[203,166179,214],{"class":213},[203,166181,266],{"class":209},[203,166183,149444],{"class":318},[203,166185,1110],{"class":262},[203,166187,79868],{"class":213},[203,166189,1160],{"class":262},[203,166191,149453],{"class":318},[203,166193,1110],{"class":262},[203,166195,70279],{"class":213},[203,166197,1160],{"class":262},[203,166199,149462],{"class":318},[203,166201,220],{"class":213},[203,166203,166204],{"class":205,"line":1269},[203,166205,2489],{"emptyLinePlaceholder":131},[203,166207,166208],{"class":205,"line":1284},[203,166209,2489],{"emptyLinePlaceholder":131},[203,166211,166212,166215,166217,166219,166221],{"class":205,"line":1290},[203,166213,166214],{"class":213},"introduce(",[203,166216,149946],{"class":318},[203,166218,12525],{"class":213},[203,166220,864],{"class":262},[203,166222,220],{"class":213},[19,166224,166225],{},"顺序错了就会得到错误含义：",[194,166227,166229],{"className":30436,"code":166228,"language":30438,"meta":27,"style":27},"introduce(18, \"小明\")\n",[200,166230,166231],{"__ignoreMap":27},[203,166232,166233,166235,166237,166239,166241],{"class":205,"line":206},[203,166234,166214],{"class":213},[203,166236,864],{"class":262},[203,166238,12525],{"class":213},[203,166240,149946],{"class":318},[203,166242,220],{"class":213},[14,166244,166246],{"id":166245},"_73-关键字参数","7.3 关键字参数",[19,166248,166249],{},"关键字参数按参数名传递。",[194,166251,166253],{"className":30436,"code":166252,"language":30438,"meta":27,"style":27},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[200,166254,166255,166275],{"__ignoreMap":27},[203,166256,166257,166259,166261,166263,166265,166267,166269,166271,166273],{"class":205,"line":206},[203,166258,166214],{"class":213},[203,166260,79868],{"class":5306},[203,166262,259],{"class":209},[203,166264,149946],{"class":318},[203,166266,12525],{"class":213},[203,166268,70279],{"class":5306},[203,166270,259],{"class":209},[203,166272,864],{"class":262},[203,166274,220],{"class":213},[203,166276,166277,166279,166281,166283,166285,166287,166289,166291,166293],{"class":205,"line":124},[203,166278,166214],{"class":213},[203,166280,70279],{"class":5306},[203,166282,259],{"class":209},[203,166284,864],{"class":262},[203,166286,12525],{"class":213},[203,166288,79868],{"class":5306},[203,166290,259],{"class":209},[203,166292,149946],{"class":318},[203,166294,220],{"class":213},[19,166296,117992],{},[157,166298,166299,166302],{},[160,166300,166301],{},"顺序不容易错。",[160,166303,166304],{},"调用时可读性更强。",[14,166306,166308],{"id":166307},"_74-默认参数","7.4 默认参数",[19,166310,166311],{},"默认参数给参数设置默认值。",[194,166313,166315],{"className":30436,"code":166314,"language":30438,"meta":27,"style":27},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[200,166316,166317,166333,166363,166367,166371,166381],{"__ignoreMap":27},[203,166318,166319,166321,166323,166326,166328,166331],{"class":205,"line":206},[203,166320,32005],{"class":209},[203,166322,122151],{"class":2052},[203,166324,166325],{"class":213},"(host, port",[203,166327,259],{"class":209},[203,166329,166330],{"class":262},"3306",[203,166332,30844],{"class":213},[203,166334,166335,166337,166339,166341,166344,166346,166348,166350,166352,166354,166357,166359,166361],{"class":205,"line":124},[203,166336,31357],{"class":262},[203,166338,214],{"class":213},[203,166340,266],{"class":209},[203,166342,166343],{"class":318},"\"连接",[203,166345,1110],{"class":262},[203,166347,27453],{"class":213},[203,166349,1160],{"class":262},[203,166351,1073],{"class":318},[203,166353,1110],{"class":262},[203,166355,166356],{"class":213},"port",[203,166358,1160],{"class":262},[203,166360,465],{"class":318},[203,166362,220],{"class":213},[203,166364,166365],{"class":205,"line":1269},[203,166366,2489],{"emptyLinePlaceholder":131},[203,166368,166369],{"class":205,"line":1284},[203,166370,2489],{"emptyLinePlaceholder":131},[203,166372,166373,166376,166379],{"class":205,"line":1290},[203,166374,166375],{"class":213},"connect(",[203,166377,166378],{"class":318},"\"localhost\"",[203,166380,220],{"class":213},[203,166382,166383,166385,166387,166389,166392],{"class":205,"line":1304},[203,166384,166375],{"class":213},[203,166386,166378],{"class":318},[203,166388,12525],{"class":213},[203,166390,166391],{"class":262},"6379",[203,166393,220],{"class":213},[19,166395,166396],{},"注意：默认参数必须放在非默认参数后面。",[19,166398,166399],{},"错误：",[194,166401,166403],{"className":30436,"code":166402,"language":30438,"meta":27,"style":27},"def connect(port=3306, host):\n    pass\n",[200,166404,166405,166421],{"__ignoreMap":27},[203,166406,166407,166409,166411,166414,166416,166418],{"class":205,"line":206},[203,166408,32005],{"class":209},[203,166410,122151],{"class":2052},[203,166412,166413],{"class":213},"(port",[203,166415,259],{"class":209},[203,166417,166330],{"class":262},[203,166419,166420],{"class":213},", host):\n",[203,166422,166423],{"class":205,"line":124},[203,166424,149595],{"class":209},[19,166426,166427],{},"正确：",[194,166429,166431],{"className":30436,"code":166430,"language":30438,"meta":27,"style":27},"def connect(host, port=3306):\n    pass\n",[200,166432,166433,166447],{"__ignoreMap":27},[203,166434,166435,166437,166439,166441,166443,166445],{"class":205,"line":206},[203,166436,32005],{"class":209},[203,166438,122151],{"class":2052},[203,166440,166325],{"class":213},[203,166442,259],{"class":209},[203,166444,166330],{"class":262},[203,166446,30844],{"class":213},[203,166448,166449],{"class":205,"line":124},[203,166450,149595],{"class":209},[14,166452,166454],{"id":166453},"_75-默认参数的坑","7.5 默认参数的坑",[19,166456,166457],{},"不要使用可变对象作为默认参数。",[19,166459,157681],{},[194,166461,166463],{"className":30436,"code":166462,"language":30438,"meta":27,"style":27},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[200,166464,166465,166480,166485,166492,166496,166500,166511],{"__ignoreMap":27},[203,166466,166467,166469,166472,166475,166477],{"class":205,"line":206},[203,166468,32005],{"class":209},[203,166470,166471],{"class":2052}," add_item",[203,166473,166474],{"class":213},"(item, items",[203,166476,259],{"class":209},[203,166478,166479],{"class":213},"[]):\n",[203,166481,166482],{"class":205,"line":124},[203,166483,166484],{"class":213},"    items.append(item)\n",[203,166486,166487,166489],{"class":205,"line":1269},[203,166488,4179],{"class":209},[203,166490,166491],{"class":213}," items\n",[203,166493,166494],{"class":205,"line":1284},[203,166495,2489],{"emptyLinePlaceholder":131},[203,166497,166498],{"class":205,"line":1290},[203,166499,2489],{"emptyLinePlaceholder":131},[203,166501,166502,166504,166507,166509],{"class":205,"line":1304},[203,166503,30473],{"class":262},[203,166505,166506],{"class":213},"(add_item(",[203,166508,165383],{"class":318},[203,166510,30555],{"class":213},[203,166512,166513,166515,166517,166520],{"class":205,"line":1310},[203,166514,30473],{"class":262},[203,166516,166506],{"class":213},[203,166518,166519],{"class":318},"\"b\"",[203,166521,30555],{"class":213},[19,166523,166524],{},"第二次调用会复用第一次的列表。",[19,166526,155946],{},[194,166528,166530],{"className":30436,"code":166529,"language":30438,"meta":27,"style":27},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[200,166531,166532,166546,166559,166568,166572],{"__ignoreMap":27},[203,166533,166534,166536,166538,166540,166542,166544],{"class":205,"line":206},[203,166535,32005],{"class":209},[203,166537,166471],{"class":2052},[203,166539,166474],{"class":213},[203,166541,259],{"class":209},[203,166543,95744],{"class":262},[203,166545,30844],{"class":213},[203,166547,166548,166550,166553,166555,166557],{"class":205,"line":124},[203,166549,3190],{"class":209},[203,166551,166552],{"class":213}," items ",[203,166554,38985],{"class":209},[203,166556,38991],{"class":262},[203,166558,3828],{"class":213},[203,166560,166561,166564,166566],{"class":205,"line":1269},[203,166562,166563],{"class":213},"        items ",[203,166565,259],{"class":209},[203,166567,51896],{"class":213},[203,166569,166570],{"class":205,"line":1284},[203,166571,166484],{"class":213},[203,166573,166574,166576],{"class":205,"line":1290},[203,166575,4179],{"class":209},[203,166577,166491],{"class":213},[14,166579,166581],{"id":166580},"_76-不定长参数","7.6 不定长参数",[174,166583,166585],{"id":166584},"_761-args","7.6.1 *args",[19,166587,166588,166591],{},[200,166589,166590],{},"*args"," 接收任意数量的位置参数，得到元组。",[194,166593,166595],{"className":30436,"code":166594,"language":30438,"meta":27,"style":27},"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",[200,166596,166597,166610,166618,166629,166638,166644,166648,166652,166671],{"__ignoreMap":27},[203,166598,166599,166601,166603,166605,166607],{"class":205,"line":206},[203,166600,32005],{"class":209},[203,166602,5299],{"class":2052},[203,166604,214],{"class":213},[203,166606,669],{"class":209},[203,166608,166609],{"class":213},"args):\n",[203,166611,166612,166614,166616],{"class":205,"line":124},[203,166613,159365],{"class":213},[203,166615,259],{"class":209},[203,166617,47391],{"class":262},[203,166619,166620,166622,166624,166626],{"class":205,"line":1269},[203,166621,3290],{"class":209},[203,166623,156238],{"class":213},[203,166625,26101],{"class":209},[203,166627,166628],{"class":213}," args:\n",[203,166630,166631,166633,166635],{"class":205,"line":1284},[203,166632,160040],{"class":213},[203,166634,9567],{"class":209},[203,166636,166637],{"class":213}," num\n",[203,166639,166640,166642],{"class":205,"line":1290},[203,166641,4179],{"class":209},[203,166643,162345],{"class":213},[203,166645,166646],{"class":205,"line":1304},[203,166647,2489],{"emptyLinePlaceholder":131},[203,166649,166650],{"class":205,"line":1310},[203,166651,2489],{"emptyLinePlaceholder":131},[203,166653,166654,166656,166659,166661,166663,166665,166667,166669],{"class":205,"line":1401},[203,166655,30473],{"class":262},[203,166657,166658],{"class":213},"(add(",[203,166660,431],{"class":262},[203,166662,12525],{"class":213},[203,166664,291],{"class":262},[203,166666,12525],{"class":213},[203,166668,285],{"class":262},[203,166670,30555],{"class":213},[203,166672,166673,166675,166677,166679,166681,166683,166685,166687,166689,166691,166693,166695],{"class":205,"line":1407},[203,166674,30473],{"class":262},[203,166676,166658],{"class":213},[203,166678,431],{"class":262},[203,166680,12525],{"class":213},[203,166682,291],{"class":262},[203,166684,12525],{"class":213},[203,166686,285],{"class":262},[203,166688,12525],{"class":213},[203,166690,507],{"class":262},[203,166692,12525],{"class":213},[203,166694,533],{"class":262},[203,166696,30555],{"class":213},[174,166698,166700],{"id":166699},"_762-kwargs","7.6.2 **kwargs",[19,166702,166703,166706],{},[200,166704,166705],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[194,166708,166710],{"className":30436,"code":166709,"language":30438,"meta":27,"style":27},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[200,166711,166712,166725,166736,166742,166746,166750],{"__ignoreMap":27},[203,166713,166714,166716,166718,166720,166722],{"class":205,"line":206},[203,166715,32005],{"class":209},[203,166717,162003],{"class":2052},[203,166719,214],{"class":213},[203,166721,10751],{"class":209},[203,166723,166724],{"class":213},"kwargs):\n",[203,166726,166727,166729,166731,166733],{"class":205,"line":124},[203,166728,3290],{"class":209},[203,166730,164843],{"class":213},[203,166732,26101],{"class":209},[203,166734,166735],{"class":213}," kwargs.items():\n",[203,166737,166738,166740],{"class":205,"line":1269},[203,166739,32509],{"class":262},[203,166741,164855],{"class":213},[203,166743,166744],{"class":205,"line":1284},[203,166745,2489],{"emptyLinePlaceholder":131},[203,166747,166748],{"class":205,"line":1290},[203,166749,2489],{"emptyLinePlaceholder":131},[203,166751,166752,166754,166756,166758,166760,166762,166764,166766,166768,166770,166772,166774,166776],{"class":205,"line":1304},[203,166753,162068],{"class":213},[203,166755,79868],{"class":5306},[203,166757,259],{"class":209},[203,166759,149946],{"class":318},[203,166761,12525],{"class":213},[203,166763,70279],{"class":5306},[203,166765,259],{"class":209},[203,166767,864],{"class":262},[203,166769,12525],{"class":213},[203,166771,70330],{"class":5306},[203,166773,259],{"class":209},[203,166775,69327],{"class":318},[203,166777,220],{"class":213},[14,166779,166781],{"id":166780},"_77-参数解包","7.7 参数解包",[19,166783,166784],{},"列表或元组解包为位置参数：",[194,166786,166788],{"className":30436,"code":166787,"language":30438,"meta":27,"style":27},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[200,166789,166790,166799,166814,166818,166822,166842],{"__ignoreMap":27},[203,166791,166792,166794,166796],{"class":205,"line":206},[203,166793,32005],{"class":209},[203,166795,5299],{"class":2052},[203,166797,166798],{"class":213},"(a, b, c):\n",[203,166800,166801,166803,166805,166807,166809,166811],{"class":205,"line":124},[203,166802,4179],{"class":209},[203,166804,10959],{"class":213},[203,166806,695],{"class":209},[203,166808,10972],{"class":213},[203,166810,695],{"class":209},[203,166812,166813],{"class":213}," c\n",[203,166815,166816],{"class":205,"line":1269},[203,166817,2489],{"emptyLinePlaceholder":131},[203,166819,166820],{"class":205,"line":1284},[203,166821,2489],{"emptyLinePlaceholder":131},[203,166823,166824,166826,166828,166830,166832,166834,166836,166838,166840],{"class":205,"line":1290},[203,166825,164158],{"class":213},[203,166827,259],{"class":209},[203,166829,52284],{"class":213},[203,166831,431],{"class":262},[203,166833,12525],{"class":213},[203,166835,291],{"class":262},[203,166837,12525],{"class":213},[203,166839,285],{"class":262},[203,166841,33304],{"class":213},[203,166843,166844,166846,166848,166850],{"class":205,"line":1304},[203,166845,30473],{"class":262},[203,166847,166658],{"class":213},[203,166849,669],{"class":209},[203,166851,166852],{"class":213},"nums))\n",[19,166854,166855],{},"字典解包为关键字参数：",[194,166857,166859],{"className":30436,"code":166858,"language":30438,"meta":27,"style":27},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[200,166860,166861,166869,166895,166899,166903,166927],{"__ignoreMap":27},[203,166862,166863,166865,166867],{"class":205,"line":206},[203,166864,32005],{"class":209},[203,166866,149430],{"class":2052},[203,166868,149433],{"class":213},[203,166870,166871,166873,166875,166877,166879,166881,166883,166885,166887,166889,166891,166893],{"class":205,"line":124},[203,166872,31357],{"class":262},[203,166874,214],{"class":213},[203,166876,266],{"class":209},[203,166878,465],{"class":318},[203,166880,1110],{"class":262},[203,166882,79868],{"class":213},[203,166884,1160],{"class":262},[203,166886,4537],{"class":262},[203,166888,70279],{"class":213},[203,166890,1160],{"class":262},[203,166892,465],{"class":318},[203,166894,220],{"class":213},[203,166896,166897],{"class":205,"line":1269},[203,166898,2489],{"emptyLinePlaceholder":131},[203,166900,166901],{"class":205,"line":1284},[203,166902,2489],{"emptyLinePlaceholder":131},[203,166904,166905,166907,166909,166911,166913,166915,166917,166919,166921,166923,166925],{"class":205,"line":1290},[203,166906,116372],{"class":213},[203,166908,259],{"class":209},[203,166910,4537],{"class":213},[203,166912,62737],{"class":318},[203,166914,51495],{"class":213},[203,166916,149946],{"class":318},[203,166918,12525],{"class":213},[203,166920,69182],{"class":318},[203,166922,51495],{"class":213},[203,166924,864],{"class":262},[203,166926,1654],{"class":213},[203,166928,166929,166931,166933],{"class":205,"line":1304},[203,166930,166214],{"class":213},[203,166932,10751],{"class":209},[203,166934,166935],{"class":213},"info)\n",[14,166937,166939],{"id":166938},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,166941,166942,166945],{},[200,166943,166944],{},"lambda"," 用于定义简单匿名函数。",[194,166947,166949],{"className":30436,"code":166948,"language":30438,"meta":27,"style":27},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[200,166950,166951,166968],{"__ignoreMap":27},[203,166952,166953,166956,166958,166961,166964,166966],{"class":205,"line":206},[203,166954,166955],{"class":213},"add ",[203,166957,259],{"class":209},[203,166959,166960],{"class":209}," lambda",[203,166962,166963],{"class":213}," a, b: a ",[203,166965,695],{"class":209},[203,166967,151162],{"class":213},[203,166969,166970,166972,166974,166976,166978,166980],{"class":205,"line":124},[203,166971,30473],{"class":262},[203,166973,166658],{"class":213},[203,166975,431],{"class":262},[203,166977,12525],{"class":213},[203,166979,291],{"class":262},[203,166981,30555],{"class":213},[19,166983,166984],{},"常和排序、过滤等函数一起使用。",[19,166986,166987],{},"按分数排序：",[194,166989,166991],{"className":30436,"code":166990,"language":30438,"meta":27,"style":27},"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",[200,166992,166993,167001,167021,167041,167061,167065,167069,167092],{"__ignoreMap":27},[203,166994,166995,166997,166999],{"class":205,"line":206},[203,166996,159774],{"class":213},[203,166998,259],{"class":209},[203,167000,55505],{"class":213},[203,167002,167003,167005,167007,167009,167011,167013,167015,167017,167019],{"class":205,"line":124},[203,167004,148443],{"class":213},[203,167006,62737],{"class":318},[203,167008,51495],{"class":213},[203,167010,149946],{"class":318},[203,167012,12525],{"class":213},[203,167014,151530],{"class":318},[203,167016,51495],{"class":213},[203,167018,1203],{"class":262},[203,167020,5019],{"class":213},[203,167022,167023,167025,167027,167029,167031,167033,167035,167037,167039],{"class":205,"line":1269},[203,167024,148443],{"class":213},[203,167026,62737],{"class":318},[203,167028,51495],{"class":213},[203,167030,150994],{"class":318},[203,167032,12525],{"class":213},[203,167034,151530],{"class":318},[203,167036,51495],{"class":213},[203,167038,1025],{"class":262},[203,167040,5019],{"class":213},[203,167042,167043,167045,167047,167049,167051,167053,167055,167057,167059],{"class":205,"line":1284},[203,167044,148443],{"class":213},[203,167046,62737],{"class":318},[203,167048,51495],{"class":213},[203,167050,159789],{"class":318},[203,167052,12525],{"class":213},[203,167054,151530],{"class":318},[203,167056,51495],{"class":213},[203,167058,620],{"class":262},[203,167060,5019],{"class":213},[203,167062,167063],{"class":205,"line":1290},[203,167064,33304],{"class":213},[203,167066,167067],{"class":205,"line":1304},[203,167068,2489],{"emptyLinePlaceholder":131},[203,167070,167071,167074,167076,167078,167080,167082,167084,167086,167088,167090],{"class":205,"line":1310},[203,167072,167073],{"class":213},"students.sort(",[203,167075,154004],{"class":5306},[203,167077,154007],{"class":209},[203,167079,154010],{"class":213},[203,167081,151530],{"class":318},[203,167083,112260],{"class":213},[203,167085,163586],{"class":5306},[203,167087,259],{"class":209},[203,167089,31534],{"class":262},[203,167091,220],{"class":213},[203,167093,167094,167096],{"class":205,"line":1401},[203,167095,30473],{"class":262},[203,167097,165053],{"class":213},[19,167099,167100,167101,167103],{},"如果逻辑复杂，不要硬写 ",[200,167102,166944],{},"，定义普通函数更清晰。",[14,167105,167107],{"id":167106},"_79-函数作为参数","7.9 函数作为参数",[19,167109,167110],{},"函数可以作为参数传给另一个函数。",[194,167112,167114],{"className":30436,"code":167113,"language":30438,"meta":27,"style":27},"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",[200,167115,167116,167124,167134,167138,167142,167152,167159,167163,167167],{"__ignoreMap":27},[203,167117,167118,167120,167122],{"class":205,"line":206},[203,167119,32005],{"class":209},[203,167121,5299],{"class":2052},[203,167123,151151],{"class":213},[203,167125,167126,167128,167130,167132],{"class":205,"line":124},[203,167127,4179],{"class":209},[203,167129,10959],{"class":213},[203,167131,695],{"class":209},[203,167133,151162],{"class":213},[203,167135,167136],{"class":205,"line":1269},[203,167137,2489],{"emptyLinePlaceholder":131},[203,167139,167140],{"class":205,"line":1284},[203,167141,2489],{"emptyLinePlaceholder":131},[203,167143,167144,167146,167149],{"class":205,"line":1290},[203,167145,32005],{"class":209},[203,167147,167148],{"class":2052}," calculate",[203,167150,167151],{"class":213},"(a, b, func):\n",[203,167153,167154,167156],{"class":205,"line":1304},[203,167155,4179],{"class":209},[203,167157,167158],{"class":213}," func(a, b)\n",[203,167160,167161],{"class":205,"line":1310},[203,167162,2489],{"emptyLinePlaceholder":131},[203,167164,167165],{"class":205,"line":1401},[203,167166,2489],{"emptyLinePlaceholder":131},[203,167168,167169,167171,167174,167176,167178,167180],{"class":205,"line":1407},[203,167170,30473],{"class":262},[203,167172,167173],{"class":213},"(calculate(",[203,167175,660],{"class":262},[203,167177,12525],{"class":213},[203,167179,914],{"class":262},[203,167181,167182],{"class":213},", add))\n",[19,167184,167185],{},"这种思想在排序、回调、框架中经常出现。",[14,167187,167189],{"id":167188},"_710-mapfiltersorted","7.10 map、filter、sorted",[174,167191,167193],{"id":167192},"_7101-map","7.10.1 map",[19,167195,167196,167198],{},[200,167197,74102],{}," 对每个元素执行函数。",[194,167200,167202],{"className":30436,"code":167201,"language":30438,"meta":27,"style":27},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[200,167203,167204,167228,167251],{"__ignoreMap":27},[203,167205,167206,167208,167210,167212,167214,167216,167218,167220,167222,167224,167226],{"class":205,"line":206},[203,167207,164158],{"class":213},[203,167209,259],{"class":209},[203,167211,52284],{"class":213},[203,167213,431],{"class":262},[203,167215,12525],{"class":213},[203,167217,291],{"class":262},[203,167219,12525],{"class":213},[203,167221,285],{"class":262},[203,167223,12525],{"class":213},[203,167225,507],{"class":262},[203,167227,33304],{"class":213},[203,167229,167230,167232,167234,167237,167239,167241,167244,167246,167248],{"class":205,"line":124},[203,167231,161364],{"class":213},[203,167233,259],{"class":209},[203,167235,167236],{"class":262}," map",[203,167238,214],{"class":213},[203,167240,166944],{"class":209},[203,167242,167243],{"class":213}," x: x ",[203,167245,669],{"class":209},[203,167247,14845],{"class":262},[203,167249,167250],{"class":213},", nums)\n",[203,167252,167253,167255,167257,167259],{"class":205,"line":1269},[203,167254,30473],{"class":262},[203,167256,214],{"class":213},[203,167258,154128],{"class":262},[203,167260,166126],{"class":213},[174,167262,167264],{"id":167263},"_7102-filter","7.10.2 filter",[19,167266,167267,167269],{},[200,167268,80109],{}," 保留满足条件的元素。",[194,167271,167273],{"className":30436,"code":167272,"language":30438,"meta":27,"style":27},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[200,167274,167275,167303,167328],{"__ignoreMap":27},[203,167276,167277,167279,167281,167283,167285,167287,167289,167291,167293,167295,167297,167299,167301],{"class":205,"line":206},[203,167278,164158],{"class":213},[203,167280,259],{"class":209},[203,167282,52284],{"class":213},[203,167284,431],{"class":262},[203,167286,12525],{"class":213},[203,167288,291],{"class":262},[203,167290,12525],{"class":213},[203,167292,285],{"class":262},[203,167294,12525],{"class":213},[203,167296,507],{"class":262},[203,167298,12525],{"class":213},[203,167300,533],{"class":262},[203,167302,33304],{"class":213},[203,167304,167305,167307,167309,167312,167314,167316,167318,167320,167322,167324,167326],{"class":205,"line":124},[203,167306,161364],{"class":213},[203,167308,259],{"class":209},[203,167310,167311],{"class":262}," filter",[203,167313,214],{"class":213},[203,167315,166944],{"class":209},[203,167317,167243],{"class":213},[203,167319,542],{"class":209},[203,167321,14845],{"class":262},[203,167323,101617],{"class":209},[203,167325,4182],{"class":262},[203,167327,167250],{"class":213},[203,167329,167330,167332,167334,167336],{"class":205,"line":1269},[203,167331,30473],{"class":262},[203,167333,214],{"class":213},[203,167335,154128],{"class":262},[203,167337,166126],{"class":213},[174,167339,167341],{"id":167340},"_7103-sorted","7.10.3 sorted",[19,167343,167344,167346],{},[200,167345,165294],{}," 返回排序后的新列表。",[194,167348,167350],{"className":30436,"code":167349,"language":30438,"meta":27,"style":27},"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",[200,167351,167352,167360,167380,167400,167420,167424,167428,167457],{"__ignoreMap":27},[203,167353,167354,167356,167358],{"class":205,"line":206},[203,167355,159774],{"class":213},[203,167357,259],{"class":209},[203,167359,55505],{"class":213},[203,167361,167362,167364,167366,167368,167370,167372,167374,167376,167378],{"class":205,"line":124},[203,167363,148443],{"class":213},[203,167365,62737],{"class":318},[203,167367,51495],{"class":213},[203,167369,149946],{"class":318},[203,167371,12525],{"class":213},[203,167373,151530],{"class":318},[203,167375,51495],{"class":213},[203,167377,1203],{"class":262},[203,167379,5019],{"class":213},[203,167381,167382,167384,167386,167388,167390,167392,167394,167396,167398],{"class":205,"line":1269},[203,167383,148443],{"class":213},[203,167385,62737],{"class":318},[203,167387,51495],{"class":213},[203,167389,150994],{"class":318},[203,167391,12525],{"class":213},[203,167393,151530],{"class":318},[203,167395,51495],{"class":213},[203,167397,1025],{"class":262},[203,167399,5019],{"class":213},[203,167401,167402,167404,167406,167408,167410,167412,167414,167416,167418],{"class":205,"line":1284},[203,167403,148443],{"class":213},[203,167405,62737],{"class":318},[203,167407,51495],{"class":213},[203,167409,159789],{"class":318},[203,167411,12525],{"class":213},[203,167413,151530],{"class":318},[203,167415,51495],{"class":213},[203,167417,620],{"class":262},[203,167419,5019],{"class":213},[203,167421,167422],{"class":205,"line":1290},[203,167423,33304],{"class":213},[203,167425,167426],{"class":205,"line":1304},[203,167427,2489],{"emptyLinePlaceholder":131},[203,167429,167430,167432,167434,167436,167439,167441,167443,167445,167447,167449,167451,167453,167455],{"class":205,"line":1310},[203,167431,161364],{"class":213},[203,167433,259],{"class":209},[203,167435,163662],{"class":262},[203,167437,167438],{"class":213},"(students, ",[203,167440,154004],{"class":5306},[203,167442,154007],{"class":209},[203,167444,154010],{"class":213},[203,167446,151530],{"class":318},[203,167448,112260],{"class":213},[203,167450,163586],{"class":5306},[203,167452,259],{"class":209},[203,167454,31534],{"class":262},[203,167456,220],{"class":213},[203,167458,167459,167461],{"class":205,"line":1401},[203,167460,30473],{"class":262},[203,167462,76643],{"class":213},[14,167464,167466],{"id":167465},"_711-闭包入门","7.11 闭包入门",[19,167468,167469],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[194,167471,167473],{"className":30436,"code":167472,"language":30438,"meta":27,"style":27},"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",[200,167474,167475,167485,167495,167506,167510,167517,167521,167525,167539],{"__ignoreMap":27},[203,167476,167477,167479,167482],{"class":205,"line":206},[203,167478,32005],{"class":209},[203,167480,167481],{"class":2052}," outer",[203,167483,167484],{"class":213},"(base):\n",[203,167486,167487,167489,167492],{"class":205,"line":124},[203,167488,30859],{"class":209},[203,167490,167491],{"class":2052}," inner",[203,167493,167494],{"class":213},"(num):\n",[203,167496,167497,167499,167502,167504],{"class":205,"line":1269},[203,167498,14842],{"class":209},[203,167500,167501],{"class":213}," base ",[203,167503,695],{"class":209},[203,167505,166637],{"class":213},[203,167507,167508],{"class":205,"line":1284},[203,167509,2489],{"emptyLinePlaceholder":131},[203,167511,167512,167514],{"class":205,"line":1290},[203,167513,4179],{"class":209},[203,167515,167516],{"class":213}," inner\n",[203,167518,167519],{"class":205,"line":1304},[203,167520,2489],{"emptyLinePlaceholder":131},[203,167522,167523],{"class":205,"line":1310},[203,167524,2489],{"emptyLinePlaceholder":131},[203,167526,167527,167530,167532,167535,167537],{"class":205,"line":1401},[203,167528,167529],{"class":213},"add_10 ",[203,167531,259],{"class":209},[203,167533,167534],{"class":213}," outer(",[203,167536,660],{"class":262},[203,167538,220],{"class":213},[203,167540,167541,167543,167546,167548],{"class":205,"line":1407},[203,167542,30473],{"class":262},[203,167544,167545],{"class":213},"(add_10(",[203,167547,533],{"class":262},[203,167549,30555],{"class":213},[19,167551,167552],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167554,167556],{"id":167555},"_712-装饰器入门","7.12 装饰器入门",[19,167558,167559],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[194,167561,167563],{"className":30436,"code":167562,"language":30438,"meta":27,"style":27},"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",[200,167564,167565,167574,167583,167594,167599,167610,167614,167621,167625,167629,167634,167642,167652,167656,167660],{"__ignoreMap":27},[203,167566,167567,167569,167571],{"class":205,"line":206},[203,167568,32005],{"class":209},[203,167570,87249],{"class":2052},[203,167572,167573],{"class":213},"(func):\n",[203,167575,167576,167578,167581],{"class":205,"line":124},[203,167577,30859],{"class":209},[203,167579,167580],{"class":2052}," wrapper",[203,167582,32011],{"class":213},[203,167584,167585,167587,167589,167592],{"class":205,"line":1269},[203,167586,32509],{"class":262},[203,167588,214],{"class":213},[203,167590,167591],{"class":318},"\"函数开始执行\"",[203,167593,220],{"class":213},[203,167595,167596],{"class":205,"line":1284},[203,167597,167598],{"class":213},"        func()\n",[203,167600,167601,167603,167605,167608],{"class":205,"line":1290},[203,167602,32509],{"class":262},[203,167604,214],{"class":213},[203,167606,167607],{"class":318},"\"函数执行结束\"",[203,167609,220],{"class":213},[203,167611,167612],{"class":205,"line":1304},[203,167613,2489],{"emptyLinePlaceholder":131},[203,167615,167616,167618],{"class":205,"line":1310},[203,167617,4179],{"class":209},[203,167619,167620],{"class":213}," wrapper\n",[203,167622,167623],{"class":205,"line":1401},[203,167624,2489],{"emptyLinePlaceholder":131},[203,167626,167627],{"class":205,"line":1407},[203,167628,2489],{"emptyLinePlaceholder":131},[203,167630,167631],{"class":205,"line":1419},[203,167632,167633],{"class":2052},"@log\n",[203,167635,167636,167638,167640],{"class":205,"line":1701},[203,167637,32005],{"class":209},[203,167639,161054],{"class":2052},[203,167641,32011],{"class":213},[203,167643,167644,167646,167648,167650],{"class":205,"line":1706},[203,167645,31357],{"class":262},[203,167647,214],{"class":213},[203,167649,5934],{"class":318},[203,167651,220],{"class":213},[203,167653,167654],{"class":205,"line":1712},[203,167655,2489],{"emptyLinePlaceholder":131},[203,167657,167658],{"class":205,"line":1717},[203,167659,2489],{"emptyLinePlaceholder":131},[203,167661,167662],{"class":205,"line":1731},[203,167663,161089],{"class":213},[19,167665,158332],{},[194,167667,167669],{"className":30436,"code":167668,"language":30438,"meta":27,"style":27},"say_hello = log(say_hello)\n",[200,167670,167671],{"__ignoreMap":27},[203,167672,167673,167676,167678],{"class":205,"line":206},[203,167674,167675],{"class":213},"say_hello ",[203,167677,259],{"class":209},[203,167679,167680],{"class":213}," log(say_hello)\n",[19,167682,167683],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,167685,167687],{"id":167686},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[194,167689,167691],{"className":30436,"code":167690,"language":30438,"meta":27,"style":27},"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",[200,167692,167693,167701,167718,167728,167747,167757,167764,167768,167774,167778,167782,167786,167794,167804,167808,167812],{"__ignoreMap":27},[203,167694,167695,167697,167699],{"class":205,"line":206},[203,167696,32005],{"class":209},[203,167698,87249],{"class":2052},[203,167700,167573],{"class":213},[203,167702,167703,167705,167707,167709,167711,167714,167716],{"class":205,"line":124},[203,167704,30859],{"class":209},[203,167706,167580],{"class":2052},[203,167708,214],{"class":213},[203,167710,669],{"class":209},[203,167712,167713],{"class":213},"args, ",[203,167715,10751],{"class":209},[203,167717,166724],{"class":213},[203,167719,167720,167722,167724,167726],{"class":205,"line":1269},[203,167721,32509],{"class":262},[203,167723,214],{"class":213},[203,167725,167591],{"class":318},[203,167727,220],{"class":213},[203,167729,167730,167733,167735,167738,167740,167742,167744],{"class":205,"line":1284},[203,167731,167732],{"class":213},"        result ",[203,167734,259],{"class":209},[203,167736,167737],{"class":213}," func(",[203,167739,669],{"class":209},[203,167741,167713],{"class":213},[203,167743,10751],{"class":209},[203,167745,167746],{"class":213},"kwargs)\n",[203,167748,167749,167751,167753,167755],{"class":205,"line":1290},[203,167750,32509],{"class":262},[203,167752,214],{"class":213},[203,167754,167607],{"class":318},[203,167756,220],{"class":213},[203,167758,167759,167761],{"class":205,"line":1304},[203,167760,14842],{"class":209},[203,167762,167763],{"class":213}," result\n",[203,167765,167766],{"class":205,"line":1310},[203,167767,2489],{"emptyLinePlaceholder":131},[203,167769,167770,167772],{"class":205,"line":1401},[203,167771,4179],{"class":209},[203,167773,167620],{"class":213},[203,167775,167776],{"class":205,"line":1407},[203,167777,2489],{"emptyLinePlaceholder":131},[203,167779,167780],{"class":205,"line":1419},[203,167781,2489],{"emptyLinePlaceholder":131},[203,167783,167784],{"class":205,"line":1701},[203,167785,167633],{"class":2052},[203,167787,167788,167790,167792],{"class":205,"line":1706},[203,167789,32005],{"class":209},[203,167791,5299],{"class":2052},[203,167793,151151],{"class":213},[203,167795,167796,167798,167800,167802],{"class":205,"line":1712},[203,167797,4179],{"class":209},[203,167799,10959],{"class":213},[203,167801,695],{"class":209},[203,167803,151162],{"class":213},[203,167805,167806],{"class":205,"line":1717},[203,167807,2489],{"emptyLinePlaceholder":131},[203,167809,167810],{"class":205,"line":1731},[203,167811,2489],{"emptyLinePlaceholder":131},[203,167813,167814,167816,167818,167820,167822,167824],{"class":205,"line":1736},[203,167815,30473],{"class":262},[203,167817,166658],{"class":213},[203,167819,660],{"class":262},[203,167821,12525],{"class":213},[203,167823,914],{"class":262},[203,167825,30555],{"class":213},[19,167827,167828,167829,101076,167831,167833],{},"这个写法使用 ",[200,167830,166590],{},[200,167832,166705],{}," 接收原函数的所有参数。",[14,167835,167837],{"id":167836},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,167839,123350],{},[157,167841,167842,167845,167848],{},[160,167843,167844],{},"给定一组学生数据。",[160,167846,167847],{},"封装函数，根据传入规则筛选学生。",[160,167849,167850],{},"筛选及格、优秀、未成年学生。",[19,167852,10125],{},[194,167854,167856],{"className":30436,"code":167855,"language":30438,"meta":27,"style":27},"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",[200,167857,167858,167866,167894,167922,167950,167954,167958,167962,167972,167980,167990,167997,168002,168008,168012,168016,168040,168063,168086,168090,168097,168104],{"__ignoreMap":27},[203,167859,167860,167862,167864],{"class":205,"line":206},[203,167861,159774],{"class":213},[203,167863,259],{"class":209},[203,167865,55505],{"class":213},[203,167867,167868,167870,167872,167874,167876,167878,167880,167882,167884,167886,167888,167890,167892],{"class":205,"line":124},[203,167869,148443],{"class":213},[203,167871,62737],{"class":318},[203,167873,51495],{"class":213},[203,167875,149946],{"class":318},[203,167877,12525],{"class":213},[203,167879,69182],{"class":318},[203,167881,51495],{"class":213},[203,167883,864],{"class":262},[203,167885,12525],{"class":213},[203,167887,151530],{"class":318},[203,167889,51495],{"class":213},[203,167891,1203],{"class":262},[203,167893,5019],{"class":213},[203,167895,167896,167898,167900,167902,167904,167906,167908,167910,167912,167914,167916,167918,167920],{"class":205,"line":1269},[203,167897,148443],{"class":213},[203,167899,62737],{"class":318},[203,167901,51495],{"class":213},[203,167903,150994],{"class":318},[203,167905,12525],{"class":213},[203,167907,69182],{"class":318},[203,167909,51495],{"class":213},[203,167911,839],{"class":262},[203,167913,12525],{"class":213},[203,167915,151530],{"class":318},[203,167917,51495],{"class":213},[203,167919,1025],{"class":262},[203,167921,5019],{"class":213},[203,167923,167924,167926,167928,167930,167932,167934,167936,167938,167940,167942,167944,167946,167948],{"class":205,"line":1284},[203,167925,148443],{"class":213},[203,167927,62737],{"class":318},[203,167929,51495],{"class":213},[203,167931,159789],{"class":318},[203,167933,12525],{"class":213},[203,167935,69182],{"class":318},[203,167937,51495],{"class":213},[203,167939,889],{"class":262},[203,167941,12525],{"class":213},[203,167943,151530],{"class":318},[203,167945,51495],{"class":213},[203,167947,1096],{"class":262},[203,167949,5019],{"class":213},[203,167951,167952],{"class":205,"line":1290},[203,167953,33304],{"class":213},[203,167955,167956],{"class":205,"line":1304},[203,167957,2489],{"emptyLinePlaceholder":131},[203,167959,167960],{"class":205,"line":1310},[203,167961,2489],{"emptyLinePlaceholder":131},[203,167963,167964,167966,167969],{"class":205,"line":1401},[203,167965,32005],{"class":209},[203,167967,167968],{"class":2052}," filter_students",[203,167970,167971],{"class":213},"(students, condition):\n",[203,167973,167974,167976,167978],{"class":205,"line":1407},[203,167975,161281],{"class":213},[203,167977,259],{"class":209},[203,167979,51896],{"class":213},[203,167981,167982,167984,167986,167988],{"class":205,"line":1419},[203,167983,3290],{"class":209},[203,167985,152195],{"class":213},[203,167987,26101],{"class":209},[203,167989,152200],{"class":213},[203,167991,167992,167994],{"class":205,"line":1701},[203,167993,2586],{"class":209},[203,167995,167996],{"class":213}," condition(student):\n",[203,167998,167999],{"class":205,"line":1706},[203,168000,168001],{"class":213},"            result.append(student)\n",[203,168003,168004,168006],{"class":205,"line":1712},[203,168005,4179],{"class":209},[203,168007,167763],{"class":213},[203,168009,168010],{"class":205,"line":1717},[203,168011,2489],{"emptyLinePlaceholder":131},[203,168013,168014],{"class":205,"line":1731},[203,168015,2489],{"emptyLinePlaceholder":131},[203,168017,168018,168020,168022,168025,168027,168030,168032,168034,168036,168038],{"class":205,"line":1736},[203,168019,165759],{"class":213},[203,168021,259],{"class":209},[203,168023,168024],{"class":213}," filter_students(students, ",[203,168026,166944],{"class":209},[203,168028,168029],{"class":213}," s: s[",[203,168031,151530],{"class":318},[203,168033,4532],{"class":213},[203,168035,1799],{"class":209},[203,168037,157895],{"class":262},[203,168039,220],{"class":213},[203,168041,168042,168045,168047,168049,168051,168053,168055,168057,168059,168061],{"class":205,"line":1742},[203,168043,168044],{"class":213},"excellent ",[203,168046,259],{"class":209},[203,168048,168024],{"class":213},[203,168050,166944],{"class":209},[203,168052,168029],{"class":213},[203,168054,151530],{"class":318},[203,168056,4532],{"class":213},[203,168058,1799],{"class":209},[203,168060,157846],{"class":262},[203,168062,220],{"class":213},[203,168064,168065,168068,168070,168072,168074,168076,168078,168080,168082,168084],{"class":205,"line":1763},[203,168066,168067],{"class":213},"under_age ",[203,168069,259],{"class":209},[203,168071,168024],{"class":213},[203,168073,166944],{"class":209},[203,168075,168029],{"class":213},[203,168077,69182],{"class":318},[203,168079,4532],{"class":213},[203,168081,1124],{"class":209},[203,168083,156343],{"class":262},[203,168085,220],{"class":213},[203,168087,168088],{"class":205,"line":1768},[203,168089,2489],{"emptyLinePlaceholder":131},[203,168091,168092,168094],{"class":205,"line":1782},[203,168093,30473],{"class":262},[203,168095,168096],{"class":213},"(passed)\n",[203,168098,168099,168101],{"class":205,"line":1787},[203,168100,30473],{"class":262},[203,168102,168103],{"class":213},"(excellent)\n",[203,168105,168106,168108],{"class":205,"line":1816},[203,168107,30473],{"class":262},[203,168109,168110],{"class":213},"(under_age)\n",[14,168112,168114],{"id":168113},"_715-易错点","7.15 易错点",[157,168116,168117,168120,168128,168133,168144],{},[160,168118,168119],{},"默认参数不要写可变对象。",[160,168121,168122,168124,168125,168127],{},[200,168123,166590],{}," 是元组，",[200,168126,166705],{}," 是字典。",[160,168129,168130,168132],{},[200,168131,166944],{}," 只适合简单表达式。",[160,168134,168135,101076,168137,168139,168140,168143],{},[200,168136,74102],{},[200,168138,80109],{}," 的结果是迭代器，常用 ",[200,168141,168142],{},"list()"," 转换查看。",[160,168145,168146],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168148,168150],{"id":168149},"_716-本章练习","7.16 本章练习",[157,168152,168153,168160,168166,168171,168176],{},[160,168154,168155,168156,168159],{},"写函数 ",[200,168157,168158],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[160,168161,168155,168162,168165],{},[200,168163,168164],{},"print_user(**kwargs)","，输出用户所有字段。",[160,168167,104424,168168,168170],{},[200,168169,166944],{}," 对学生列表按年龄排序。",[160,168172,104424,168173,168175],{},[200,168174,80109],{}," 找出成绩不及格的学生。",[160,168177,168178],{},"写一个装饰器，统计函数执行前后的提示信息。",[5216,168180,168181],{},"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":27,"searchDepth":124,"depth":124,"links":168183},[168184,168185,168186,168187,168188,168189,168193,168194,168195,168196,168201,168202,168203,168204,168205,168206],{"id":166042,"depth":124,"text":166043},{"id":166156,"depth":124,"text":166157},{"id":166245,"depth":124,"text":166246},{"id":166307,"depth":124,"text":166308},{"id":166453,"depth":124,"text":166454},{"id":166580,"depth":124,"text":166581,"children":168190},[168191,168192],{"id":166584,"depth":1269,"text":166585},{"id":166699,"depth":1269,"text":166700},{"id":166780,"depth":124,"text":166781},{"id":166938,"depth":124,"text":166939},{"id":167106,"depth":124,"text":167107},{"id":167188,"depth":124,"text":167189,"children":168197},[168198,168199,168200],{"id":167192,"depth":1269,"text":167193},{"id":167263,"depth":1269,"text":167264},{"id":167340,"depth":1269,"text":167341},{"id":167465,"depth":124,"text":167466},{"id":167555,"depth":124,"text":167556},{"id":167686,"depth":124,"text":167687},{"id":167836,"depth":124,"text":167837},{"id":168113,"depth":124,"text":168114},{"id":168149,"depth":124,"text":168150},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166034,"description":23467},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168213,"title":168214,"body":168215,"description":23467,"extension":129,"meta":170734,"navigation":131,"path":170735,"seo":170736,"stem":170737,"__hash__":170738},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168216,"toc":170709},[168217,168220,168224,168227,168230,168261,168265,168269,168272,168299,168303,168306,168357,168360,168375,168378,168413,168417,168419,168443,168446,168506,168510,168514,168517,168574,168577,168597,168601,168604,168667,168671,168674,168730,168737,168761,168765,168768,168831,168835,168840,168891,168894,168898,168903,168970,168973,169055,169059,169064,169115,169118,169122,169125,169128,169136,169139,169185,169188,169234,169238,169244,169288,169291,169337,169340,169380,169383,169444,169448,169451,169541,169544,169686,169689,169756,169760,169763,169766,169907,169910,169988,169991,170167,170171,170173,170184,170186,170385,170389,170633,170637,170671,170675,170706],[10,168218,168214],{"id":168219},"_8-文件操作",[14,168221,168223],{"id":168222},"_81-文件操作的意义","8.1 文件操作的意义",[19,168225,168226],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168228,168229],{},"常见文件类型：",[157,168231,168232,168238,168244,168250,168256],{},[160,168233,168234,168237],{},[200,168235,168236],{},".txt","：普通文本。",[160,168239,168240,168243],{},[200,168241,168242],{},".csv","：表格文本。",[160,168245,168246,168249],{},[200,168247,168248],{},".json","：结构化数据。",[160,168251,168252,168255],{},[200,168253,168254],{},".log","：日志文件。",[160,168257,168258,168260],{},[200,168259,146410],{},"：Python 源代码。",[14,168262,168264],{"id":168263},"_82-路径","8.2 路径",[174,168266,168268],{"id":168267},"_821-相对路径","8.2.1 相对路径",[19,168270,168271],{},"相对当前运行目录：",[194,168273,168275],{"className":30436,"code":168274,"language":30438,"meta":27,"style":27},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[200,168276,168277],{"__ignoreMap":27},[203,168278,168279,168281,168283,168285,168287,168289,168291,168293,168295,168297],{"class":205,"line":206},[203,168280,86973],{"class":262},[203,168282,214],{"class":213},[203,168284,146854],{"class":318},[203,168286,12525],{"class":213},[203,168288,146859],{"class":318},[203,168290,12525],{"class":213},[203,168292,146864],{"class":5306},[203,168294,259],{"class":209},[203,168296,146869],{"class":318},[203,168298,220],{"class":213},[174,168300,168302],{"id":168301},"_822-绝对路径","8.2.2 绝对路径",[19,168304,168305],{},"从根目录或盘符开始：",[194,168307,168309],{"className":30436,"code":168308,"language":30438,"meta":27,"style":27},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[200,168310,168311,168334],{"__ignoreMap":27},[203,168312,168313,168315,168317,168320,168322,168324,168326,168328,168330,168332],{"class":205,"line":206},[203,168314,86973],{"class":262},[203,168316,214],{"class":213},[203,168318,168319],{"class":318},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[203,168321,12525],{"class":213},[203,168323,146859],{"class":318},[203,168325,12525],{"class":213},[203,168327,146864],{"class":5306},[203,168329,259],{"class":209},[203,168331,146869],{"class":318},[203,168333,220],{"class":213},[203,168335,168336,168338,168340,168343,168345,168347,168349,168351,168353,168355],{"class":205,"line":124},[203,168337,86973],{"class":262},[203,168339,214],{"class":213},[203,168341,168342],{"class":318},"\"D:\u002Fdata\u002Fdata.txt\"",[203,168344,12525],{"class":213},[203,168346,146859],{"class":318},[203,168348,12525],{"class":213},[203,168350,146864],{"class":5306},[203,168352,259],{"class":209},[203,168354,146869],{"class":318},[203,168356,220],{"class":213},[19,168358,168359],{},"Windows 路径建议写成：",[194,168361,168363],{"className":30436,"code":168362,"language":30438,"meta":27,"style":27},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[200,168364,168365],{"__ignoreMap":27},[203,168366,168367,168370,168372],{"class":205,"line":206},[203,168368,168369],{"class":213},"path ",[203,168371,259],{"class":209},[203,168373,168374],{"class":318}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168376,168377],{},"或原始字符串：",[194,168379,168381],{"className":30436,"code":168380,"language":30438,"meta":27,"style":27},"path = r\"D:\\data\\data.txt\"\n",[200,168382,168383],{"__ignoreMap":27},[203,168384,168385,168387,168389,168391,168393,168396,168399,168402,168404,168406,168408,168411],{"class":205,"line":206},[203,168386,168369],{"class":213},[203,168388,259],{"class":209},[203,168390,17211],{"class":209},[203,168392,465],{"class":318},[203,168394,168395],{"class":48035},"D:",[203,168397,168398],{"class":262},"\\d",[203,168400,168401],{"class":48035},"ata",[203,168403,168398],{"class":262},[203,168405,168401],{"class":48035},[203,168407,772],{"class":262},[203,168409,168410],{"class":48035},"txt",[203,168412,25191],{"class":318},[14,168414,168416],{"id":168415},"_83-open函数","8.3 open函数",[19,168418,5271],{},[194,168420,168422],{"className":30436,"code":168421,"language":30438,"meta":27,"style":27},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[200,168423,168424],{"__ignoreMap":27},[203,168425,168426,168428,168430,168432,168435,168437,168439,168441],{"class":205,"line":206},[203,168427,45412],{"class":5306},[203,168429,13654],{"class":209},[203,168431,146849],{"class":262},[203,168433,168434],{"class":213},"(文件路径, 打开模式, ",[203,168436,146864],{"class":5306},[203,168438,259],{"class":209},[203,168440,146869],{"class":318},[203,168442,220],{"class":213},[19,168444,168445],{},"常见模式：",[351,168447,168448,168457],{},[354,168449,168450],{},[357,168451,168452,168455],{},[360,168453,168454],{},"模式",[360,168456,25927],{},[398,168458,168459,168468,168477,168486,168496],{},[357,168460,168461,168465],{},[403,168462,168463],{},[200,168464,884],{},[403,168466,168467],{},"只读，文件不存在会报错",[357,168469,168470,168474],{},[403,168471,168472],{},[200,168473,1009],{},[403,168475,168476],{},"只写，文件不存在会创建，存在会清空",[357,168478,168479,168483],{},[403,168480,168481],{},[200,168482,452],{},[403,168484,168485],{},"追加，文件不存在会创建",[357,168487,168488,168493],{},[403,168489,168490],{},[200,168491,168492],{},"rb",[403,168494,168495],{},"二进制只读",[357,168497,168498,168503],{},[403,168499,168500],{},[200,168501,168502],{},"wb",[403,168504,168505],{},"二进制只写",[14,168507,168509],{"id":168508},"_84-读取文件","8.4 读取文件",[174,168511,168513],{"id":168512},"_841-read","8.4.1 read",[19,168515,168516],{},"一次读取全部内容：",[194,168518,168520],{"className":30436,"code":168519,"language":30438,"meta":27,"style":27},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[200,168521,168522,168548,168560,168567],{"__ignoreMap":27},[203,168523,168524,168526,168528,168530,168532,168534,168536,168538,168540,168542,168544,168546],{"class":205,"line":206},[203,168525,45412],{"class":5306},[203,168527,13654],{"class":209},[203,168529,146849],{"class":262},[203,168531,214],{"class":213},[203,168533,146854],{"class":318},[203,168535,12525],{"class":213},[203,168537,146859],{"class":318},[203,168539,12525],{"class":213},[203,168541,146864],{"class":5306},[203,168543,259],{"class":209},[203,168545,146869],{"class":318},[203,168547,220],{"class":213},[203,168549,168550,168553,168555,168557],{"class":205,"line":124},[203,168551,168552],{"class":213},"content ",[203,168554,259],{"class":209},[203,168556,148211],{"class":5306},[203,168558,168559],{"class":213},".read()\n",[203,168561,168562,168564],{"class":205,"line":1269},[203,168563,30473],{"class":262},[203,168565,168566],{"class":213},"(content)\n",[203,168568,168569,168571],{"class":205,"line":1284},[203,168570,45412],{"class":5306},[203,168572,168573],{"class":213},".close()\n",[19,168575,168576],{},"可以指定读取字符数：",[194,168578,168580],{"className":30436,"code":168579,"language":30438,"meta":27,"style":27},"content = file.read(10)\n",[200,168581,168582],{"__ignoreMap":27},[203,168583,168584,168586,168588,168590,168593,168595],{"class":205,"line":206},[203,168585,168552],{"class":213},[203,168587,259],{"class":209},[203,168589,148211],{"class":5306},[203,168591,168592],{"class":213},".read(",[203,168594,660],{"class":262},[203,168596,220],{"class":213},[174,168598,168600],{"id":168599},"_842-readline","8.4.2 readline",[19,168602,168603],{},"一次读取一行：",[194,168605,168607],{"className":30436,"code":168606,"language":30438,"meta":27,"style":27},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[200,168608,168609,168635,168639,168650,168657,168661],{"__ignoreMap":27},[203,168610,168611,168613,168615,168617,168619,168621,168623,168625,168627,168629,168631,168633],{"class":205,"line":206},[203,168612,45412],{"class":5306},[203,168614,13654],{"class":209},[203,168616,146849],{"class":262},[203,168618,214],{"class":213},[203,168620,146854],{"class":318},[203,168622,12525],{"class":213},[203,168624,146859],{"class":318},[203,168626,12525],{"class":213},[203,168628,146864],{"class":5306},[203,168630,259],{"class":209},[203,168632,146869],{"class":318},[203,168634,220],{"class":213},[203,168636,168637],{"class":205,"line":124},[203,168638,2489],{"emptyLinePlaceholder":131},[203,168640,168641,168643,168645,168647],{"class":205,"line":1269},[203,168642,147310],{"class":213},[203,168644,259],{"class":209},[203,168646,148211],{"class":5306},[203,168648,168649],{"class":213},".readline()\n",[203,168651,168652,168654],{"class":205,"line":1284},[203,168653,30473],{"class":262},[203,168655,168656],{"class":213},"(line)\n",[203,168658,168659],{"class":205,"line":1290},[203,168660,2489],{"emptyLinePlaceholder":131},[203,168662,168663,168665],{"class":205,"line":1304},[203,168664,45412],{"class":5306},[203,168666,168573],{"class":213},[174,168668,168670],{"id":168669},"_843-readlines","8.4.3 readlines",[19,168672,168673],{},"读取所有行，返回列表：",[194,168675,168677],{"className":30436,"code":168676,"language":30438,"meta":27,"style":27},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[200,168678,168679,168705,168717,168724],{"__ignoreMap":27},[203,168680,168681,168683,168685,168687,168689,168691,168693,168695,168697,168699,168701,168703],{"class":205,"line":206},[203,168682,45412],{"class":5306},[203,168684,13654],{"class":209},[203,168686,146849],{"class":262},[203,168688,214],{"class":213},[203,168690,146854],{"class":318},[203,168692,12525],{"class":213},[203,168694,146859],{"class":318},[203,168696,12525],{"class":213},[203,168698,146864],{"class":5306},[203,168700,259],{"class":209},[203,168702,146869],{"class":318},[203,168704,220],{"class":213},[203,168706,168707,168710,168712,168714],{"class":205,"line":124},[203,168708,168709],{"class":213},"lines ",[203,168711,259],{"class":209},[203,168713,148211],{"class":5306},[203,168715,168716],{"class":213},".readlines()\n",[203,168718,168719,168721],{"class":205,"line":1269},[203,168720,30473],{"class":262},[203,168722,168723],{"class":213},"(lines)\n",[203,168725,168726,168728],{"class":205,"line":1284},[203,168727,45412],{"class":5306},[203,168729,168573],{"class":213},[19,168731,168732,168733,168736],{},"每一行通常带有换行符，可以用 ",[200,168734,168735],{},"strip()"," 去掉：",[194,168738,168740],{"className":30436,"code":168739,"language":30438,"meta":27,"style":27},"for line in lines:\n    print(line.strip())\n",[200,168741,168742,168754],{"__ignoreMap":27},[203,168743,168744,168746,168749,168751],{"class":205,"line":206},[203,168745,3114],{"class":209},[203,168747,168748],{"class":213}," line ",[203,168750,26101],{"class":209},[203,168752,168753],{"class":213}," lines:\n",[203,168755,168756,168758],{"class":205,"line":124},[203,168757,31357],{"class":262},[203,168759,168760],{"class":213},"(line.strip())\n",[174,168762,168764],{"id":168763},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,168766,168767],{},"推荐读取大文件时使用：",[194,168769,168771],{"className":30436,"code":168770,"language":30438,"meta":27,"style":27},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[200,168772,168773,168799,168803,168815,168821,168825],{"__ignoreMap":27},[203,168774,168775,168777,168779,168781,168783,168785,168787,168789,168791,168793,168795,168797],{"class":205,"line":206},[203,168776,45412],{"class":5306},[203,168778,13654],{"class":209},[203,168780,146849],{"class":262},[203,168782,214],{"class":213},[203,168784,146854],{"class":318},[203,168786,12525],{"class":213},[203,168788,146859],{"class":318},[203,168790,12525],{"class":213},[203,168792,146864],{"class":5306},[203,168794,259],{"class":209},[203,168796,146869],{"class":318},[203,168798,220],{"class":213},[203,168800,168801],{"class":205,"line":124},[203,168802,2489],{"emptyLinePlaceholder":131},[203,168804,168805,168807,168809,168811,168813],{"class":205,"line":1269},[203,168806,3114],{"class":209},[203,168808,168748],{"class":213},[203,168810,26101],{"class":209},[203,168812,148211],{"class":5306},[203,168814,3828],{"class":213},[203,168816,168817,168819],{"class":205,"line":1284},[203,168818,31357],{"class":262},[203,168820,168760],{"class":213},[203,168822,168823],{"class":205,"line":1290},[203,168824,2489],{"emptyLinePlaceholder":131},[203,168826,168827,168829],{"class":205,"line":1304},[203,168828,45412],{"class":5306},[203,168830,168573],{"class":213},[14,168832,168834],{"id":168833},"_85-with语句","8.5 with语句",[19,168836,168837,168839],{},[200,168838,107891],{}," 会自动关闭文件，推荐使用。",[194,168841,168843],{"className":30436,"code":168842,"language":30438,"meta":27,"style":27},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[200,168844,168845,168875,168885],{"__ignoreMap":27},[203,168846,168847,168849,168851,168853,168855,168857,168859,168861,168863,168865,168867,168869,168871,168873],{"class":205,"line":206},[203,168848,107891],{"class":209},[203,168850,146849],{"class":262},[203,168852,214],{"class":213},[203,168854,146854],{"class":318},[203,168856,12525],{"class":213},[203,168858,146859],{"class":318},[203,168860,12525],{"class":213},[203,168862,146864],{"class":5306},[203,168864,259],{"class":209},[203,168866,146869],{"class":318},[203,168868,13804],{"class":213},[203,168870,31441],{"class":209},[203,168872,148211],{"class":5306},[203,168874,3828],{"class":213},[203,168876,168877,168879,168881,168883],{"class":205,"line":124},[203,168878,146881],{"class":213},[203,168880,259],{"class":209},[203,168882,148211],{"class":5306},[203,168884,168559],{"class":213},[203,168886,168887,168889],{"class":205,"line":1269},[203,168888,31357],{"class":262},[203,168890,168566],{"class":213},[19,168892,168893],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,168895,168897],{"id":168896},"_86-写入文件","8.6 写入文件",[19,168899,168900,168902],{},[200,168901,1009],{}," 模式会清空原文件。",[194,168904,168906],{"className":30436,"code":168905,"language":30438,"meta":27,"style":27},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[200,168907,168908,168938,168955],{"__ignoreMap":27},[203,168909,168910,168912,168914,168916,168918,168920,168922,168924,168926,168928,168930,168932,168934,168936],{"class":205,"line":206},[203,168911,107891],{"class":209},[203,168913,146849],{"class":262},[203,168915,214],{"class":213},[203,168917,146854],{"class":318},[203,168919,12525],{"class":213},[203,168921,152034],{"class":318},[203,168923,12525],{"class":213},[203,168925,146864],{"class":5306},[203,168927,259],{"class":209},[203,168929,146869],{"class":318},[203,168931,13804],{"class":213},[203,168933,31441],{"class":209},[203,168935,148211],{"class":5306},[203,168937,3828],{"class":213},[203,168939,168940,168943,168946,168949,168951,168953],{"class":205,"line":124},[203,168941,168942],{"class":5306},"    file",[203,168944,168945],{"class":213},".write(",[203,168947,168948],{"class":318},"\"hello",[203,168950,156583],{"class":262},[203,168952,465],{"class":318},[203,168954,220],{"class":213},[203,168956,168957,168959,168961,168964,168966,168968],{"class":205,"line":1269},[203,168958,168942],{"class":5306},[203,168960,168945],{"class":213},[203,168962,168963],{"class":318},"\"python",[203,168965,156583],{"class":262},[203,168967,465],{"class":318},[203,168969,220],{"class":213},[19,168971,168972],{},"写入多行：",[194,168974,168976],{"className":30436,"code":168975,"language":30438,"meta":27,"style":27},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[200,168977,168978,169013,169017,169048],{"__ignoreMap":27},[203,168979,168980,168982,168984,168986,168989,168991,168993,168995,168998,169000,169002,169004,169007,169009,169011],{"class":205,"line":206},[203,168981,168709],{"class":213},[203,168983,259],{"class":209},[203,168985,52284],{"class":213},[203,168987,168988],{"class":318},"\"小明,18",[203,168990,156583],{"class":262},[203,168992,465],{"class":318},[203,168994,12525],{"class":213},[203,168996,168997],{"class":318},"\"小红,17",[203,168999,156583],{"class":262},[203,169001,465],{"class":318},[203,169003,12525],{"class":213},[203,169005,169006],{"class":318},"\"小刚,19",[203,169008,156583],{"class":262},[203,169010,465],{"class":318},[203,169012,33304],{"class":213},[203,169014,169015],{"class":205,"line":124},[203,169016,2489],{"emptyLinePlaceholder":131},[203,169018,169019,169021,169023,169025,169028,169030,169032,169034,169036,169038,169040,169042,169044,169046],{"class":205,"line":1269},[203,169020,107891],{"class":209},[203,169022,146849],{"class":262},[203,169024,214],{"class":213},[203,169026,169027],{"class":318},"\"students.txt\"",[203,169029,12525],{"class":213},[203,169031,152034],{"class":318},[203,169033,12525],{"class":213},[203,169035,146864],{"class":5306},[203,169037,259],{"class":209},[203,169039,146869],{"class":318},[203,169041,13804],{"class":213},[203,169043,31441],{"class":209},[203,169045,148211],{"class":5306},[203,169047,3828],{"class":213},[203,169049,169050,169052],{"class":205,"line":1284},[203,169051,168942],{"class":5306},[203,169053,169054],{"class":213},".writelines(lines)\n",[14,169056,169058],{"id":169057},"_87-追加文件","8.7 追加文件",[19,169060,169061,169063],{},[200,169062,452],{}," 模式不会清空原内容，而是在末尾追加。",[194,169065,169067],{"className":30436,"code":169066,"language":30438,"meta":27,"style":27},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[200,169068,169069,169100],{"__ignoreMap":27},[203,169070,169071,169073,169075,169077,169080,169082,169084,169086,169088,169090,169092,169094,169096,169098],{"class":205,"line":206},[203,169072,107891],{"class":209},[203,169074,146849],{"class":262},[203,169076,214],{"class":213},[203,169078,169079],{"class":318},"\"log.txt\"",[203,169081,12525],{"class":213},[203,169083,165383],{"class":318},[203,169085,12525],{"class":213},[203,169087,146864],{"class":5306},[203,169089,259],{"class":209},[203,169091,146869],{"class":318},[203,169093,13804],{"class":213},[203,169095,31441],{"class":209},[203,169097,148211],{"class":5306},[203,169099,3828],{"class":213},[203,169101,169102,169104,169106,169109,169111,169113],{"class":205,"line":124},[203,169103,168942],{"class":5306},[203,169105,168945],{"class":213},[203,169107,169108],{"class":318},"\"程序启动",[203,169110,156583],{"class":262},[203,169112,465],{"class":318},[203,169114,220],{"class":213},[19,169116,169117],{},"日志类文件常用追加模式。",[14,169119,169121],{"id":169120},"_88-文件编码","8.8 文件编码",[19,169123,169124],{},"编码决定文字如何保存为字节。",[19,169126,169127],{},"常见编码：",[157,169129,169130,169133],{},[160,169131,169132],{},"UTF-8：推荐。",[160,169134,169135],{},"GBK：部分 Windows 中文文件常见。",[19,169137,169138],{},"读取文件乱码时，可以尝试：",[194,169140,169142],{"className":30436,"code":169141,"language":30438,"meta":27,"style":27},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[200,169143,169144,169175],{"__ignoreMap":27},[203,169145,169146,169148,169150,169152,169154,169156,169158,169160,169162,169164,169167,169169,169171,169173],{"class":205,"line":206},[203,169147,107891],{"class":209},[203,169149,146849],{"class":262},[203,169151,214],{"class":213},[203,169153,146854],{"class":318},[203,169155,12525],{"class":213},[203,169157,146859],{"class":318},[203,169159,12525],{"class":213},[203,169161,146864],{"class":5306},[203,169163,259],{"class":209},[203,169165,169166],{"class":318},"\"gbk\"",[203,169168,13804],{"class":213},[203,169170,31441],{"class":209},[203,169172,148211],{"class":5306},[203,169174,3828],{"class":213},[203,169176,169177,169179,169181,169183],{"class":205,"line":124},[203,169178,146881],{"class":213},[203,169180,259],{"class":209},[203,169182,148211],{"class":5306},[203,169184,168559],{"class":213},[19,169186,169187],{},"写文件时建议统一 UTF-8：",[194,169189,169191],{"className":30436,"code":169190,"language":30438,"meta":27,"style":27},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[200,169192,169193,169223],{"__ignoreMap":27},[203,169194,169195,169197,169199,169201,169203,169205,169207,169209,169211,169213,169215,169217,169219,169221],{"class":205,"line":206},[203,169196,107891],{"class":209},[203,169198,146849],{"class":262},[203,169200,214],{"class":213},[203,169202,146854],{"class":318},[203,169204,12525],{"class":213},[203,169206,152034],{"class":318},[203,169208,12525],{"class":213},[203,169210,146864],{"class":5306},[203,169212,259],{"class":209},[203,169214,146869],{"class":318},[203,169216,13804],{"class":213},[203,169218,31441],{"class":209},[203,169220,148211],{"class":5306},[203,169222,3828],{"class":213},[203,169224,169225,169227,169229,169232],{"class":205,"line":124},[203,169226,168942],{"class":5306},[203,169228,168945],{"class":213},[203,169230,169231],{"class":318},"\"中文内容\"",[203,169233,220],{"class":213},[14,169235,169237],{"id":169236},"_89-pathlib","8.9 pathlib",[19,169239,169240,169243],{},[200,169241,169242],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[194,169245,169247],{"className":30436,"code":169246,"language":30438,"meta":27,"style":27},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[200,169248,169249,169259,169263,169281],{"__ignoreMap":27},[203,169250,169251,169253,169255,169257],{"class":205,"line":206},[203,169252,30795],{"class":209},[203,169254,108369],{"class":213},[203,169256,30450],{"class":209},[203,169258,108374],{"class":213},[203,169260,169261],{"class":205,"line":124},[203,169262,2489],{"emptyLinePlaceholder":131},[203,169264,169265,169267,169269,169271,169274,169276,169278],{"class":205,"line":1269},[203,169266,168369],{"class":213},[203,169268,259],{"class":209},[203,169270,108603],{"class":213},[203,169272,169273],{"class":318},"\"data\"",[203,169275,13804],{"class":213},[203,169277,798],{"class":209},[203,169279,169280],{"class":318}," \"students.txt\"\n",[203,169282,169283,169285],{"class":205,"line":1284},[203,169284,30473],{"class":262},[203,169286,169287],{"class":213},"(path)\n",[19,169289,169290],{},"创建目录：",[194,169292,169294],{"className":30436,"code":169293,"language":30438,"meta":27,"style":27},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[200,169295,169296,169306,169310,169323],{"__ignoreMap":27},[203,169297,169298,169300,169302,169304],{"class":205,"line":206},[203,169299,30795],{"class":209},[203,169301,108369],{"class":213},[203,169303,30450],{"class":209},[203,169305,108374],{"class":213},[203,169307,169308],{"class":205,"line":124},[203,169309,2489],{"emptyLinePlaceholder":131},[203,169311,169312,169315,169317,169319,169321],{"class":205,"line":1269},[203,169313,169314],{"class":213},"data_dir ",[203,169316,259],{"class":209},[203,169318,108603],{"class":213},[203,169320,169273],{"class":318},[203,169322,220],{"class":213},[203,169324,169325,169328,169331,169333,169335],{"class":205,"line":1284},[203,169326,169327],{"class":213},"data_dir.mkdir(",[203,169329,169330],{"class":5306},"exist_ok",[203,169332,259],{"class":209},[203,169334,31534],{"class":262},[203,169336,220],{"class":213},[19,169338,169339],{},"判断文件是否存在：",[194,169341,169343],{"className":30436,"code":169342,"language":30438,"meta":27,"style":27},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[200,169344,169345,169358,169362,169369],{"__ignoreMap":27},[203,169346,169347,169349,169351,169353,169356],{"class":205,"line":206},[203,169348,168369],{"class":213},[203,169350,259],{"class":209},[203,169352,108603],{"class":213},[203,169354,169355],{"class":318},"\"data\u002Fstudents.txt\"",[203,169357,220],{"class":213},[203,169359,169360],{"class":205,"line":124},[203,169361,2489],{"emptyLinePlaceholder":131},[203,169363,169364,169366],{"class":205,"line":1269},[203,169365,1620],{"class":209},[203,169367,169368],{"class":213}," path.exists():\n",[203,169370,169371,169373,169375,169378],{"class":205,"line":1284},[203,169372,31357],{"class":262},[203,169374,214],{"class":213},[203,169376,169377],{"class":318},"\"文件存在\"",[203,169379,220],{"class":213},[19,169381,169382],{},"读写文本：",[194,169384,169386],{"className":30436,"code":169385,"language":30438,"meta":27,"style":27},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[200,169387,169388,169400,169404,169421,169438],{"__ignoreMap":27},[203,169389,169390,169392,169394,169396,169398],{"class":205,"line":206},[203,169391,168369],{"class":213},[203,169393,259],{"class":209},[203,169395,108603],{"class":213},[203,169397,146854],{"class":318},[203,169399,220],{"class":213},[203,169401,169402],{"class":205,"line":124},[203,169403,2489],{"emptyLinePlaceholder":131},[203,169405,169406,169409,169411,169413,169415,169417,169419],{"class":205,"line":1269},[203,169407,169408],{"class":213},"path.write_text(",[203,169410,145934],{"class":318},[203,169412,12525],{"class":213},[203,169414,146864],{"class":5306},[203,169416,259],{"class":209},[203,169418,146869],{"class":318},[203,169420,220],{"class":213},[203,169422,169423,169425,169427,169430,169432,169434,169436],{"class":205,"line":1284},[203,169424,168552],{"class":213},[203,169426,259],{"class":209},[203,169428,169429],{"class":213}," path.read_text(",[203,169431,146864],{"class":5306},[203,169433,259],{"class":209},[203,169435,146869],{"class":318},[203,169437,220],{"class":213},[203,169439,169440,169442],{"class":205,"line":1290},[203,169441,30473],{"class":262},[203,169443,168566],{"class":213},[14,169445,169447],{"id":169446},"_810-json文件","8.10 JSON文件",[19,169449,169450],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[194,169452,169454],{"className":30436,"code":169453,"language":30438,"meta":27,"style":27},"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",[200,169455,169456,169462,169466,169474,169484,169494,169502,169506,169510,169535],{"__ignoreMap":27},[203,169457,169458,169460],{"class":205,"line":206},[203,169459,30450],{"class":209},[203,169461,147149],{"class":213},[203,169463,169464],{"class":205,"line":124},[203,169465,2489],{"emptyLinePlaceholder":131},[203,169467,169468,169470,169472],{"class":205,"line":1269},[203,169469,149539],{"class":213},[203,169471,259],{"class":209},[203,169473,15662],{"class":213},[203,169475,169476,169478,169480,169482],{"class":205,"line":1284},[203,169477,147078],{"class":318},[203,169479,51495],{"class":213},[203,169481,149946],{"class":318},[203,169483,31524],{"class":213},[203,169485,169486,169488,169490,169492],{"class":205,"line":1290},[203,169487,164595],{"class":318},[203,169489,51495],{"class":213},[203,169491,864],{"class":262},[203,169493,31524],{"class":213},[203,169495,169496,169498,169500],{"class":205,"line":1304},[203,169497,164606],{"class":318},[203,169499,51495],{"class":213},[203,169501,164611],{"class":262},[203,169503,169504],{"class":205,"line":1310},[203,169505,1654],{"class":213},[203,169507,169508],{"class":205,"line":1401},[203,169509,2489],{"emptyLinePlaceholder":131},[203,169511,169512,169514,169516,169519,169521,169523,169525,169527,169529,169531,169533],{"class":205,"line":1407},[203,169513,156502],{"class":213},[203,169515,259],{"class":209},[203,169517,169518],{"class":213}," json.dumps(student, ",[203,169520,147195],{"class":5306},[203,169522,259],{"class":209},[203,169524,34045],{"class":262},[203,169526,12525],{"class":213},[203,169528,152070],{"class":5306},[203,169530,259],{"class":209},[203,169532,291],{"class":262},[203,169534,220],{"class":213},[203,169536,169537,169539],{"class":205,"line":1419},[203,169538,30473],{"class":262},[203,169540,164129],{"class":213},[19,169542,169543],{},"写入 JSON 文件：",[194,169545,169547],{"className":30436,"code":169546,"language":30438,"meta":27,"style":27},"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",[200,169548,169549,169555,169559,169567,169595,169623,169627,169631,169661],{"__ignoreMap":27},[203,169550,169551,169553],{"class":205,"line":206},[203,169552,30450],{"class":209},[203,169554,147149],{"class":213},[203,169556,169557],{"class":205,"line":124},[203,169558,2489],{"emptyLinePlaceholder":131},[203,169560,169561,169563,169565],{"class":205,"line":1269},[203,169562,159774],{"class":213},[203,169564,259],{"class":209},[203,169566,55505],{"class":213},[203,169568,169569,169571,169573,169575,169577,169579,169581,169583,169585,169587,169589,169591,169593],{"class":205,"line":1284},[203,169570,148443],{"class":213},[203,169572,62737],{"class":318},[203,169574,51495],{"class":213},[203,169576,149946],{"class":318},[203,169578,12525],{"class":213},[203,169580,69182],{"class":318},[203,169582,51495],{"class":213},[203,169584,864],{"class":262},[203,169586,12525],{"class":213},[203,169588,151530],{"class":318},[203,169590,51495],{"class":213},[203,169592,1203],{"class":262},[203,169594,5019],{"class":213},[203,169596,169597,169599,169601,169603,169605,169607,169609,169611,169613,169615,169617,169619,169621],{"class":205,"line":1290},[203,169598,148443],{"class":213},[203,169600,62737],{"class":318},[203,169602,51495],{"class":213},[203,169604,150994],{"class":318},[203,169606,12525],{"class":213},[203,169608,69182],{"class":318},[203,169610,51495],{"class":213},[203,169612,839],{"class":262},[203,169614,12525],{"class":213},[203,169616,151530],{"class":318},[203,169618,51495],{"class":213},[203,169620,1025],{"class":262},[203,169622,5019],{"class":213},[203,169624,169625],{"class":205,"line":1304},[203,169626,33304],{"class":213},[203,169628,169629],{"class":205,"line":1310},[203,169630,2489],{"emptyLinePlaceholder":131},[203,169632,169633,169635,169637,169639,169641,169643,169645,169647,169649,169651,169653,169655,169657,169659],{"class":205,"line":1401},[203,169634,107891],{"class":209},[203,169636,146849],{"class":262},[203,169638,214],{"class":213},[203,169640,151889],{"class":318},[203,169642,12525],{"class":213},[203,169644,152034],{"class":318},[203,169646,12525],{"class":213},[203,169648,146864],{"class":5306},[203,169650,259],{"class":209},[203,169652,146869],{"class":318},[203,169654,13804],{"class":213},[203,169656,31441],{"class":209},[203,169658,148211],{"class":5306},[203,169660,3828],{"class":213},[203,169662,169663,169666,169668,169670,169672,169674,169676,169678,169680,169682,169684],{"class":205,"line":1407},[203,169664,169665],{"class":213},"    json.dump(students, ",[203,169667,45412],{"class":5306},[203,169669,12525],{"class":213},[203,169671,147195],{"class":5306},[203,169673,259],{"class":209},[203,169675,34045],{"class":262},[203,169677,12525],{"class":213},[203,169679,152070],{"class":5306},[203,169681,259],{"class":209},[203,169683,291],{"class":262},[203,169685,220],{"class":213},[19,169687,169688],{},"读取 JSON 文件：",[194,169690,169692],{"className":30436,"code":169691,"language":30438,"meta":27,"style":27},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[200,169693,169694,169700,169704,169734,169746,169750],{"__ignoreMap":27},[203,169695,169696,169698],{"class":205,"line":206},[203,169697,30450],{"class":209},[203,169699,147149],{"class":213},[203,169701,169702],{"class":205,"line":124},[203,169703,2489],{"emptyLinePlaceholder":131},[203,169705,169706,169708,169710,169712,169714,169716,169718,169720,169722,169724,169726,169728,169730,169732],{"class":205,"line":1269},[203,169707,107891],{"class":209},[203,169709,146849],{"class":262},[203,169711,214],{"class":213},[203,169713,151889],{"class":318},[203,169715,12525],{"class":213},[203,169717,146859],{"class":318},[203,169719,12525],{"class":213},[203,169721,146864],{"class":5306},[203,169723,259],{"class":209},[203,169725,146869],{"class":318},[203,169727,13804],{"class":213},[203,169729,31441],{"class":209},[203,169731,148211],{"class":5306},[203,169733,3828],{"class":213},[203,169735,169736,169738,169740,169742,169744],{"class":205,"line":1284},[203,169737,153095],{"class":213},[203,169739,259],{"class":209},[203,169741,148222],{"class":213},[203,169743,45412],{"class":5306},[203,169745,220],{"class":213},[203,169747,169748],{"class":205,"line":1290},[203,169749,2489],{"emptyLinePlaceholder":131},[203,169751,169752,169754],{"class":205,"line":1304},[203,169753,30473],{"class":262},[203,169755,165053],{"class":213},[14,169757,169759],{"id":169758},"_811-csv文件","8.11 CSV文件",[19,169761,169762],{},"CSV 是逗号分隔值，常用于表格数据。",[19,169764,169765],{},"写入 CSV：",[194,169767,169769],{"className":30436,"code":169768,"language":30438,"meta":27,"style":27},"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",[200,169770,169771,169778,169782,169790,169808,169824,169840,169844,169848,169888,169902],{"__ignoreMap":27},[203,169772,169773,169775],{"class":205,"line":206},[203,169774,30450],{"class":209},[203,169776,169777],{"class":213}," csv\n",[203,169779,169780],{"class":205,"line":124},[203,169781,2489],{"emptyLinePlaceholder":131},[203,169783,169784,169786,169788],{"class":205,"line":1269},[203,169785,159774],{"class":213},[203,169787,259],{"class":209},[203,169789,55505],{"class":213},[203,169791,169792,169795,169797,169799,169801,169803,169806],{"class":205,"line":1284},[203,169793,169794],{"class":213},"    [",[203,169796,73157],{"class":318},[203,169798,12525],{"class":213},[203,169800,73190],{"class":318},[203,169802,12525],{"class":213},[203,169804,169805],{"class":318},"\"成绩\"",[203,169807,87894],{"class":213},[203,169809,169810,169812,169814,169816,169818,169820,169822],{"class":205,"line":1290},[203,169811,169794],{"class":213},[203,169813,149946],{"class":318},[203,169815,12525],{"class":213},[203,169817,864],{"class":262},[203,169819,12525],{"class":213},[203,169821,1203],{"class":262},[203,169823,87894],{"class":213},[203,169825,169826,169828,169830,169832,169834,169836,169838],{"class":205,"line":1304},[203,169827,169794],{"class":213},[203,169829,150994],{"class":318},[203,169831,12525],{"class":213},[203,169833,839],{"class":262},[203,169835,12525],{"class":213},[203,169837,1025],{"class":262},[203,169839,87894],{"class":213},[203,169841,169842],{"class":205,"line":1310},[203,169843,33304],{"class":213},[203,169845,169846],{"class":205,"line":1401},[203,169847,2489],{"emptyLinePlaceholder":131},[203,169849,169850,169852,169854,169856,169859,169861,169863,169865,169867,169869,169871,169873,169876,169878,169880,169882,169884,169886],{"class":205,"line":1407},[203,169851,107891],{"class":209},[203,169853,146849],{"class":262},[203,169855,214],{"class":213},[203,169857,169858],{"class":318},"\"students.csv\"",[203,169860,12525],{"class":213},[203,169862,152034],{"class":318},[203,169864,12525],{"class":213},[203,169866,146864],{"class":5306},[203,169868,259],{"class":209},[203,169870,146869],{"class":318},[203,169872,12525],{"class":213},[203,169874,169875],{"class":5306},"newline",[203,169877,259],{"class":209},[203,169879,7742],{"class":318},[203,169881,13804],{"class":213},[203,169883,31441],{"class":209},[203,169885,148211],{"class":5306},[203,169887,3828],{"class":213},[203,169889,169890,169893,169895,169898,169900],{"class":205,"line":1419},[203,169891,169892],{"class":213},"    writer ",[203,169894,259],{"class":209},[203,169896,169897],{"class":213}," csv.writer(",[203,169899,45412],{"class":5306},[203,169901,220],{"class":213},[203,169903,169904],{"class":205,"line":1701},[203,169905,169906],{"class":213},"    writer.writerows(students)\n",[19,169908,169909],{},"读取 CSV：",[194,169911,169913],{"className":30436,"code":169912,"language":30438,"meta":27,"style":27},"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",[200,169914,169915,169921,169925,169955,169969,169981],{"__ignoreMap":27},[203,169916,169917,169919],{"class":205,"line":206},[203,169918,30450],{"class":209},[203,169920,169777],{"class":213},[203,169922,169923],{"class":205,"line":124},[203,169924,2489],{"emptyLinePlaceholder":131},[203,169926,169927,169929,169931,169933,169935,169937,169939,169941,169943,169945,169947,169949,169951,169953],{"class":205,"line":1269},[203,169928,107891],{"class":209},[203,169930,146849],{"class":262},[203,169932,214],{"class":213},[203,169934,169858],{"class":318},[203,169936,12525],{"class":213},[203,169938,146859],{"class":318},[203,169940,12525],{"class":213},[203,169942,146864],{"class":5306},[203,169944,259],{"class":209},[203,169946,146869],{"class":318},[203,169948,13804],{"class":213},[203,169950,31441],{"class":209},[203,169952,148211],{"class":5306},[203,169954,3828],{"class":213},[203,169956,169957,169960,169962,169965,169967],{"class":205,"line":1284},[203,169958,169959],{"class":213},"    reader ",[203,169961,259],{"class":209},[203,169963,169964],{"class":213}," csv.reader(",[203,169966,45412],{"class":5306},[203,169968,220],{"class":213},[203,169970,169971,169973,169976,169978],{"class":205,"line":1290},[203,169972,3290],{"class":209},[203,169974,169975],{"class":213}," row ",[203,169977,26101],{"class":209},[203,169979,169980],{"class":213}," reader:\n",[203,169982,169983,169985],{"class":205,"line":1304},[203,169984,32509],{"class":262},[203,169986,169987],{"class":213},"(row)\n",[19,169989,169990],{},"使用字典写入：",[194,169992,169994],{"className":30436,"code":169993,"language":30438,"meta":27,"style":27},"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",[200,169995,169996,170002,170006,170014,170042,170070,170074,170078,170116,170137,170158,170163],{"__ignoreMap":27},[203,169997,169998,170000],{"class":205,"line":206},[203,169999,30450],{"class":209},[203,170001,169777],{"class":213},[203,170003,170004],{"class":205,"line":124},[203,170005,2489],{"emptyLinePlaceholder":131},[203,170007,170008,170010,170012],{"class":205,"line":1269},[203,170009,159774],{"class":213},[203,170011,259],{"class":209},[203,170013,55505],{"class":213},[203,170015,170016,170018,170020,170022,170024,170026,170028,170030,170032,170034,170036,170038,170040],{"class":205,"line":1284},[203,170017,148443],{"class":213},[203,170019,62737],{"class":318},[203,170021,51495],{"class":213},[203,170023,149946],{"class":318},[203,170025,12525],{"class":213},[203,170027,69182],{"class":318},[203,170029,51495],{"class":213},[203,170031,864],{"class":262},[203,170033,12525],{"class":213},[203,170035,151530],{"class":318},[203,170037,51495],{"class":213},[203,170039,1203],{"class":262},[203,170041,5019],{"class":213},[203,170043,170044,170046,170048,170050,170052,170054,170056,170058,170060,170062,170064,170066,170068],{"class":205,"line":1290},[203,170045,148443],{"class":213},[203,170047,62737],{"class":318},[203,170049,51495],{"class":213},[203,170051,150994],{"class":318},[203,170053,12525],{"class":213},[203,170055,69182],{"class":318},[203,170057,51495],{"class":213},[203,170059,839],{"class":262},[203,170061,12525],{"class":213},[203,170063,151530],{"class":318},[203,170065,51495],{"class":213},[203,170067,1025],{"class":262},[203,170069,5019],{"class":213},[203,170071,170072],{"class":205,"line":1304},[203,170073,33304],{"class":213},[203,170075,170076],{"class":205,"line":1310},[203,170077,2489],{"emptyLinePlaceholder":131},[203,170079,170080,170082,170084,170086,170088,170090,170092,170094,170096,170098,170100,170102,170104,170106,170108,170110,170112,170114],{"class":205,"line":1401},[203,170081,107891],{"class":209},[203,170083,146849],{"class":262},[203,170085,214],{"class":213},[203,170087,169858],{"class":318},[203,170089,12525],{"class":213},[203,170091,152034],{"class":318},[203,170093,12525],{"class":213},[203,170095,146864],{"class":5306},[203,170097,259],{"class":209},[203,170099,146869],{"class":318},[203,170101,12525],{"class":213},[203,170103,169875],{"class":5306},[203,170105,259],{"class":209},[203,170107,7742],{"class":318},[203,170109,13804],{"class":213},[203,170111,31441],{"class":209},[203,170113,148211],{"class":5306},[203,170115,3828],{"class":213},[203,170117,170118,170121,170123,170125,170127,170129,170131,170133,170135],{"class":205,"line":1407},[203,170119,170120],{"class":213},"    fieldnames ",[203,170122,259],{"class":209},[203,170124,52284],{"class":213},[203,170126,62737],{"class":318},[203,170128,12525],{"class":213},[203,170130,69182],{"class":318},[203,170132,12525],{"class":213},[203,170134,151530],{"class":318},[203,170136,33304],{"class":213},[203,170138,170139,170141,170143,170146,170148,170150,170153,170155],{"class":205,"line":1419},[203,170140,169892],{"class":213},[203,170142,259],{"class":209},[203,170144,170145],{"class":213}," csv.DictWriter(",[203,170147,45412],{"class":5306},[203,170149,12525],{"class":213},[203,170151,170152],{"class":5306},"fieldnames",[203,170154,259],{"class":209},[203,170156,170157],{"class":213},"fieldnames)\n",[203,170159,170160],{"class":205,"line":1701},[203,170161,170162],{"class":213},"    writer.writeheader()\n",[203,170164,170165],{"class":205,"line":1706},[203,170166,169906],{"class":213},[14,170168,170170],{"id":170169},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170172,123350],{},[157,170174,170175,170178,170181],{},[160,170176,170177],{},"读取文本文件。",[160,170179,170180],{},"统计每个单词出现次数。",[160,170182,170183],{},"输出出现次数最多的前 10 个单词。",[19,170185,10125],{},[194,170187,170189],{"className":30436,"code":170188,"language":30438,"meta":27,"style":27},"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",[200,170190,170191,170201,170205,170218,170234,170238,170248,170257,170261,170273,170293,170302,170306,170324,170328,170358,170362,170378],{"__ignoreMap":27},[203,170192,170193,170195,170197,170199],{"class":205,"line":206},[203,170194,30795],{"class":209},[203,170196,108369],{"class":213},[203,170198,30450],{"class":209},[203,170200,108374],{"class":213},[203,170202,170203],{"class":205,"line":124},[203,170204,2489],{"emptyLinePlaceholder":131},[203,170206,170207,170209,170211,170213,170216],{"class":205,"line":1269},[203,170208,168369],{"class":213},[203,170210,259],{"class":209},[203,170212,108603],{"class":213},[203,170214,170215],{"class":318},"\"article.txt\"",[203,170217,220],{"class":213},[203,170219,170220,170222,170224,170226,170228,170230,170232],{"class":205,"line":1284},[203,170221,168552],{"class":213},[203,170223,259],{"class":209},[203,170225,169429],{"class":213},[203,170227,146864],{"class":5306},[203,170229,259],{"class":209},[203,170231,146869],{"class":318},[203,170233,220],{"class":213},[203,170235,170236],{"class":205,"line":1290},[203,170237,2489],{"emptyLinePlaceholder":131},[203,170239,170240,170243,170245],{"class":205,"line":1304},[203,170241,170242],{"class":213},"words ",[203,170244,259],{"class":209},[203,170246,170247],{"class":213}," content.lower().split()\n",[203,170249,170250,170253,170255],{"class":205,"line":1310},[203,170251,170252],{"class":213},"counter ",[203,170254,259],{"class":209},[203,170256,87926],{"class":213},[203,170258,170259],{"class":205,"line":1401},[203,170260,2489],{"emptyLinePlaceholder":131},[203,170262,170263,170265,170268,170270],{"class":205,"line":1407},[203,170264,3114],{"class":209},[203,170266,170267],{"class":213}," word ",[203,170269,26101],{"class":209},[203,170271,170272],{"class":213}," words:\n",[203,170274,170275,170278,170280,170283,170286,170288,170291],{"class":205,"line":1419},[203,170276,170277],{"class":213},"    word ",[203,170279,259],{"class":209},[203,170281,170282],{"class":213}," word.strip(",[203,170284,170285],{"class":318},"\".,!?;:",[203,170287,156553],{"class":262},[203,170289,170290],{"class":318},"'()[]\"",[203,170292,220],{"class":213},[203,170294,170295,170297,170299],{"class":205,"line":1701},[203,170296,3190],{"class":209},[203,170298,38988],{"class":209},[203,170300,170301],{"class":213}," word:\n",[203,170303,170304],{"class":205,"line":1706},[203,170305,148570],{"class":209},[203,170307,170308,170311,170313,170316,170318,170320,170322],{"class":205,"line":1712},[203,170309,170310],{"class":213},"    counter[word] ",[203,170312,259],{"class":209},[203,170314,170315],{"class":213}," counter.get(word, ",[203,170317,405],{"class":262},[203,170319,13804],{"class":213},[203,170321,695],{"class":209},[203,170323,55757],{"class":262},[203,170325,170326],{"class":205,"line":1717},[203,170327,2489],{"emptyLinePlaceholder":131},[203,170329,170330,170333,170335,170337,170340,170342,170344,170346,170348,170350,170352,170354,170356],{"class":205,"line":1731},[203,170331,170332],{"class":213},"items ",[203,170334,259],{"class":209},[203,170336,163662],{"class":262},[203,170338,170339],{"class":213},"(counter.items(), ",[203,170341,154004],{"class":5306},[203,170343,154007],{"class":209},[203,170345,154010],{"class":213},[203,170347,431],{"class":262},[203,170349,112260],{"class":213},[203,170351,163586],{"class":5306},[203,170353,259],{"class":209},[203,170355,31534],{"class":262},[203,170357,220],{"class":213},[203,170359,170360],{"class":205,"line":1736},[203,170361,2489],{"emptyLinePlaceholder":131},[203,170363,170364,170366,170369,170371,170374,170376],{"class":205,"line":1742},[203,170365,3114],{"class":209},[203,170367,170368],{"class":213}," word, count ",[203,170370,26101],{"class":209},[203,170372,170373],{"class":213}," items[:",[203,170375,660],{"class":262},[203,170377,165813],{"class":213},[203,170379,170380,170382],{"class":205,"line":1763},[203,170381,31357],{"class":262},[203,170383,170384],{"class":213},"(word, count)\n",[14,170386,170388],{"id":170387},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[194,170390,170392],{"className":30436,"code":170391,"language":30438,"meta":27,"style":27},"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",[200,170393,170394,170400,170410,170414,170426,170430,170434,170442,170452,170458,170462,170492,170502,170506,170510,170518,170548,170572,170576,170580,170588,170617,170622],{"__ignoreMap":27},[203,170395,170396,170398],{"class":205,"line":206},[203,170397,30450],{"class":209},[203,170399,147149],{"class":213},[203,170401,170402,170404,170406,170408],{"class":205,"line":124},[203,170403,30795],{"class":209},[203,170405,108369],{"class":213},[203,170407,30450],{"class":209},[203,170409,108374],{"class":213},[203,170411,170412],{"class":205,"line":1269},[203,170413,2489],{"emptyLinePlaceholder":131},[203,170415,170416,170418,170420,170422,170424],{"class":205,"line":1284},[203,170417,151882],{"class":262},[203,170419,13654],{"class":209},[203,170421,108603],{"class":213},[203,170423,151889],{"class":318},[203,170425,220],{"class":213},[203,170427,170428],{"class":205,"line":1290},[203,170429,2489],{"emptyLinePlaceholder":131},[203,170431,170432],{"class":205,"line":1304},[203,170433,2489],{"emptyLinePlaceholder":131},[203,170435,170436,170438,170440],{"class":205,"line":1310},[203,170437,32005],{"class":209},[203,170439,151906],{"class":2052},[203,170441,32011],{"class":213},[203,170443,170444,170446,170448,170450],{"class":205,"line":1401},[203,170445,3190],{"class":209},[203,170447,38988],{"class":209},[203,170449,151917],{"class":262},[203,170451,151920],{"class":213},[203,170453,170454,170456],{"class":205,"line":1407},[203,170455,14842],{"class":209},[203,170457,51896],{"class":213},[203,170459,170460],{"class":205,"line":1419},[203,170461,2489],{"emptyLinePlaceholder":131},[203,170463,170464,170466,170468,170470,170472,170474,170476,170478,170480,170482,170484,170486,170488,170490],{"class":205,"line":1701},[203,170465,34236],{"class":209},[203,170467,146849],{"class":262},[203,170469,214],{"class":213},[203,170471,151882],{"class":262},[203,170473,12525],{"class":213},[203,170475,146859],{"class":318},[203,170477,12525],{"class":213},[203,170479,146864],{"class":5306},[203,170481,259],{"class":209},[203,170483,146869],{"class":318},[203,170485,13804],{"class":213},[203,170487,31441],{"class":209},[203,170489,148211],{"class":5306},[203,170491,3828],{"class":213},[203,170493,170494,170496,170498,170500],{"class":205,"line":1706},[203,170495,14842],{"class":209},[203,170497,148222],{"class":213},[203,170499,45412],{"class":5306},[203,170501,220],{"class":213},[203,170503,170504],{"class":205,"line":1712},[203,170505,2489],{"emptyLinePlaceholder":131},[203,170507,170508],{"class":205,"line":1717},[203,170509,2489],{"emptyLinePlaceholder":131},[203,170511,170512,170514,170516],{"class":205,"line":1731},[203,170513,32005],{"class":209},[203,170515,152016],{"class":2052},[203,170517,152019],{"class":213},[203,170519,170520,170522,170524,170526,170528,170530,170532,170534,170536,170538,170540,170542,170544,170546],{"class":205,"line":1736},[203,170521,34236],{"class":209},[203,170523,146849],{"class":262},[203,170525,214],{"class":213},[203,170527,151882],{"class":262},[203,170529,12525],{"class":213},[203,170531,152034],{"class":318},[203,170533,12525],{"class":213},[203,170535,146864],{"class":5306},[203,170537,259],{"class":209},[203,170539,146869],{"class":318},[203,170541,13804],{"class":213},[203,170543,31441],{"class":209},[203,170545,148211],{"class":5306},[203,170547,3828],{"class":213},[203,170549,170550,170552,170554,170556,170558,170560,170562,170564,170566,170568,170570],{"class":205,"line":1742},[203,170551,152055],{"class":213},[203,170553,45412],{"class":5306},[203,170555,12525],{"class":213},[203,170557,147195],{"class":5306},[203,170559,259],{"class":209},[203,170561,34045],{"class":262},[203,170563,12525],{"class":213},[203,170565,152070],{"class":5306},[203,170567,259],{"class":209},[203,170569,291],{"class":262},[203,170571,220],{"class":213},[203,170573,170574],{"class":205,"line":1763},[203,170575,2489],{"emptyLinePlaceholder":131},[203,170577,170578],{"class":205,"line":1768},[203,170579,2489],{"emptyLinePlaceholder":131},[203,170581,170582,170584,170586],{"class":205,"line":1782},[203,170583,159774],{"class":213},[203,170585,259],{"class":209},[203,170587,153100],{"class":213},[203,170589,170590,170593,170595,170597,170599,170601,170603,170605,170607,170609,170611,170613,170615],{"class":205,"line":1787},[203,170591,170592],{"class":213},"students.append({",[203,170594,62737],{"class":318},[203,170596,51495],{"class":213},[203,170598,149946],{"class":318},[203,170600,12525],{"class":213},[203,170602,69182],{"class":318},[203,170604,51495],{"class":213},[203,170606,864],{"class":262},[203,170608,12525],{"class":213},[203,170610,151530],{"class":318},[203,170612,51495],{"class":213},[203,170614,1203],{"class":262},[203,170616,165210],{"class":213},[203,170618,170619],{"class":205,"line":1816},[203,170620,170621],{"class":213},"save_students(students)\n",[203,170623,170624,170626,170628,170631],{"class":205,"line":1821},[203,170625,30473],{"class":262},[203,170627,214],{"class":213},[203,170629,170630],{"class":318},"\"保存成功\"",[203,170632,220],{"class":213},[14,170634,170636],{"id":170635},"_814-易错点","8.14 易错点",[157,170638,170639,170643,170649,170654,170661,170668],{},[160,170640,170641,168902],{},[200,170642,1009],{},[160,170644,170645,170646,28443],{},"读写中文要指定 ",[200,170647,170648],{},"encoding=\"utf-8\"",[160,170650,170651,170652,28443],{},"打开文件后要关闭，推荐使用 ",[200,170653,107891],{},[160,170655,170656,170657,170660],{},"读取大文件不要直接 ",[200,170658,170659],{},"read()"," 全部内容。",[160,170662,170663,170664,170667],{},"Windows 写 CSV 时建议加 ",[200,170665,170666],{},"newline=\"\"","，避免空行。",[160,170669,170670],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,170672,170674],{"id":170673},"_815-本章练习","8.15 本章练习",[157,170676,170677,170684,170689,170692,170695],{},[160,170678,170679,170680,170683],{},"写入一个 ",[200,170681,170682],{},"students.txt","，每行保存一个学生姓名。",[160,170685,104413,170686,170688],{},[200,170687,170682],{}," 并输出所有学生。",[160,170690,170691],{},"把学生列表保存为 JSON 文件。",[160,170693,170694],{},"从 JSON 文件读取学生数据，计算平均分。",[160,170696,170697,170698,170701,170702,170705],{},"写一个日志函数 ",[200,170699,170700],{},"write_log(message)","，每次调用向 ",[200,170703,170704],{},"app.log"," 追加一行。",[5216,170707,170708],{},"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":27,"searchDepth":124,"depth":124,"links":170710},[170711,170712,170716,170717,170723,170724,170725,170726,170727,170728,170729,170730,170731,170732,170733],{"id":168222,"depth":124,"text":168223},{"id":168263,"depth":124,"text":168264,"children":170713},[170714,170715],{"id":168267,"depth":1269,"text":168268},{"id":168301,"depth":1269,"text":168302},{"id":168415,"depth":124,"text":168416},{"id":168508,"depth":124,"text":168509,"children":170718},[170719,170720,170721,170722],{"id":168512,"depth":1269,"text":168513},{"id":168599,"depth":1269,"text":168600},{"id":168669,"depth":1269,"text":168670},{"id":168763,"depth":1269,"text":168764},{"id":168833,"depth":124,"text":168834},{"id":168896,"depth":124,"text":168897},{"id":169057,"depth":124,"text":169058},{"id":169120,"depth":124,"text":169121},{"id":169236,"depth":124,"text":169237},{"id":169446,"depth":124,"text":169447},{"id":169758,"depth":124,"text":169759},{"id":170169,"depth":124,"text":170170},{"id":170387,"depth":124,"text":170388},{"id":170635,"depth":124,"text":170636},{"id":170673,"depth":124,"text":170674},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168214,"description":23467},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170740,"title":170741,"body":170742,"description":23467,"extension":129,"meta":172928,"navigation":131,"path":172929,"seo":172930,"stem":172931,"__hash__":172932},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170743,"toc":172895},[170744,170747,170751,170754,170757,170849,170851,170870,170875,170879,170882,170885,170914,170921,170924,170928,170931,170960,170962,171014,171020,171073,171077,171175,171178,171245,171249,171306,171308,171314,171318,171323,171329,171420,171425,171429,171432,171510,171513,171551,171555,171673,171676,171680,171683,171728,171731,171735,171740,171746,171796,171799,171830,171834,171838,171868,171872,171907,171911,171946,171986,171990,172006,172009,172013,172017,172096,172100,172141,172145,172200,172204,172238,172242,172272,172281,172288,172294,172351,172354,172362,172365,172369,172376,172379,172385,172388,172405,172410,172414,172420,172433,172436,172473,172476,172487,172490,172504,172507,172521,172525,172532,172565,172568,172570,172576,172579,172583,172585,172591,172596,172769,172773,172836,172840,172864,172868,172892],[10,170745,170741],{"id":170746},"_9-异常模块与包",[14,170748,170750],{"id":170749},"_91-什么是异常","9.1 什么是异常",[19,170752,170753],{},"异常是程序运行过程中出现的错误。",[19,170755,170756],{},"常见异常：",[351,170758,170759,170768],{},[354,170760,170761],{},[357,170762,170763,170766],{},[360,170764,170765],{},"异常",[360,170767,25927],{},[398,170769,170770,170780,170790,170799,170809,170819,170829,170839],{},[357,170771,170772,170777],{},[403,170773,170774],{},[200,170775,170776],{},"NameError",[403,170778,170779],{},"使用了未定义变量",[357,170781,170782,170787],{},[403,170783,170784],{},[200,170785,170786],{},"TypeError",[403,170788,170789],{},"类型不匹配",[357,170791,170792,170796],{},[403,170793,170794],{},[200,170795,154892],{},[403,170797,170798],{},"值不合法",[357,170800,170801,170806],{},[403,170802,170803],{},[200,170804,170805],{},"IndexError",[403,170807,170808],{},"列表索引越界",[357,170810,170811,170816],{},[403,170812,170813],{},[200,170814,170815],{},"KeyError",[403,170817,170818],{},"字典 key 不存在",[357,170820,170821,170826],{},[403,170822,170823],{},[200,170824,170825],{},"FileNotFoundError",[403,170827,170828],{},"文件不存在",[357,170830,170831,170836],{},[403,170832,170833],{},[200,170834,170835],{},"ZeroDivisionError",[403,170837,170838],{},"除数为 0",[357,170840,170841,170846],{},[403,170842,170843],{},[200,170844,170845],{},"ImportError",[403,170847,170848],{},"导入失败",[19,170850,15225],{},[194,170852,170854],{"className":30436,"code":170853,"language":30438,"meta":27,"style":27},"num = int(\"abc\")\n",[200,170855,170856],{"__ignoreMap":27},[203,170857,170858,170860,170862,170864,170866,170868],{"class":205,"line":206},[203,170859,155845],{"class":213},[203,170861,259],{"class":209},[203,170863,2471],{"class":262},[203,170865,214],{"class":213},[203,170867,155938],{"class":318},[203,170869,220],{"class":213},[19,170871,170872,170873,28443],{},"会触发 ",[200,170874,154892],{},[14,170876,170878],{"id":170877},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,170880,170881],{},"如果不处理异常，程序会直接终止。",[19,170883,170884],{},"例如用户输入年龄：",[194,170886,170888],{"className":30436,"code":170887,"language":30438,"meta":27,"style":27},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[200,170889,170890,170908],{"__ignoreMap":27},[203,170891,170892,170894,170896,170898,170900,170902,170904,170906],{"class":205,"line":206},[203,170893,146604],{"class":213},[203,170895,259],{"class":209},[203,170897,2471],{"class":262},[203,170899,214],{"class":213},[203,170901,53879],{"class":262},[203,170903,214],{"class":213},[203,170905,152452],{"class":318},[203,170907,30555],{"class":213},[203,170909,170910,170912],{"class":205,"line":124},[203,170911,30473],{"class":262},[203,170913,155819],{"class":213},[19,170915,170916,170917,170920],{},"用户输入 ",[200,170918,170919],{},"abc","，程序就会报错退出。",[19,170922,170923],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,170925,170927],{"id":170926},"_93-try-except","9.3 try except",[19,170929,170930],{},"基础语法：",[194,170932,170934],{"className":30436,"code":170933,"language":30438,"meta":27,"style":27},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[200,170935,170936,170943,170948,170955],{"__ignoreMap":27},[203,170937,170938,170941],{"class":205,"line":206},[203,170939,170940],{"class":209},"try",[203,170942,3828],{"class":213},[203,170944,170945],{"class":205,"line":124},[203,170946,170947],{"class":213},"    可能出错的代码\n",[203,170949,170950,170953],{"class":205,"line":1269},[203,170951,170952],{"class":209},"except",[203,170954,3828],{"class":213},[203,170956,170957],{"class":205,"line":1284},[203,170958,170959],{"class":213},"    出错后的处理代码\n",[19,170961,15225],{},[194,170963,170965],{"className":30436,"code":170964,"language":30438,"meta":27,"style":27},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[200,170966,170967,170973,170991,170997,171003],{"__ignoreMap":27},[203,170968,170969,170971],{"class":205,"line":206},[203,170970,170940],{"class":209},[203,170972,3828],{"class":213},[203,170974,170975,170977,170979,170981,170983,170985,170987,170989],{"class":205,"line":124},[203,170976,152444],{"class":213},[203,170978,259],{"class":209},[203,170980,2471],{"class":262},[203,170982,214],{"class":213},[203,170984,53879],{"class":262},[203,170986,214],{"class":213},[203,170988,152452],{"class":318},[203,170990,30555],{"class":213},[203,170992,170993,170995],{"class":205,"line":1269},[203,170994,31357],{"class":262},[203,170996,155819],{"class":213},[203,170998,170999,171001],{"class":205,"line":1284},[203,171000,170952],{"class":209},[203,171002,3828],{"class":213},[203,171004,171005,171007,171009,171012],{"class":205,"line":1290},[203,171006,31357],{"class":262},[203,171008,214],{"class":213},[203,171010,171011],{"class":318},"\"年龄必须是数字\"",[203,171013,220],{"class":213},[19,171015,171016,171017,171019],{},"不建议裸写 ",[200,171018,170952],{},"，最好指定异常类型。",[194,171021,171023],{"className":30436,"code":171022,"language":30438,"meta":27,"style":27},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[200,171024,171025,171031,171049,171055,171063],{"__ignoreMap":27},[203,171026,171027,171029],{"class":205,"line":206},[203,171028,170940],{"class":209},[203,171030,3828],{"class":213},[203,171032,171033,171035,171037,171039,171041,171043,171045,171047],{"class":205,"line":124},[203,171034,152444],{"class":213},[203,171036,259],{"class":209},[203,171038,2471],{"class":262},[203,171040,214],{"class":213},[203,171042,53879],{"class":262},[203,171044,214],{"class":213},[203,171046,152452],{"class":318},[203,171048,30555],{"class":213},[203,171050,171051,171053],{"class":205,"line":1269},[203,171052,31357],{"class":262},[203,171054,155819],{"class":213},[203,171056,171057,171059,171061],{"class":205,"line":1284},[203,171058,170952],{"class":209},[203,171060,152284],{"class":262},[203,171062,3828],{"class":213},[203,171064,171065,171067,171069,171071],{"class":205,"line":1290},[203,171066,31357],{"class":262},[203,171068,214],{"class":213},[203,171070,171011],{"class":318},[203,171072,220],{"class":213},[14,171074,171076],{"id":171075},"_94-捕获多个异常","9.4 捕获多个异常",[194,171078,171080],{"className":30436,"code":171079,"language":30438,"meta":27,"style":27},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[200,171081,171082,171088,171109,171129,171136,171144,171155,171164],{"__ignoreMap":27},[203,171083,171084,171086],{"class":205,"line":206},[203,171085,170940],{"class":209},[203,171087,3828],{"class":213},[203,171089,171090,171093,171095,171097,171099,171101,171103,171105,171107],{"class":205,"line":124},[203,171091,171092],{"class":213},"    nums ",[203,171094,259],{"class":209},[203,171096,52284],{"class":213},[203,171098,431],{"class":262},[203,171100,12525],{"class":213},[203,171102,291],{"class":262},[203,171104,12525],{"class":213},[203,171106,285],{"class":262},[203,171108,33304],{"class":213},[203,171110,171111,171114,171116,171118,171120,171122,171124,171127],{"class":205,"line":1269},[203,171112,171113],{"class":213},"    index ",[203,171115,259],{"class":209},[203,171117,2471],{"class":262},[203,171119,214],{"class":213},[203,171121,53879],{"class":262},[203,171123,214],{"class":213},[203,171125,171126],{"class":318},"\"请输入索引:\"",[203,171128,30555],{"class":213},[203,171130,171131,171133],{"class":205,"line":1284},[203,171132,31357],{"class":262},[203,171134,171135],{"class":213},"(nums[index])\n",[203,171137,171138,171140,171142],{"class":205,"line":1290},[203,171139,170952],{"class":209},[203,171141,152284],{"class":262},[203,171143,3828],{"class":213},[203,171145,171146,171148,171150,171153],{"class":205,"line":1304},[203,171147,31357],{"class":262},[203,171149,214],{"class":213},[203,171151,171152],{"class":318},"\"索引必须是整数\"",[203,171154,220],{"class":213},[203,171156,171157,171159,171162],{"class":205,"line":1310},[203,171158,170952],{"class":209},[203,171160,171161],{"class":262}," IndexError",[203,171163,3828],{"class":213},[203,171165,171166,171168,171170,171173],{"class":205,"line":1401},[203,171167,31357],{"class":262},[203,171169,214],{"class":213},[203,171171,171172],{"class":318},"\"索引越界\"",[203,171174,220],{"class":213},[19,171176,171177],{},"多个异常使用相同处理逻辑：",[194,171179,171181],{"className":30436,"code":171180,"language":30438,"meta":27,"style":27},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[200,171182,171183,171189,171207,171220,171234],{"__ignoreMap":27},[203,171184,171185,171187],{"class":205,"line":206},[203,171186,170940],{"class":209},[203,171188,3828],{"class":213},[203,171190,171191,171193,171195,171197,171199,171201,171203,171205],{"class":205,"line":124},[203,171192,45651],{"class":213},[203,171194,259],{"class":209},[203,171196,2471],{"class":262},[203,171198,214],{"class":213},[203,171200,53879],{"class":262},[203,171202,214],{"class":213},[203,171204,155854],{"class":318},[203,171206,30555],{"class":213},[203,171208,171209,171211,171213,171215,171217],{"class":205,"line":1269},[203,171210,31357],{"class":262},[203,171212,214],{"class":213},[203,171214,660],{"class":262},[203,171216,156104],{"class":209},[203,171218,171219],{"class":213}," num)\n",[203,171221,171222,171224,171226,171228,171230,171232],{"class":205,"line":1284},[203,171223,170952],{"class":209},[203,171225,1747],{"class":213},[203,171227,154892],{"class":262},[203,171229,12525],{"class":213},[203,171231,170835],{"class":262},[203,171233,30844],{"class":213},[203,171235,171236,171238,171240,171243],{"class":205,"line":1290},[203,171237,31357],{"class":262},[203,171239,214],{"class":213},[203,171241,171242],{"class":318},"\"输入不合法\"",[203,171244,220],{"class":213},[14,171246,171248],{"id":171247},"_95-获取异常信息","9.5 获取异常信息",[194,171250,171252],{"className":30436,"code":171251,"language":30438,"meta":27,"style":27},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[200,171253,171254,171260,171274,171285],{"__ignoreMap":27},[203,171255,171256,171258],{"class":205,"line":206},[203,171257,170940],{"class":209},[203,171259,3828],{"class":213},[203,171261,171262,171264,171266,171268,171270,171272],{"class":205,"line":124},[203,171263,45651],{"class":213},[203,171265,259],{"class":209},[203,171267,2471],{"class":262},[203,171269,214],{"class":213},[203,171271,155938],{"class":318},[203,171273,220],{"class":213},[203,171275,171276,171278,171280,171282],{"class":205,"line":1269},[203,171277,170952],{"class":209},[203,171279,152284],{"class":262},[203,171281,64662],{"class":209},[203,171283,171284],{"class":213}," e:\n",[203,171286,171287,171289,171291,171293,171296,171298,171300,171302,171304],{"class":205,"line":1284},[203,171288,31357],{"class":262},[203,171290,214],{"class":213},[203,171292,266],{"class":209},[203,171294,171295],{"class":318},"\"出错了:",[203,171297,1110],{"class":262},[203,171299,288],{"class":213},[203,171301,1160],{"class":262},[203,171303,465],{"class":318},[203,171305,220],{"class":213},[19,171307,146515],{},[194,171309,171312],{"className":171310,"code":171311,"language":5277,"meta":27},[5275],"出错了:invalid literal for int() with base 10: 'abc'\n",[200,171313,171311],{"__ignoreMap":27},[14,171315,171317],{"id":171316},"_96-else和finally","9.6 else和finally",[19,171319,171320,171322],{},[200,171321,1790],{},"：没有异常时执行。",[19,171324,171325,171328],{},[200,171326,171327],{},"finally","：无论是否异常都会执行。",[194,171330,171332],{"className":30436,"code":171331,"language":30438,"meta":27,"style":27},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[200,171333,171334,171340,171358,171366,171376,171382,171403,171409],{"__ignoreMap":27},[203,171335,171336,171338],{"class":205,"line":206},[203,171337,170940],{"class":209},[203,171339,3828],{"class":213},[203,171341,171342,171344,171346,171348,171350,171352,171354,171356],{"class":205,"line":124},[203,171343,45651],{"class":213},[203,171345,259],{"class":209},[203,171347,2471],{"class":262},[203,171349,214],{"class":213},[203,171351,53879],{"class":262},[203,171353,214],{"class":213},[203,171355,155854],{"class":318},[203,171357,30555],{"class":213},[203,171359,171360,171362,171364],{"class":205,"line":1269},[203,171361,170952],{"class":209},[203,171363,152284],{"class":262},[203,171365,3828],{"class":213},[203,171367,171368,171370,171372,171374],{"class":205,"line":1284},[203,171369,31357],{"class":262},[203,171371,214],{"class":213},[203,171373,153272],{"class":318},[203,171375,220],{"class":213},[203,171377,171378,171380],{"class":205,"line":1290},[203,171379,1790],{"class":209},[203,171381,3828],{"class":213},[203,171383,171384,171386,171388,171390,171393,171395,171397,171399,171401],{"class":205,"line":1304},[203,171385,31357],{"class":262},[203,171387,214],{"class":213},[203,171389,266],{"class":209},[203,171391,171392],{"class":318},"\"输入正确:",[203,171394,1110],{"class":262},[203,171396,1754],{"class":213},[203,171398,1160],{"class":262},[203,171400,465],{"class":318},[203,171402,220],{"class":213},[203,171404,171405,171407],{"class":205,"line":1310},[203,171406,171327],{"class":209},[203,171408,3828],{"class":213},[203,171410,171411,171413,171415,171418],{"class":205,"line":1401},[203,171412,31357],{"class":262},[203,171414,214],{"class":213},[203,171416,171417],{"class":318},"\"程序结束\"",[203,171419,220],{"class":213},[19,171421,171422,171424],{},[200,171423,171327],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171426,171428],{"id":171427},"_97-抛出异常","9.7 抛出异常",[19,171430,171431],{},"程序可以主动抛出异常。",[194,171433,171435],{"className":30436,"code":171434,"language":30438,"meta":27,"style":27},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[200,171436,171437,171446,171458,171471,171491,171495,171499],{"__ignoreMap":27},[203,171438,171439,171441,171444],{"class":205,"line":206},[203,171440,32005],{"class":209},[203,171442,171443],{"class":2052}," set_age",[203,171445,161473],{"class":213},[203,171447,171448,171450,171452,171454,171456],{"class":205,"line":124},[203,171449,3190],{"class":209},[203,171451,15797],{"class":213},[203,171453,1124],{"class":209},[203,171455,4182],{"class":262},[203,171457,3828],{"class":213},[203,171459,171460,171462,171464,171466,171469],{"class":205,"line":1269},[203,171461,103490],{"class":209},[203,171463,152284],{"class":262},[203,171465,214],{"class":213},[203,171467,171468],{"class":318},"\"年龄不能为负数\"",[203,171470,220],{"class":213},[203,171472,171473,171475,171477,171479,171481,171483,171485,171487,171489],{"class":205,"line":1284},[203,171474,31357],{"class":262},[203,171476,214],{"class":213},[203,171478,266],{"class":209},[203,171480,162041],{"class":318},[203,171482,1110],{"class":262},[203,171484,70279],{"class":213},[203,171486,1160],{"class":262},[203,171488,465],{"class":318},[203,171490,220],{"class":213},[203,171492,171493],{"class":205,"line":1290},[203,171494,2489],{"emptyLinePlaceholder":131},[203,171496,171497],{"class":205,"line":1304},[203,171498,2489],{"emptyLinePlaceholder":131},[203,171500,171501,171504,171506,171508],{"class":205,"line":1310},[203,171502,171503],{"class":213},"set_age(",[203,171505,746],{"class":209},[203,171507,431],{"class":262},[203,171509,220],{"class":213},[19,171511,171512],{},"调用者可以捕获：",[194,171514,171516],{"className":30436,"code":171515,"language":30438,"meta":27,"style":27},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[200,171517,171518,171524,171535,171545],{"__ignoreMap":27},[203,171519,171520,171522],{"class":205,"line":206},[203,171521,170940],{"class":209},[203,171523,3828],{"class":213},[203,171525,171526,171529,171531,171533],{"class":205,"line":124},[203,171527,171528],{"class":213},"    set_age(",[203,171530,746],{"class":209},[203,171532,431],{"class":262},[203,171534,220],{"class":213},[203,171536,171537,171539,171541,171543],{"class":205,"line":1269},[203,171538,170952],{"class":209},[203,171540,152284],{"class":262},[203,171542,64662],{"class":209},[203,171544,171284],{"class":213},[203,171546,171547,171549],{"class":205,"line":1284},[203,171548,31357],{"class":262},[203,171550,67057],{"class":213},[14,171552,171554],{"id":171553},"_98-自定义异常","9.8 自定义异常",[194,171556,171558],{"className":30436,"code":171557,"language":30438,"meta":27,"style":27},"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",[200,171559,171560,171574,171578,171582,171586,171594,171604,171615,171625,171629,171633,171639,171656,171667],{"__ignoreMap":27},[203,171561,171562,171564,171567,171569,171572],{"class":205,"line":206},[203,171563,14784],{"class":209},[203,171565,171566],{"class":2052}," BalanceNotEnoughError",[203,171568,214],{"class":213},[203,171570,171571],{"class":262},"Exception",[203,171573,30844],{"class":213},[203,171575,171576],{"class":205,"line":124},[203,171577,149595],{"class":209},[203,171579,171580],{"class":205,"line":1269},[203,171581,2489],{"emptyLinePlaceholder":131},[203,171583,171584],{"class":205,"line":1284},[203,171585,2489],{"emptyLinePlaceholder":131},[203,171587,171588,171590,171592],{"class":205,"line":1290},[203,171589,32005],{"class":209},[203,171591,150244],{"class":2052},[203,171593,162870],{"class":213},[203,171595,171596,171598,171600,171602],{"class":205,"line":1304},[203,171597,3190],{"class":209},[203,171599,150200],{"class":213},[203,171601,1174],{"class":209},[203,171603,162647],{"class":213},[203,171605,171606,171608,171611,171613],{"class":205,"line":1310},[203,171607,103490],{"class":209},[203,171609,171610],{"class":213}," BalanceNotEnoughError(",[203,171612,150295],{"class":318},[203,171614,220],{"class":213},[203,171616,171617,171619,171621,171623],{"class":205,"line":1401},[203,171618,4179],{"class":209},[203,171620,162877],{"class":213},[203,171622,746],{"class":209},[203,171624,150233],{"class":213},[203,171626,171627],{"class":205,"line":1407},[203,171628,2489],{"emptyLinePlaceholder":131},[203,171630,171631],{"class":205,"line":1419},[203,171632,2489],{"emptyLinePlaceholder":131},[203,171634,171635,171637],{"class":205,"line":1701},[203,171636,170940],{"class":209},[203,171638,3828],{"class":213},[203,171640,171641,171643,171645,171648,171650,171652,171654],{"class":205,"line":1706},[203,171642,162548],{"class":213},[203,171644,259],{"class":209},[203,171646,171647],{"class":213}," withdraw(",[203,171649,525],{"class":262},[203,171651,12525],{"class":213},[203,171653,1811],{"class":262},[203,171655,220],{"class":213},[203,171657,171658,171660,171663,171665],{"class":205,"line":1712},[203,171659,170952],{"class":209},[203,171661,171662],{"class":213}," BalanceNotEnoughError ",[203,171664,31441],{"class":209},[203,171666,171284],{"class":213},[203,171668,171669,171671],{"class":205,"line":1717},[203,171670,31357],{"class":262},[203,171672,67057],{"class":213},[19,171674,171675],{},"入门阶段大多数情况使用内置异常即可。",[14,171677,171679],{"id":171678},"_99-traceback","9.9 traceback",[19,171681,171682],{},"调试时可以输出完整异常堆栈。",[194,171684,171686],{"className":30436,"code":171685,"language":30438,"meta":27,"style":27},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[200,171687,171688,171695,171699,171705,171715,171723],{"__ignoreMap":27},[203,171689,171690,171692],{"class":205,"line":206},[203,171691,30450],{"class":209},[203,171693,171694],{"class":213}," traceback\n",[203,171696,171697],{"class":205,"line":124},[203,171698,2489],{"emptyLinePlaceholder":131},[203,171700,171701,171703],{"class":205,"line":1269},[203,171702,170940],{"class":209},[203,171704,3828],{"class":213},[203,171706,171707,171709,171711,171713],{"class":205,"line":1284},[203,171708,2074],{"class":262},[203,171710,214],{"class":213},[203,171712,155938],{"class":318},[203,171714,220],{"class":213},[203,171716,171717,171719,171721],{"class":205,"line":1290},[203,171718,170952],{"class":209},[203,171720,152284],{"class":262},[203,171722,3828],{"class":213},[203,171724,171725],{"class":205,"line":1304},[203,171726,171727],{"class":213},"    traceback.print_exc()\n",[19,171729,171730],{},"日志系统中常把异常堆栈记录到文件。",[14,171732,171734],{"id":171733},"_910-什么是模块","9.10 什么是模块",[19,171736,171737,171738,126041],{},"模块就是一个 ",[200,171739,146410],{},[19,171741,171742,171743,24676],{},"例如创建 ",[200,171744,171745],{},"my_math.py",[194,171747,171749],{"className":30436,"code":171748,"language":30438,"meta":27,"style":27},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[200,171750,171751,171759,171769,171773,171777,171786],{"__ignoreMap":27},[203,171752,171753,171755,171757],{"class":205,"line":206},[203,171754,32005],{"class":209},[203,171756,5299],{"class":2052},[203,171758,151151],{"class":213},[203,171760,171761,171763,171765,171767],{"class":205,"line":124},[203,171762,4179],{"class":209},[203,171764,10959],{"class":213},[203,171766,695],{"class":209},[203,171768,151162],{"class":213},[203,171770,171771],{"class":205,"line":1269},[203,171772,2489],{"emptyLinePlaceholder":131},[203,171774,171775],{"class":205,"line":1284},[203,171776,2489],{"emptyLinePlaceholder":131},[203,171778,171779,171781,171784],{"class":205,"line":1290},[203,171780,32005],{"class":209},[203,171782,171783],{"class":2052}," sub",[203,171785,151151],{"class":213},[203,171787,171788,171790,171792,171794],{"class":205,"line":1304},[203,171789,4179],{"class":209},[203,171791,10959],{"class":213},[203,171793,746],{"class":209},[203,171795,151162],{"class":213},[19,171797,171798],{},"在另一个文件中导入：",[194,171800,171802],{"className":30436,"code":171801,"language":30438,"meta":27,"style":27},"import my_math\n\nprint(my_math.add(1, 2))\n",[200,171803,171804,171811,171815],{"__ignoreMap":27},[203,171805,171806,171808],{"class":205,"line":206},[203,171807,30450],{"class":209},[203,171809,171810],{"class":213}," my_math\n",[203,171812,171813],{"class":205,"line":124},[203,171814,2489],{"emptyLinePlaceholder":131},[203,171816,171817,171819,171822,171824,171826,171828],{"class":205,"line":1269},[203,171818,30473],{"class":262},[203,171820,171821],{"class":213},"(my_math.add(",[203,171823,431],{"class":262},[203,171825,12525],{"class":213},[203,171827,291],{"class":262},[203,171829,30555],{"class":213},[14,171831,171833],{"id":171832},"_911-import导入","9.11 import导入",[174,171835,171837],{"id":171836},"_9111-导入模块","9.11.1 导入模块",[194,171839,171841],{"className":30436,"code":171840,"language":30438,"meta":27,"style":27},"import random\n\nprint(random.randint(1, 10))\n",[200,171842,171843,171849,171853],{"__ignoreMap":27},[203,171844,171845,171847],{"class":205,"line":206},[203,171846,30450],{"class":209},[203,171848,45386],{"class":213},[203,171850,171851],{"class":205,"line":124},[203,171852,2489],{"emptyLinePlaceholder":131},[203,171854,171855,171857,171860,171862,171864,171866],{"class":205,"line":1269},[203,171856,30473],{"class":262},[203,171858,171859],{"class":213},"(random.randint(",[203,171861,431],{"class":262},[203,171863,12525],{"class":213},[203,171865,660],{"class":262},[203,171867,30555],{"class":213},[174,171869,171871],{"id":171870},"_9112-导入指定内容","9.11.2 导入指定内容",[194,171873,171875],{"className":30436,"code":171874,"language":30438,"meta":27,"style":27},"from random import randint\n\nprint(randint(1, 10))\n",[200,171876,171877,171888,171892],{"__ignoreMap":27},[203,171878,171879,171881,171883,171885],{"class":205,"line":206},[203,171880,30795],{"class":209},[203,171882,57854],{"class":213},[203,171884,30450],{"class":209},[203,171886,171887],{"class":213}," randint\n",[203,171889,171890],{"class":205,"line":124},[203,171891,2489],{"emptyLinePlaceholder":131},[203,171893,171894,171896,171899,171901,171903,171905],{"class":205,"line":1269},[203,171895,30473],{"class":262},[203,171897,171898],{"class":213},"(randint(",[203,171900,431],{"class":262},[203,171902,12525],{"class":213},[203,171904,660],{"class":262},[203,171906,30555],{"class":213},[174,171908,171910],{"id":171909},"_9113-起别名","9.11.3 起别名",[194,171912,171914],{"className":30436,"code":171913,"language":30438,"meta":27,"style":27},"import random as rd\n\nprint(rd.randint(1, 10))\n",[200,171915,171916,171927,171931],{"__ignoreMap":27},[203,171917,171918,171920,171922,171924],{"class":205,"line":206},[203,171919,30450],{"class":209},[203,171921,57854],{"class":213},[203,171923,31441],{"class":209},[203,171925,171926],{"class":213}," rd\n",[203,171928,171929],{"class":205,"line":124},[203,171930,2489],{"emptyLinePlaceholder":131},[203,171932,171933,171935,171938,171940,171942,171944],{"class":205,"line":1269},[203,171934,30473],{"class":262},[203,171936,171937],{"class":213},"(rd.randint(",[203,171939,431],{"class":262},[203,171941,12525],{"class":213},[203,171943,660],{"class":262},[203,171945,30555],{"class":213},[194,171947,171949],{"className":30436,"code":171948,"language":30438,"meta":27,"style":27},"from random import randint as rint\n\nprint(rint(1, 10))\n",[200,171950,171951,171967,171971],{"__ignoreMap":27},[203,171952,171953,171955,171957,171959,171962,171964],{"class":205,"line":206},[203,171954,30795],{"class":209},[203,171956,57854],{"class":213},[203,171958,30450],{"class":209},[203,171960,171961],{"class":213}," randint ",[203,171963,31441],{"class":209},[203,171965,171966],{"class":213}," rint\n",[203,171968,171969],{"class":205,"line":124},[203,171970,2489],{"emptyLinePlaceholder":131},[203,171972,171973,171975,171978,171980,171982,171984],{"class":205,"line":1269},[203,171974,30473],{"class":262},[203,171976,171977],{"class":213},"(rint(",[203,171979,431],{"class":262},[203,171981,12525],{"class":213},[203,171983,660],{"class":262},[203,171985,30555],{"class":213},[174,171987,171989],{"id":171988},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[194,171991,171993],{"className":30436,"code":171992,"language":30438,"meta":27,"style":27},"from random import *\n",[200,171994,171995],{"__ignoreMap":27},[203,171996,171997,171999,172001,172003],{"class":205,"line":206},[203,171998,30795],{"class":209},[203,172000,57854],{"class":213},[203,172002,30450],{"class":209},[203,172004,172005],{"class":209}," *\n",[19,172007,172008],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172010,172012],{"id":172011},"_912-常用内置模块","9.12 常用内置模块",[174,172014,172016],{"id":172015},"_9121-random","9.12.1 random",[194,172018,172020],{"className":30436,"code":172019,"language":30438,"meta":27,"style":27},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[200,172021,172022,172028,172032,172046,172065],{"__ignoreMap":27},[203,172023,172024,172026],{"class":205,"line":206},[203,172025,30450],{"class":209},[203,172027,45386],{"class":213},[203,172029,172030],{"class":205,"line":124},[203,172031,2489],{"emptyLinePlaceholder":131},[203,172033,172034,172036,172038,172040,172042,172044],{"class":205,"line":1269},[203,172035,30473],{"class":262},[203,172037,171859],{"class":213},[203,172039,431],{"class":262},[203,172041,12525],{"class":213},[203,172043,660],{"class":262},[203,172045,30555],{"class":213},[203,172047,172048,172050,172053,172055,172057,172059,172061,172063],{"class":205,"line":1284},[203,172049,30473],{"class":262},[203,172051,172052],{"class":213},"(random.choice([",[203,172054,149946],{"class":318},[203,172056,12525],{"class":213},[203,172058,150994],{"class":318},[203,172060,12525],{"class":213},[203,172062,159789],{"class":318},[203,172064,33201],{"class":213},[203,172066,172067,172069,172072,172074,172076,172078,172080,172082,172084,172086,172088,172090,172092,172094],{"class":205,"line":1290},[203,172068,30473],{"class":262},[203,172070,172071],{"class":213},"(random.sample([",[203,172073,431],{"class":262},[203,172075,12525],{"class":213},[203,172077,291],{"class":262},[203,172079,12525],{"class":213},[203,172081,285],{"class":262},[203,172083,12525],{"class":213},[203,172085,507],{"class":262},[203,172087,12525],{"class":213},[203,172089,533],{"class":262},[203,172091,112260],{"class":213},[203,172093,291],{"class":262},[203,172095,30555],{"class":213},[174,172097,172099],{"id":172098},"_9122-time","9.12.2 time",[194,172101,172103],{"className":30436,"code":172102,"language":30438,"meta":27,"style":27},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[200,172104,172105,172111,172115,172122,172130],{"__ignoreMap":27},[203,172106,172107,172109],{"class":205,"line":206},[203,172108,30450],{"class":209},[203,172110,31887],{"class":213},[203,172112,172113],{"class":205,"line":124},[203,172114,2489],{"emptyLinePlaceholder":131},[203,172116,172117,172119],{"class":205,"line":1269},[203,172118,30473],{"class":262},[203,172120,172121],{"class":213},"(time.time())\n",[203,172123,172124,172126,172128],{"class":205,"line":1284},[203,172125,95129],{"class":213},[203,172127,431],{"class":262},[203,172129,220],{"class":213},[203,172131,172132,172134,172136,172139],{"class":205,"line":1290},[203,172133,30473],{"class":262},[203,172135,214],{"class":213},[203,172137,172138],{"class":318},"\"1秒后执行\"",[203,172140,220],{"class":213},[174,172142,172144],{"id":172143},"_9123-datetime","9.12.3 datetime",[194,172146,172148],{"className":30436,"code":172147,"language":30438,"meta":27,"style":27},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[200,172149,172150,172162,172166,172176,172183],{"__ignoreMap":27},[203,172151,172152,172154,172157,172159],{"class":205,"line":206},[203,172153,30795],{"class":209},[203,172155,172156],{"class":213}," datetime ",[203,172158,30450],{"class":209},[203,172160,172161],{"class":213}," datetime\n",[203,172163,172164],{"class":205,"line":124},[203,172165,2489],{"emptyLinePlaceholder":131},[203,172167,172168,172171,172173],{"class":205,"line":1269},[203,172169,172170],{"class":213},"now ",[203,172172,259],{"class":209},[203,172174,172175],{"class":213}," datetime.now()\n",[203,172177,172178,172180],{"class":205,"line":1284},[203,172179,30473],{"class":262},[203,172181,172182],{"class":213},"(now)\n",[203,172184,172185,172187,172190,172193,172195,172198],{"class":205,"line":1290},[203,172186,30473],{"class":262},[203,172188,172189],{"class":213},"(now.strftime(",[203,172191,172192],{"class":318},"\"%Y-%m-",[203,172194,156749],{"class":262},[203,172196,172197],{"class":318}," %H:%M:%S\"",[203,172199,30555],{"class":213},[174,172201,172203],{"id":172202},"_9124-os","9.12.4 os",[194,172205,172207],{"className":30436,"code":172206,"language":30438,"meta":27,"style":27},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[200,172208,172209,172215,172219,172226],{"__ignoreMap":27},[203,172210,172211,172213],{"class":205,"line":206},[203,172212,30450],{"class":209},[203,172214,45363],{"class":213},[203,172216,172217],{"class":205,"line":124},[203,172218,2489],{"emptyLinePlaceholder":131},[203,172220,172221,172223],{"class":205,"line":1269},[203,172222,30473],{"class":262},[203,172224,172225],{"class":213},"(os.getcwd())\n",[203,172227,172228,172230,172233,172236],{"class":205,"line":1284},[203,172229,30473],{"class":262},[203,172231,172232],{"class":213},"(os.listdir(",[203,172234,172235],{"class":318},"\".\"",[203,172237,30555],{"class":213},[174,172239,172241],{"id":172240},"_9125-sys","9.12.5 sys",[194,172243,172245],{"className":30436,"code":172244,"language":30438,"meta":27,"style":27},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[200,172246,172247,172254,172258,172265],{"__ignoreMap":27},[203,172248,172249,172251],{"class":205,"line":206},[203,172250,30450],{"class":209},[203,172252,172253],{"class":213}," sys\n",[203,172255,172256],{"class":205,"line":124},[203,172257,2489],{"emptyLinePlaceholder":131},[203,172259,172260,172262],{"class":205,"line":1269},[203,172261,30473],{"class":262},[203,172263,172264],{"class":213},"(sys.version)\n",[203,172266,172267,172269],{"class":205,"line":1284},[203,172268,30473],{"class":262},[203,172270,172271],{"class":213},"(sys.path)\n",[14,172273,172275,172276,172278,172279,465],{"id":172274},"_913-if-name-main","9.13 if ",[363,172277,79868],{}," == \"",[363,172280,102116],{},[19,172282,172283,172284,172287],{},"模块被直接运行和被导入时，",[200,172285,172286],{},"__name__"," 的值不同。",[19,172289,172290,172291,24676],{},"创建 ",[200,172292,172293],{},"my_module.py",[194,172295,172297],{"className":30436,"code":172296,"language":30438,"meta":27,"style":27},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[200,172298,172299,172307,172317,172321,172325,172337],{"__ignoreMap":27},[203,172300,172301,172303,172305],{"class":205,"line":206},[203,172302,32005],{"class":209},[203,172304,5299],{"class":2052},[203,172306,151151],{"class":213},[203,172308,172309,172311,172313,172315],{"class":205,"line":124},[203,172310,4179],{"class":209},[203,172312,10959],{"class":213},[203,172314,695],{"class":209},[203,172316,151162],{"class":213},[203,172318,172319],{"class":205,"line":1269},[203,172320,2489],{"emptyLinePlaceholder":131},[203,172322,172323],{"class":205,"line":1284},[203,172324,2489],{"emptyLinePlaceholder":131},[203,172326,172327,172329,172331,172333,172335],{"class":205,"line":1290},[203,172328,1620],{"class":209},[203,172330,31278],{"class":262},[203,172332,101617],{"class":209},[203,172334,101620],{"class":318},[203,172336,3828],{"class":213},[203,172338,172339,172341,172343,172345,172347,172349],{"class":205,"line":1304},[203,172340,31357],{"class":262},[203,172342,166658],{"class":213},[203,172344,431],{"class":262},[203,172346,12525],{"class":213},[203,172348,291],{"class":262},[203,172350,30555],{"class":213},[19,172352,172353],{},"作用：",[157,172355,172356,172359],{},[160,172357,172358],{},"直接运行该文件时，执行测试代码。",[160,172360,172361],{},"被其他文件导入时，不执行测试代码。",[19,172363,172364],{},"这是写模块时很常用的习惯。",[14,172366,172368],{"id":172367},"_914-包","9.14 包",[19,172370,172371,172372,172375],{},"包是包含 ",[200,172373,172374],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172377,172378],{},"目录结构：",[194,172380,172383],{"className":172381,"code":172382,"language":5277,"meta":27},[5275],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[200,172384,172382],{"__ignoreMap":27},[19,172386,172387],{},"导入：",[194,172389,172391],{"className":30436,"code":172390,"language":30438,"meta":27,"style":27},"from utils.file_utils import read_file\n",[200,172392,172393],{"__ignoreMap":27},[203,172394,172395,172397,172400,172402],{"class":205,"line":206},[203,172396,30795],{"class":209},[203,172398,172399],{"class":213}," utils.file_utils ",[203,172401,30450],{"class":209},[203,172403,172404],{"class":213}," read_file\n",[19,172406,172407,172409],{},[200,172408,172374],{}," 可以为空，也可以写包初始化逻辑。",[14,172411,172413],{"id":172412},"_915-第三方包","9.15 第三方包",[19,172415,172416,172417,172419],{},"第三方包通过 ",[200,172418,23922],{}," 安装。",[194,172421,172423],{"className":23913,"code":172422,"language":23915,"meta":27,"style":27},"pip install requests\n",[200,172424,172425],{"__ignoreMap":27},[203,172426,172427,172429,172431],{"class":205,"line":206},[203,172428,23922],{"class":2052},[203,172430,23925],{"class":318},[203,172432,146156],{"class":318},[19,172434,172435],{},"使用：",[194,172437,172439],{"className":30436,"code":172438,"language":30438,"meta":27,"style":27},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[200,172440,172441,172447,172451,172466],{"__ignoreMap":27},[203,172442,172443,172445],{"class":205,"line":206},[203,172444,30450],{"class":209},[203,172446,146156],{"class":213},[203,172448,172449],{"class":205,"line":124},[203,172450,2489],{"emptyLinePlaceholder":131},[203,172452,172453,172456,172458,172461,172464],{"class":205,"line":1269},[203,172454,172455],{"class":213},"response ",[203,172457,259],{"class":209},[203,172459,172460],{"class":213}," requests.get(",[203,172462,172463],{"class":318},"\"https:\u002F\u002Fwww.example.com\"",[203,172465,220],{"class":213},[203,172467,172468,172470],{"class":205,"line":1284},[203,172469,30473],{"class":262},[203,172471,172472],{"class":213},"(response.status_code)\n",[19,172474,172475],{},"查看已安装包：",[194,172477,172479],{"className":23913,"code":172478,"language":23915,"meta":27,"style":27},"pip list\n",[200,172480,172481],{"__ignoreMap":27},[203,172482,172483,172485],{"class":205,"line":206},[203,172484,23922],{"class":2052},[203,172486,119013],{"class":318},[19,172488,172489],{},"导出项目依赖：",[194,172491,172492],{"className":23913,"code":146351,"language":23915,"meta":27,"style":27},[200,172493,172494],{"__ignoreMap":27},[203,172495,172496,172498,172500,172502],{"class":205,"line":206},[203,172497,23922],{"class":2052},[203,172499,146360],{"class":318},[203,172501,26280],{"class":209},[203,172503,146365],{"class":318},[19,172505,172506],{},"安装项目依赖：",[194,172508,172509],{"className":23913,"code":146371,"language":23915,"meta":27,"style":27},[200,172510,172511],{"__ignoreMap":27},[203,172512,172513,172515,172517,172519],{"class":205,"line":206},[203,172514,23922],{"class":2052},[203,172516,23925],{"class":318},[203,172518,119697],{"class":262},[203,172520,146365],{"class":318},[14,172522,172524],{"id":172523},"_916-模块搜索路径","9.16 模块搜索路径",[19,172526,172527,172528,172531],{},"Python 导入模块时会在 ",[200,172529,172530],{},"sys.path"," 中查找。",[194,172533,172535],{"className":30436,"code":172534,"language":30438,"meta":27,"style":27},"import sys\n\nfor path in sys.path:\n    print(path)\n",[200,172536,172537,172543,172547,172559],{"__ignoreMap":27},[203,172538,172539,172541],{"class":205,"line":206},[203,172540,30450],{"class":209},[203,172542,172253],{"class":213},[203,172544,172545],{"class":205,"line":124},[203,172546,2489],{"emptyLinePlaceholder":131},[203,172548,172549,172551,172554,172556],{"class":205,"line":1269},[203,172550,3114],{"class":209},[203,172552,172553],{"class":213}," path ",[203,172555,26101],{"class":209},[203,172557,172558],{"class":213}," sys.path:\n",[203,172560,172561,172563],{"class":205,"line":1284},[203,172562,31357],{"class":262},[203,172564,169287],{"class":213},[19,172566,172567],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,172569,157681],{},[194,172571,172574],{"className":172572,"code":172573,"language":5277,"meta":27},[5275],"random.py\njson.py\ntime.py\n",[200,172575,172573],{"__ignoreMap":27},[19,172577,172578],{},"这些文件名可能导致导入异常。",[14,172580,172582],{"id":172581},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,172584,172378],{},[194,172586,172589],{"className":172587,"code":172588,"language":5277,"meta":27},[5275],"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",[200,172590,172588],{"__ignoreMap":27},[19,172592,172593,24676],{},[200,172594,172595],{},"utils\u002Ffile_utils.py",[194,172597,172599],{"className":30436,"code":172598,"language":30438,"meta":27,"style":27},"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",[200,172600,172601,172607,172617,172621,172625,172635,172645,172653,172659,172663,172690,172700,172704,172708,172718,172744],{"__ignoreMap":27},[203,172602,172603,172605],{"class":205,"line":206},[203,172604,30450],{"class":209},[203,172606,147149],{"class":213},[203,172608,172609,172611,172613,172615],{"class":205,"line":124},[203,172610,30795],{"class":209},[203,172612,108369],{"class":213},[203,172614,30450],{"class":209},[203,172616,108374],{"class":213},[203,172618,172619],{"class":205,"line":1269},[203,172620,2489],{"emptyLinePlaceholder":131},[203,172622,172623],{"class":205,"line":1284},[203,172624,2489],{"emptyLinePlaceholder":131},[203,172626,172627,172629,172632],{"class":205,"line":1290},[203,172628,32005],{"class":209},[203,172630,172631],{"class":2052}," read_json",[203,172633,172634],{"class":213},"(path):\n",[203,172636,172637,172640,172642],{"class":205,"line":1304},[203,172638,172639],{"class":213},"    path ",[203,172641,259],{"class":209},[203,172643,172644],{"class":213}," Path(path)\n",[203,172646,172647,172649,172651],{"class":205,"line":1310},[203,172648,3190],{"class":209},[203,172650,38988],{"class":209},[203,172652,169368],{"class":213},[203,172654,172655,172657],{"class":205,"line":1401},[203,172656,14842],{"class":209},[203,172658,51896],{"class":213},[203,172660,172661],{"class":205,"line":1407},[203,172662,2489],{"emptyLinePlaceholder":131},[203,172664,172665,172667,172669,172672,172674,172676,172678,172680,172682,172684,172686,172688],{"class":205,"line":1419},[203,172666,34236],{"class":209},[203,172668,146849],{"class":262},[203,172670,172671],{"class":213},"(path, ",[203,172673,146859],{"class":318},[203,172675,12525],{"class":213},[203,172677,146864],{"class":5306},[203,172679,259],{"class":209},[203,172681,146869],{"class":318},[203,172683,13804],{"class":213},[203,172685,31441],{"class":209},[203,172687,148211],{"class":5306},[203,172689,3828],{"class":213},[203,172691,172692,172694,172696,172698],{"class":205,"line":1701},[203,172693,14842],{"class":209},[203,172695,148222],{"class":213},[203,172697,45412],{"class":5306},[203,172699,220],{"class":213},[203,172701,172702],{"class":205,"line":1706},[203,172703,2489],{"emptyLinePlaceholder":131},[203,172705,172706],{"class":205,"line":1712},[203,172707,2489],{"emptyLinePlaceholder":131},[203,172709,172710,172712,172715],{"class":205,"line":1717},[203,172711,32005],{"class":209},[203,172713,172714],{"class":2052}," write_json",[203,172716,172717],{"class":213},"(path, data):\n",[203,172719,172720,172722,172724,172726,172728,172730,172732,172734,172736,172738,172740,172742],{"class":205,"line":1731},[203,172721,34236],{"class":209},[203,172723,146849],{"class":262},[203,172725,172671],{"class":213},[203,172727,152034],{"class":318},[203,172729,12525],{"class":213},[203,172731,146864],{"class":5306},[203,172733,259],{"class":209},[203,172735,146869],{"class":318},[203,172737,13804],{"class":213},[203,172739,31441],{"class":209},[203,172741,148211],{"class":5306},[203,172743,3828],{"class":213},[203,172745,172746,172749,172751,172753,172755,172757,172759,172761,172763,172765,172767],{"class":205,"line":1736},[203,172747,172748],{"class":213},"        json.dump(data, ",[203,172750,45412],{"class":5306},[203,172752,12525],{"class":213},[203,172754,147195],{"class":5306},[203,172756,259],{"class":209},[203,172758,34045],{"class":262},[203,172760,12525],{"class":213},[203,172762,152070],{"class":5306},[203,172764,259],{"class":209},[203,172766,291],{"class":262},[203,172768,220],{"class":213},[19,172770,172771,24676],{},[200,172772,154665],{},[194,172774,172776],{"className":30436,"code":172775,"language":30438,"meta":27,"style":27},"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",[200,172777,172778,172789,172793,172806,172826],{"__ignoreMap":27},[203,172779,172780,172782,172784,172786],{"class":205,"line":206},[203,172781,30795],{"class":209},[203,172783,172399],{"class":213},[203,172785,30450],{"class":209},[203,172787,172788],{"class":213}," read_json, write_json\n",[203,172790,172791],{"class":205,"line":124},[203,172792,2489],{"emptyLinePlaceholder":131},[203,172794,172795,172797,172799,172802,172804],{"class":205,"line":1269},[203,172796,159774],{"class":213},[203,172798,259],{"class":209},[203,172800,172801],{"class":213}," read_json(",[203,172803,151889],{"class":318},[203,172805,220],{"class":213},[203,172807,172808,172810,172812,172814,172816,172818,172820,172822,172824],{"class":205,"line":1284},[203,172809,170592],{"class":213},[203,172811,62737],{"class":318},[203,172813,51495],{"class":213},[203,172815,149946],{"class":318},[203,172817,12525],{"class":213},[203,172819,151530],{"class":318},[203,172821,51495],{"class":213},[203,172823,1203],{"class":262},[203,172825,165210],{"class":213},[203,172827,172828,172831,172833],{"class":205,"line":1290},[203,172829,172830],{"class":213},"write_json(",[203,172832,151889],{"class":318},[203,172834,172835],{"class":213},", students)\n",[14,172837,172839],{"id":172838},"_918-易错点","9.18 易错点",[157,172841,172842,172845,172850,172855,172858,172861],{},[160,172843,172844],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[160,172846,172847,172848,28443],{},"能指定异常类型就不要裸写 ",[200,172849,170952],{},[160,172851,172852,172854],{},[200,172853,171327],{}," 无论是否出错都会执行。",[160,172856,172857],{},"模块文件名不要和标准库重名。",[160,172859,172860],{},"导入自己写的模块时，要注意运行目录。",[160,172862,172863],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,172865,172867],{"id":172866},"_919-本章练习","9.19 本章练习",[157,172869,172870,172873,172876,172882,172889],{},[160,172871,172872],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[160,172874,172875],{},"写函数读取文件，如果文件不存在则返回空字符串。",[160,172877,172290,172878,172881],{},[200,172879,172880],{},"math_utils.py","，实现加减乘除函数并导入使用。",[160,172883,172884,172885,172888],{},"创建一个 ",[200,172886,172887],{},"utils"," 包，把 JSON 读写函数放进去。",[160,172890,172891],{},"写一个程序，捕获除零异常和输入格式异常。",[5216,172893,172894],{},"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":27,"searchDepth":124,"depth":124,"links":172896},[172897,172898,172899,172900,172901,172902,172903,172904,172905,172906,172907,172913,172920,172922,172923,172924,172925,172926,172927],{"id":170749,"depth":124,"text":170750},{"id":170877,"depth":124,"text":170878},{"id":170926,"depth":124,"text":170927},{"id":171075,"depth":124,"text":171076},{"id":171247,"depth":124,"text":171248},{"id":171316,"depth":124,"text":171317},{"id":171427,"depth":124,"text":171428},{"id":171553,"depth":124,"text":171554},{"id":171678,"depth":124,"text":171679},{"id":171733,"depth":124,"text":171734},{"id":171832,"depth":124,"text":171833,"children":172908},[172909,172910,172911,172912],{"id":171836,"depth":1269,"text":171837},{"id":171870,"depth":1269,"text":171871},{"id":171909,"depth":1269,"text":171910},{"id":171988,"depth":1269,"text":171989},{"id":172011,"depth":124,"text":172012,"children":172914},[172915,172916,172917,172918,172919],{"id":172015,"depth":1269,"text":172016},{"id":172098,"depth":1269,"text":172099},{"id":172143,"depth":1269,"text":172144},{"id":172202,"depth":1269,"text":172203},{"id":172240,"depth":1269,"text":172241},{"id":172274,"depth":124,"text":172921},"9.13 if name == \"main\"",{"id":172367,"depth":124,"text":172368},{"id":172412,"depth":124,"text":172413},{"id":172523,"depth":124,"text":172524},{"id":172581,"depth":124,"text":172582},{"id":172838,"depth":124,"text":172839},{"id":172866,"depth":124,"text":172867},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170741,"description":23467},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172934,"title":172935,"body":172936,"description":173099,"extension":129,"meta":173100,"navigation":131,"path":173101,"seo":173102,"stem":173103,"__hash__":173104},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172937,"toc":173094},[172938,172941,172944,172947,172958,172960,173034,173037,173040,173043,173046,173049,173052,173055,173058,173061,173064],[10,172939,172935],{"id":172940},"python教程",[19,172942,172943],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,172945,172946],{},"建议学习环境：",[157,172948,172949,172952,172955],{},[160,172950,172951],{},"Python 版本：Python 3.10 及以上。",[160,172953,172954],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[160,172956,172957],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,172959,117136],{"id":117136},[157,172961,172962,172968,172974,172980,172986,172992,172998,173004,173010,173016,173022,173028],{},[160,172963,172964],{},[452,172965,172967],{"href":172966},".\u002Fch1-Python","Python环境与第一个程序",[160,172969,172970],{},[452,172971,172973],{"href":172972},".\u002Fch2","基础语法、变量与字符串",[160,172975,172976],{},[452,172977,172979],{"href":172978},".\u002Fch3","判断语句",[160,172981,172982],{},[452,172983,172985],{"href":172984},".\u002Fch4","循环语句",[160,172987,172988],{},[452,172989,172991],{"href":172990},".\u002Fch5","函数基础",[160,172993,172994],{},[452,172995,172997],{"href":172996},".\u002Fch6","数据容器",[160,172999,173000],{},[452,173001,173003],{"href":173002},".\u002Fch7","函数进阶",[160,173005,173006],{},[452,173007,173009],{"href":173008},".\u002Fch8","文件操作",[160,173011,173012],{},[452,173013,173015],{"href":173014},".\u002Fch9","异常、模块与包",[160,173017,173018],{},[452,173019,173021],{"href":173020},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[160,173023,173024],{},[452,173025,173027],{"href":173026},".\u002Fch11","面向对象基础",[160,173029,173030],{},[452,173031,173033],{"href":173032},".\u002Fch12","综合案例与复习路线",[14,173035,173036],{"id":173036},"学习路线",[19,173038,173039],{},"第一阶段：能运行程序。",[19,173041,173042],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173044,173045],{},"第二阶段：能组织数据。",[19,173047,173048],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173050,173051],{},"第三阶段：能封装逻辑。",[19,173053,173054],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173056,173057],{},"第四阶段：能做小项目。",[19,173059,173060],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173062,173063],{"id":173063},"参考资料",[157,173065,173066,173073,173080,173087],{},[160,173067,173068,173069],{},"黑马程序员 Python 入门教程推荐：",[452,173070,173071],{"href":173071,"rel":173072},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23956],[160,173074,173075,173076],{},"Python 官方中文教程：",[452,173077,173078],{"href":173078,"rel":173079},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23956],[160,173081,173082,173083],{},"Python 标准库文档：",[452,173084,173085],{"href":173085,"rel":173086},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23956],[160,173088,173089,173090],{},"pyecharts 文档：",[452,173091,173092],{"href":173092,"rel":173093},"https:\u002F\u002Fpyecharts.org\u002F",[23956],{"title":27,"searchDepth":124,"depth":124,"links":173095},[173096,173097,173098],{"id":117136,"depth":124,"text":117136},{"id":173036,"depth":124,"text":173036},{"id":173063,"depth":124,"text":173063},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23469},"\u002Fwiki\u002F2024-10-10-python",{"title":172935,"description":173099},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331400484]